diff options
author | Jeija <norrepli@gmail.com> | 2012-12-27 09:28:04 +0100 |
---|---|---|
committer | Jeija <norrepli@gmail.com> | 2012-12-27 09:28:04 +0100 |
commit | 7fe4947056656982ee9af9fad8d67d14e7086c9a (patch) | |
tree | acd204a90592824381e2ac6a0e725c85d6eff298 /mesecons | |
parent | 5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba (diff) | |
download | mesecons-7fe4947056656982ee9af9fad8d67d14e7086c9a.tar mesecons-7fe4947056656982ee9af9fad8d67d14e7086c9a.tar.gz mesecons-7fe4947056656982ee9af9fad8d67d14e7086c9a.tar.bz2 mesecons-7fe4947056656982ee9af9fad8d67d14e7086c9a.tar.xz mesecons-7fe4947056656982ee9af9fad8d67d14e7086c9a.zip |
Bugfix foes for pistons, delayyrs, gates and microcontrollers. Rework delayers.
Diffstat (limited to 'mesecons')
-rw-r--r-- | mesecons/init.lua | 3 | ||||
-rw-r--r-- | mesecons/internal.lua | 35 |
2 files changed, 27 insertions, 11 deletions
diff --git a/mesecons/init.lua b/mesecons/init.lua index f53a5bf..011c96f 100644 --- a/mesecons/init.lua +++ b/mesecons/init.lua @@ -70,6 +70,7 @@ dofile(minetest.get_modpath("mesecons").."/internal.lua"); -- Deprecated stuff -- To be removed in future releases +-- Currently there is nothing here dofile(minetest.get_modpath("mesecons").."/legacy.lua"); -- API @@ -100,7 +101,7 @@ function mesecon:receptor_off(pos, rules) end -print("[OK] mesecons") +print("[OK] Mesecons") --The actual wires dofile(minetest.get_modpath("mesecons").."/wires.lua"); diff --git a/mesecons/internal.lua b/mesecons/internal.lua index c7efd1a..2d84787 100644 --- a/mesecons/internal.lua +++ b/mesecons/internal.lua @@ -331,9 +331,26 @@ function mesecon:turnoff(pos, rulename) end -function mesecon:connected_to_receptor(pos, checked) - checked = checked or {} +function mesecon:connected_to_receptor(pos) + local node = minetest.env:get_node(pos) + + -- Check if conductors around are connected + local rules = mesecon:get_any_inputrules(node) + if not rules then return false end + + for _, rule in ipairs(rules) do + local np = mesecon:addPosRule(pos, rule) + if mesecon:rules_link(np, pos) then + if mesecon:find_receptor_on(np, {}) then + return true + end + end + end + return false +end + +function mesecon:find_receptor_on(pos, checked) -- find out if node has already been checked (to prevent from endless loop) for _, cp in ipairs(checked) do if mesecon:cmpPos(cp, pos) then @@ -343,27 +360,25 @@ function mesecon:connected_to_receptor(pos, checked) -- add current position to checked table.insert(checked, {x=pos.x, y=pos.y, z=pos.z}) - local node = minetest.env:get_node(pos) + if mesecon:is_receptor_on(node.name) then + return true + end + if mesecon:is_conductor(node.name) then - -- Check if conductors around are connected local rules = mesecon:conductor_get_rules(node) - for _, rule in ipairs(rules) do local np = mesecon:addPosRule(pos, rule) if mesecon:rules_link(np, pos) then - connected, checked = mesecon:connected_to_receptor(np, checked) - if connected then + if mesecon:find_receptor_on(np, checked) then return true end end end - elseif mesecon:is_receptor_on(node.name) then - return true end - return false, checked + return false end function mesecon:rules_link(output, input, dug_outputrules) --output/input are positions (outputrules optional, used if node has been dug), second return value: the name of the affected input rule |