From 62f5e05c097aa8838c9863081902fe84450b4ba0 Mon Sep 17 00:00:00 2001 From: orwell96 Date: Sun, 29 May 2016 21:33:09 +0200 Subject: added trackdb and unloaded wagons handling --- helpers.lua | 44 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 26 deletions(-) (limited to 'helpers.lua') diff --git a/helpers.lua b/helpers.lua index 02367d8..515784b 100644 --- a/helpers.lua +++ b/helpers.lua @@ -58,23 +58,19 @@ rely1, rely2 tell to which height the connections are pointed to. 1 means it wil ]] -function advtrains.conway(midreal, prev, drives_on)--in order prev,mid,return +function advtrains.conway(midreal, prev, traintype)--in order prev,mid,return local mid=advtrains.round_vector_floor_y(midreal) - if(not advtrains.is_track_and_drives_on(minetest.get_node(mid).name, drives_on)) then - --print("[advtrains]in conway: no rail, returning!") - return nil - end - if(not prev or not advtrains.is_track_and_drives_on(minetest.get_node(advtrains.round_vector_floor_y(prev)).name, drives_on)) then - --print("[advtrains]in conway: no prev rail, there should be an initial path!, returning!") + local drives_on=advtrains.all_traintypes[traintype].drives_on + + if not advtrains.get_rail_info_at(advtrains.round_vector_floor_y(prev), traintype) then return nil end - local midnode=minetest.get_node_or_nil(mid) - if not midnode then --print("[advtrains][conway] midnode is ignore") + + local midnode_ok, middir1, middir2, midrely1, midrely2=advtrains.get_rail_info_at(advtrains.round_vector_floor_y(mid), traintype) + if not midnode_ok then return nil end - local middir1, middir2, midrely1, midrely2=advtrains.get_track_connections(midnode.name, midnode.param2) - local next, chkdir, chkrely, y_offset y_offset=0 --print("[advtrains] in order mid1,mid2",middir1,middir2) @@ -110,29 +106,21 @@ function advtrains.conway(midreal, prev, drives_on)--in order prev,mid,return print("[advtrains]in conway: no next rail(nil), returning!") return nil end - local nextnode=minetest.get_node_or_nil(advtrains.round_vector_floor_y(next)) - if not nextnode then print("[advtrains][conway] nextnode is ignore") - return nil - end + + local nextnode_ok, nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_rail_info_at(advtrains.round_vector_floor_y(mid), traintype) --is it a rail? - if(not advtrains.is_track_and_drives_on(nextnode.name, drives_on)) then + if(not nextnode_ok) then print("[advtrains]in conway: next "..minetest.pos_to_string(next).." not a rail, trying one node below!") next.y=next.y-1 y_offset=y_offset-1 - nextnode=minetest.get_node_or_nil(advtrains.round_vector_floor_y(next)) - if not nextnode then --print("[advtrains][conway] nextnode is ignore") - return nil - end - if(not advtrains.is_track_and_drives_on(nextnode.name, drives_on)) then + nextnode_ok, nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_rail_info_at(advtrains.round_vector_floor_y(mid), traintype) + if(not nextnode_ok) then print("[advtrains]in conway: one below "..minetest.pos_to_string(next).." is not a rail either, returning!") return nil end end - --print("[advtrains]trying to find if rail connects: "..(next and minetest.pos_to_string(next) or "nil").."(chkdir is "..(chkdir or "nil")..", y-offset "..y_offset..")") - - local nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_track_connections(nextnode.name, nextnode.param2) --is this next rail connecting to the mid? if not ( (((nextdir1+4)%8)==chkdir and nextrely1==chkrely-y_offset) or (((nextdir2+4)%8)==chkdir and nextrely2==chkrely-y_offset) ) then @@ -140,9 +128,13 @@ function advtrains.conway(midreal, prev, drives_on)--in order prev,mid,return next.y=next.y-1 y_offset=y_offset-1 - nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_track_connections(nextnode.name, nextnode.param2) + nextnode_ok, nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_rail_info_at(advtrains.round_vector_floor_y(mid), traintype) + if(not nextnode_ok) then + print("[advtrains]in conway: (at connecting if check again) one below "..minetest.pos_to_string(next).." is not a rail either, returning!") + return nil + end if not ( (((nextdir1+4)%8)==chkdir and nextrely1==chkrely) or (((nextdir2+4)%8)==chkdir and nextrely2==chkrely) ) then - print("[advtrains]in conway: next "..minetest.pos_to_string(next).." rail not connecting, returning!") + print("[advtrains]in conway: one below "..minetest.pos_to_string(next).." rail not connecting, returning!") --print("[advtrains] in order mid1,2,next1,2,chkdir "..middir1.." "..middir2.." "..nextdir1.." "..nextdir2.." "..chkdir) return nil end -- cgit v1.2.3