36 lines
1000 B
Lua
36 lines
1000 B
Lua
local function get_3dpos_from_yaw_and_pitch(r,yaw,pitch)
|
|
local tg=vector.new(0,0,0)
|
|
tg.x= r * math.sin(yaw)
|
|
tg.y= r * math.sin(pitch)
|
|
tg.z= r * math.cos(yaw)
|
|
return tg
|
|
end
|
|
local nexttarget=vector.new(0,0,0)
|
|
|
|
local sdst=40
|
|
|
|
function autofly.pathfind(coords)
|
|
local lp=minetest.localplayer
|
|
autofly.aim(coords)
|
|
local yaw=lp:get_yaw()
|
|
local pitch=lp:get_pitch()
|
|
local ltgt=vector.add(lp:get_pos(),get_3dpos_from_yaw_and_pitch(sdst,yaw,pitch))
|
|
local tgt=vector.new(0,0,0)
|
|
|
|
if not minetest.line_of_sight(lp:get_pos(), ltgt) then
|
|
local path=minetest.find_path(lp:get_pos(),ltgt,sdst*2,100,100,'Dijkstra')
|
|
if not path then
|
|
minetest.display_chat_message("no path found.")
|
|
return
|
|
end
|
|
tgt=vector.add(path[1],vector.new(0,2,0))
|
|
if vector.distance(lp:get_pos(),tgt) < 6 then
|
|
tgt=vector.add(path[2],vector.new(0,2,0))
|
|
end
|
|
else
|
|
tgt=ltgt
|
|
end
|
|
autofly.aim(tgt)
|
|
autofly.goto(tgt)
|
|
end
|