advtrains/advtrains_luaautomation/passive.lua

53 lines
1.5 KiB
Lua

-- passive.lua
-- API to passive components, as described in passive_api.txt
local function getstate(parpos)
local pos=atlatc.pcnaming.resolve_pos(parpos)
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=advtrains.ndb.get_node(pos)
local ndef=minetest.registered_nodes[node.name]
if ndef and ndef.luaautomation and ndef.luaautomation.getstate then
local st=ndef.luaautomation.getstate
if type(st)=="function" then
return st(pos, node)
else
return st
end
end
return nil
end
local function setstate(parpos, newstate)
local pos=atlatc.pcnaming.resolve_pos(parpos)
if type(pos)~="table" or (not pos.x or not pos.y or not pos.z) then
debug.sethook()
error("Invalid position supplied to setstate")
end
local node=advtrains.ndb.get_node(pos)
local ndef=minetest.registered_nodes[node.name]
if ndef and ndef.luaautomation and ndef.luaautomation.setstate then
local st=ndef.luaautomation.setstate
st(pos, node, newstate)
end
end
local function is_passive(parpos)
local pos=atlatc.pcnaming.resolve_pos(parpos)
if type(pos)~="table" or (not pos.x or not pos.y or not pos.z) then
return false
end
local node=advtrains.ndb.get_node(pos)
local ndef=minetest.registered_nodes[node.name]
if ndef and ndef.luaautomation and ndef.luaautomation.getstate then
return true
end
return false
end
-- gets called from environment.lua
-- return the values here to keep them local
return getstate, setstate, is_passive