https://github.com/dragonfireclient/sbots
Simple "pythagorean" bots
https://github.com/dragonfireclient/sbots
Last synced: 7 months ago
JSON representation
Simple "pythagorean" bots
- Host: GitHub
- URL: https://github.com/dragonfireclient/sbots
- Owner: dragonfireclient
- License: other
- Created: 2023-08-17T02:03:44.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-08-17T02:07:06.000Z (almost 3 years ago)
- Last Synced: 2025-01-01T12:41:48.033Z (over 1 year ago)
- Language: Lua
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## sBots
A library for simple "fly (straightly) there and do things" bots for dragonfire.
### Usage
To create a new bot use
`sbots.register_bot(name,bot_definition)`
### Bot Definition
```lua
{
find_pos = function(self,pos) end,
--This function is used to find a new position for the bot to go to.
--If it returns falsey it considers itsself done and calls it a day unless
--stand_waiting is true.
do_pos = function(self,pos) end,
--Function that is called when a bot arrives at the target position.
--Return true to consider this position done and find the next.
do_step = function(dtime) end,
--This function is run every globalstep when the bot is active indiscriminately.
update_pos = function(self,pos) return self:find_pos(self,pos) end,
--This function is run every globalstep when moving_target is true
--to update the target position. By default it just runs the bot's
--find_pos method.
landing_distance = 1,
--How far from the target the bot should stop moving.
moving_target = false,
--Wether the target position needs to be updated "en route".
stand_waiting = false,
--if this is true the bot will not deactivate itsself when find_pos does
--not find any new positions currently.
target_pos = nil, --internal: the current target position.
active = false, --internal if the but is currently active.
}
```
#### Example Bot
included, needs nlist (optional dependency)
Finds and digs nodes from the currently selected nlist
```lua
sbots.register_bot("listDigBot",{
find_pos = function(self,pos)
local nds = minetest.find_nodes_near(pos,60,nlist.get(nlist.selected))
if not nds or #nds == 0 then return end
table.sort(nds,function(a, b) return vector.distance(pos,a) < vector.distance(pos,b) end)
return nds[1]
end,
do_pos = function(self,pos)
local nn=minetest.find_nodes_near(pos,1,nlist.get(nlist.selected),true)
if not nn or #nn == 0 then return true end
for _,v in pairs(nn) do ws.dig(v) end
end,
})
```