summaryrefslogtreecommitdiff
path: root/mesecons/services.lua
diff options
context:
space:
mode:
authorJeija <jeija@mesecons.net>2014-11-29 15:08:37 +0100
committerJeija <jeija@mesecons.net>2014-11-29 15:08:37 +0100
commitc326dc221a4ee6a1b55b681eb1456d7da62de7fb (patch)
tree60769bae80240ae8cf6947b48ea5eb5b5947ca9a /mesecons/services.lua
parentd2373eb6059fabc2e5116fb8a50ebc02e351d24d (diff)
downloadmesecons-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.lua25
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