1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 /* Minetest-c55 Copyright (C) 2010 celero-- passive.lua -- API to passive components, as described in passive_api.txt of advtrains_luaautomation -- This has been moved to the advtrains core in turn with the interlocking system, -- to prevent a dependency on luaautomation. local deprecation_warned = {} function advtrains.getstate(parpos, pnode) local pos if atlatc then pos = atlatc.pcnaming.resolve_pos(parpos) else pos = advtrains.round_vector_floor_y(parpos) end if type(pos)~="table" or (not pos.x or not pos.y or not pos.z) then debug.sethook() error("Invalid position supplied to getstate") end local node=pnode or advtrains.ndb.get_node(pos) local ndef=minetest.registered_nodes[node.name] local st if ndef and ndef.advtrains and ndef.advtrains.getstate then st=ndef.advtrains.getstate elseif ndef and ndef.luaautomation and ndef.luaautomation.getstate then if not deprecation_warned[node.name] then minetest.log("warning", node.name.." uses deprecated definition of ATLATC functions in the 'luaautomation' field. Please move them to the 'advtrains' field!") end st=ndef.luaautomation.getstate else return nil end if type(st)=="function" then return st(pos, node) else return st end end function advtrains.setstate(parpos, newstate, pnode) local pos if atlatc then pos = atlatc.pcnaming.resolve_pos(parpos) else pos = advtrains.round_vector_floor_y(parpos) end if type(pos)~="table" or (not pos.x or not pos.y or not pos.z) then debug.sethook() error("Invalid position supplied to getstate") end local node=pnode or advtrains.ndb.get_node(pos) local ndef=minetest.registered_nodes[node.name] local st if ndef and ndef.advtrains and ndef.advtrains.setstate then st=ndef.advtrains.setstate elseif ndef and ndef.luaautomation and ndef.luaautomation.setstate then if not deprecation_warned[node.name] then minetest.log("warning", node.name.." uses deprecated definition of ATLATC functions in the 'luaautomation' field. Please move them to the 'advtrains' field!") end st=ndef.luaautomation.setstate else return nil end if advtrains.get_train_at_pos(pos) then return false end if advtrains.interlocking and advtrains.interlocking.route.has_route_lock(minetest.pos_to_string(pos)) then return false end st(pos, node, newstate) return true end function advtrains.is_passive(parpos, pnode) local pos if atlatc then pos = atlatc.pcnaming.resolve_pos(parpos) else pos = advtrains.round_vector_floor_y(parpos) end if type(pos)~="table" or (not pos.x or not pos.y or not pos.z) then debug.sethook() error("Invalid position supplied to getstate") end local node=pnode or advtrains.ndb.get_node(pos) local ndef=minetest.registered_nodes[node.name] if ndef and ndef.advtrains and ndef.advtrains.getstate then return true elseif ndef and ndef.luaautomation and ndef.luaautomation.getstate then if not deprecation_warned[node.name] then minetest.log("warning", node.name.." uses deprecated definition of ATLATC functions in the 'luaautomation' field. Please move them to the 'advtrains' field!") end return true else return false end end -- switches a node back to fallback state, if defined. Doesn't support pcnaming. function advtrains.set_fallback_state(pos, pnode) local node=pnode or advtrains.ndb.get_node(pos) local ndef=minetest.registered_nodes[node.name] local st if ndef and ndef.advtrains and ndef.advtrains.setstate and ndef.advtrains.fallback_state then if advtrains.get_train_at_pos(pos) then return false end if advtrains.interlocking and advtrains.interlocking.route.has_route_lock(minetest.pos_to_string(pos)) then return false end ndef.advtrains.setstate(pos, node, ndef.advtrains.fallback_state) return true end end