diff options
author | Jeija <norrepli@gmail.com> | 2012-12-08 19:02:34 +0100 |
---|---|---|
committer | Jeija <norrepli@gmail.com> | 2012-12-08 19:02:34 +0100 |
commit | 8578fd89c859162bda64af48826b7c1ae1c9e744 (patch) | |
tree | 8e4c917dc5228f1bcf8da6234b18ea2d5b6cc4c7 /mesecons | |
parent | 472650f099deda6a3f1ab0900c7319a78b352d68 (diff) | |
download | mesecons-8578fd89c859162bda64af48826b7c1ae1c9e744.tar mesecons-8578fd89c859162bda64af48826b7c1ae1c9e744.tar.gz mesecons-8578fd89c859162bda64af48826b7c1ae1c9e744.tar.bz2 mesecons-8578fd89c859162bda64af48826b7c1ae1c9e744.tar.xz mesecons-8578fd89c859162bda64af48826b7c1ae1c9e744.zip |
Port lightstones (as reference for effectors) + blinky plant to the new nodedef system
Diffstat (limited to 'mesecons')
-rw-r--r-- | mesecons/internal.lua | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/mesecons/internal.lua b/mesecons/internal.lua index c4bef7c..ce72d38 100644 --- a/mesecons/internal.lua +++ b/mesecons/internal.lua @@ -2,7 +2,7 @@ --Receptors function mesecon:is_receptor_node(nodename) - if minetest.registered_nodes[nodename] + if minetest.registered_nodes[nodename] and minetest.registered_nodes[nodename].mesecons and minetest.registered_nodes[nodename].mesecons.receptor and minetest.registered_nodes[nodename].mesecons.receptor.state == mesecon.state.on then @@ -43,7 +43,7 @@ function mesecon:receptor_get_rules(node) return rules end end - for i, receptor in ipairs(mesecon.receptors) do --TODO + for _, receptor in ipairs(mesecon.receptors) do --TODO if receptor.onstate == node.name or receptor.offstate == node.name then if receptor.get_rules ~= nil then return receptor.get_rules(node.param2) @@ -59,38 +59,38 @@ end -- Effectors function mesecon:is_effector_on(nodename) - for i, effector in ipairs(mesecon.effectors) do --TODO - if effector.onstate == nodename then - return true - end - end if minetest.registered_nodes[nodename] and minetest.registered_nodes[nodename].mesecons and minetest.registered_nodes[nodename].mesecons.effector and minetest.registered_nodes[nodename].mesecons.effector.state == mesecon.state.on then return true end - return false -end - -function mesecon:is_effector_off(nodename) for i, effector in ipairs(mesecon.effectors) do --TODO - if effector.offstate == nodename then + if effector.onstate == nodename then return true end end + return false +end + +function mesecon:is_effector_off(nodename) if minetest.registered_nodes[nodename] and minetest.registered_nodes[nodename].mesecons and minetest.registered_nodes[nodename].mesecons.effector and minetest.registered_nodes[nodename].mesecons.effector.state == mesecon.state.off then return true end + for i, effector in ipairs(mesecon.effectors) do --TODO + if effector.offstate == nodename then + return true + end + end return false end function mesecon:is_effector(nodename) - if minetest.registered_nodes[nodename] - and minetest.registered_nodes[nodename].mesecons + if minetest.registered_nodes[nodename] + and minetest.registered_nodes[nodename].mesecons and minetest.registered_nodes[nodename].mesecons.effector then return true end @@ -125,22 +125,40 @@ end --Signals -function mesecon:activate(pos) --TODO +function mesecon:activate(pos) local node = minetest.env:get_node(pos) - for i, action in ipairs(mesecon.actions_on) do + if minetest.registered_nodes[node.name] + and minetest.registered_nodes[node.name].mesecons + and minetest.registered_nodes[node.name].mesecons.effector + and minetest.registered_nodes[node.name].mesecons.effector.action_on then + minetest.registered_nodes[node.name].mesecons.effector.action_on (pos, node) + end + for _, action in ipairs(mesecon.actions_on) do --TODO action(pos, node) end end function mesecon:deactivate(pos) --TODO - local node = minetest.env:get_node(pos) - for i, action in ipairs(mesecon.actions_off) do + local node = minetest.env:get_node(pos) + if minetest.registered_nodes[node.name] + and minetest.registered_nodes[node.name].mesecons + and minetest.registered_nodes[node.name].mesecons.effector + and minetest.registered_nodes[node.name].mesecons.effector.action_off then + minetest.registered_nodes[node.name].mesecons.effector.action_off(pos, node) + end + for _, action in ipairs(mesecon.actions_off) do action(pos, node) end end function mesecon:changesignal(pos) --TODO - local node = minetest.env:get_node(pos) + local node = minetest.env:get_node(pos) + if minetest.registered_nodes[nodename] + and minetest.registered_nodes[nodename].mesecons + and minetest.registered_nodes[nodename].mesecons.effector + and minetest.registered_nodes[nodename].mesecons.effector.action_change then + minetest.registered_nodes[nodename].mesecons.action_change(pos, node) + end for i, action in ipairs(mesecon.actions_change) do action(pos, node) end @@ -221,7 +239,7 @@ function mesecon:is_conductor_off(nodename) end function mesecon:is_conductor(nodename) - --TODO: simplify + --TODO return mesecon:is_conductor_on(nodename) or mesecon:is_conductor_off(nodename) end |