summaryrefslogtreecommitdiff
path: root/mesecons
diff options
context:
space:
mode:
authorJeija <norrepli@gmail.com>2012-12-27 09:28:04 +0100
committerJeija <norrepli@gmail.com>2012-12-27 09:28:04 +0100
commit7fe4947056656982ee9af9fad8d67d14e7086c9a (patch)
treeacd204a90592824381e2ac6a0e725c85d6eff298 /mesecons
parent5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba (diff)
downloadmesecons-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.lua3
-rw-r--r--mesecons/internal.lua35
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