diff options
author | Jeija <jeija@mesecons.net> | 2014-11-29 15:08:37 +0100 |
---|---|---|
committer | Jeija <jeija@mesecons.net> | 2014-11-29 15:08:37 +0100 |
commit | c326dc221a4ee6a1b55b681eb1456d7da62de7fb (patch) | |
tree | 60769bae80240ae8cf6947b48ea5eb5b5947ca9a /mesecons/services.lua | |
parent | d2373eb6059fabc2e5116fb8a50ebc02e351d24d (diff) | |
download | mesecons-c326dc221a4ee6a1b55b681eb1456d7da62de7fb.tar mesecons-c326dc221a4ee6a1b55b681eb1456d7da62de7fb.tar.gz mesecons-c326dc221a4ee6a1b55b681eb1456d7da62de7fb.tar.bz2 mesecons-c326dc221a4ee6a1b55b681eb1456d7da62de7fb.tar.xz mesecons-c326dc221a4ee6a1b55b681eb1456d7da62de7fb.zip |
Rewrite Logic Gates: Makes it super-easy to add new gates and cleans up code
Fix bugs in the Luacontroller (when placing, false input pin values were given) and fix variables
leaking into the global environment in pistons.
Diffstat (limited to 'mesecons/services.lua')
-rw-r--r-- | mesecons/services.lua | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/mesecons/services.lua b/mesecons/services.lua index 36d9b80..215fb31 100644 --- a/mesecons/services.lua +++ b/mesecons/services.lua @@ -27,12 +27,27 @@ mesecon.on_placenode = function (pos, node) -- Effectors: Send changesignal and activate or deactivate if mesecon.is_effector(node.name) then - if mesecon.is_powered(pos) then - mesecon.changesignal(pos, node, mesecon.effector_get_rules(node), "on", 1) - mesecon.activate(pos, node, nil, 1) + local powered_rules = {} + local unpowered_rules = {} + + -- for each input rule, check if powered + for _, r in ipairs(mesecon.effector_get_rules(node)) do + local powered = mesecon.is_powered(pos, r) + if powered then table.insert(powered_rules, r) + else table.insert(unpowered_rules, r) end + + local state = powered and mesecon.state.on or mesecon.state.off + mesecon.changesignal(pos, node, r, state, 1) + end + + if (#powered_rules > 0) then + for _, r in ipairs(powered_rules) do + mesecon.activate(pos, node, r, 1) + end else - mesecon.changesignal(pos, node, mesecon.effector_get_rules(node), "off", 1) - mesecon.deactivate(pos, node, nil, 1) + for _, r in ipairs(unpowered_rules) do + mesecon.deactivate(pos, node, r, 1) + end end end end |