From accb67c0234f40da3a6c7f6e105585ab56e7ab59 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 9 Feb 2021 05:54:31 +0100 Subject: [PATCH] autofly: add transport api --- clientmods/autofly/init.lua | 33 ++++++++++++++++++++++++++++++--- clientmods/autofly/wpforms.lua | 36 ++++++++++++++++++++++++------------ clientmods/incrementaltp/init.lua | 12 +++++++++++- 3 files changed, 65 insertions(+), 16 deletions(-) diff --git a/clientmods/autofly/init.lua b/clientmods/autofly/init.lua index 2a3d89012..2df905b57 100644 --- a/clientmods/autofly/init.lua +++ b/clientmods/autofly/init.lua @@ -186,10 +186,16 @@ function autofly.set_hud_info(text) return true end +function autofly.display(pos) + autofly.set_hud_wp(autofly.last_coords, autofly.last_name) + return true +end function autofly.display_waypoint(name) - local pos=autofly.get_waypoint(name) + local pos=name + if type(name) ~= 'table' then pos=autofly.get_waypoint(name) end + autofly.last_name = name autofly.last_coords = pos autofly.set_hud_info(name) @@ -1204,6 +1210,7 @@ function autofly.autotp(tpname) local txt = v:get_item_textures() if ( txt:find('mcl_boats_texture')) then boat_found=true + minetest.display_chat_message("boat found. entering and tping to "..minetest.pos_to_string(autofly.get_waypoint('AUTOTP'))) autofly.aim(vector.add(v:get_pos(),{x=0,y=-1.5,z=0})) minetest.after("0.2",function() minetest.interact("place") end) @@ -1213,10 +1220,16 @@ function autofly.autotp(tpname) return true end end - if not boat_found then minetest.after("5.0",function() autofly.autotp(tpname) end) return end + if not boat_found then + minetest.display_chat_message("no boat found. trying again in 5.") + minetest.after("5.0",function() autofly.autotp(tpname) end) + return end --minetest.sound_play({name = "default_alert", gain = 3.0}) --autofly.delete_waypoint('AUTOTP') end +autofly.register_transport('Fly',function(pos,name) autofly.goto_waypoint(name) end) +autofly.register_transport('Warp',function(pos,name) autofly.warp(name) end) +autofly.register_transport('w+e',function(pos,name) autofly.warpae(name) end) function autofly.axissnap() if not minetest.settings:get_bool('afly_snap') then return end @@ -1246,9 +1259,23 @@ minetest.register_on_death(function() end end) +local function get_dimension(pos) + if pos.y > -65 then return "overworld" + elseif pos.y > -8000 then return "void" + elseif pos.y > -27000 then return "end" + elseif pos.y >29000 then return "void" + elseif pos.y >31000 then return "nether" + else return "void" + end +end + function autofly.warp(name) - local pos=vector.add(autofly.get_waypoint(name),{x=0,y=150,z=0}) + local pos=autofly.get_waypoint(name) if pos then + if pos.y > -64 then + pos=vector.add(pos,{x=0,y=150,z=0}) + end + if get_dimension(pos) == "void" then return false end minetest.localplayer:set_pos(pos) return true end diff --git a/clientmods/autofly/wpforms.lua b/clientmods/autofly/wpforms.lua index 8d0b0f490..1c2ee6670 100644 --- a/clientmods/autofly/wpforms.lua +++ b/clientmods/autofly/wpforms.lua @@ -14,26 +14,35 @@ local stprefix="autofly-".. info['address'] .. '-' autofly = {} wps={} +autofly.registered_transports={} local tspeed = 20 -- speed in blocks per second local speed=0; local ltime=0 +function autofly.register_transport(name,func) + table.insert(autofly.registered_transports,{name=name,func=func}) +end function autofly.display_formspec() local formspec = 'size[5.25,9]' .. 'label[0,0;Waypoint list]' .. 'button_exit[0,7.5;1,0.5;display;Show]' .. 'button[2.625,7.5;1.3,0.5;rename;Rename]' .. - 'button[3.9375,7.5;1.3,0.5;delete;Delete]' .. - 'button_exit[0,8.5;1,0.5;goto;Fly]' .. - 'button_exit[0.8.0,8.5;1,0.5;itp;warp]' .. - 'button_exit[1.6,8.5;1,0.5;autotp;w+e]' .. - 'button_exit[2.4,8.5;1,0.5;itp;itp]' .. - 'button_exit[3.2,8.5;1,0.5;jitp;jitp]' + 'button[3.9375,7.5;1.3,0.5;delete;Delete]' +-- 'button_exit[0,8.5;1,0.5;goto;Fly]' .. +-- 'button_exit[0.8.0,8.5;1,0.5;itp;warp]' .. +-- 'button_exit[1.6,8.5;1,0.5;autotp;w+e]' .. +-- 'button_exit[2.4,8.5;1,0.5;itp;itp]' .. +-- 'button_exit[3.2,8.5;1,0.5;jitp;jitp]' -- Iterate over all the waypoints - if emicor then - formspec=formspec..'button_exit[4.0,8.5;1,0.5;stp;stp]' + local sp=0 + for k,v in pairs(autofly.registered_transports) do + formspec=formspec..'button_exit['..sp..',8.5;1,0.5;'..v.name..';'..v.name..']' + sp=sp+0.8 end +-- if emicor then +-- formspec=formspec..'button_exit[4.0,8.5;1,0.5;stp;stp]' + -- end formspec=formspec..'textlist[0,0.75;5,6;marker;' local selected = 1 formspec_list = {} @@ -92,6 +101,13 @@ minetest.register_on_formspec_input(function(formname, fields) end if name then + for k,v in pairs(autofly.registered_transports) do + if fields[v.name] then + if not v.func(autofly.get_waypoint(name),name) then + minetest.display_chat_message('Error with '..v.name) + end + end + end if fields.display then if not autofly.display_waypoint(name) then minetest.display_chat_message('Error displaying waypoint!') @@ -108,10 +124,6 @@ minetest.register_on_formspec_input(function(formname, fields) if not autofly.autotp(name) then minetest.display_chat_message('warpandexit error') end - elseif fields.stp then - if (emicor and emicor.stp(autofly.get_waypoint(name))) then - minetest.display_chat_message('stp error') - end elseif fields.itp then if incremental_tp then incremetal_tp.tp(autofly.get_waypoint(name)) diff --git a/clientmods/incrementaltp/init.lua b/clientmods/incrementaltp/init.lua index e666c94ed..06356a953 100644 --- a/clientmods/incrementaltp/init.lua +++ b/clientmods/incrementaltp/init.lua @@ -34,12 +34,17 @@ end local function tpstep(target, time, second, variance,sfunc) local pos = minetest.localplayer:get_pos() local vec = vector.subtract(target, pos) + minetest.settings:set_bool("free_move",true) if math.abs(vec.x) + math.abs(vec.y) + math.abs(vec.z) < 1 then minetest.localplayer:set_pos(target) incremental_tp.tpactive=false minetest.display_chat_message("Arrived at " .. minetest.pos_to_string(target)) - if sfunc then sfunc(target) end + if sfunc then + minetest.after(time, function() + sfunc(target) + end) + end return end @@ -68,9 +73,14 @@ function incremental_tp.tp(target, time, variance) end function incremental_tp.tpafter(target,time,variance,sfunc) + incremental_tp.tpactive=true tpstep(target,time,1,variance,sfunc) end +if autofly then autofly.register_transport('itp',function(pos,name) incremental_tp.tp(pos,1) end) end + +if autofly then autofly.register_transport('jitp',function(pos,name) incremental_tp.tp(pos,0.5,0.4) end) end + minetest.register_chatcommand("itp", { description = "Teleport to destination with fixed increments.", params = "", -- 2.11.4.GIT