diff --git a/mesecons/init.lua b/mesecons/init.lua index 83e611b..c11e480 100644 --- a/mesecons/init.lua +++ b/mesecons/init.lua @@ -99,7 +99,6 @@ mesecon.queue:add_function("receptor_off", function (pos, rules) local rulenames = mesecon.rules_link_rule_all(pos, rule) for _, rulename in ipairs(rulenames) do mesecon.vm_begin() - mesecon.changesignal(np, minetest.get_node(np), rulename, mesecon.state.off, 2) -- Turnoff returns true if turnoff process was successful, no onstate receptor -- was found along the way. Commit changes that were made in voxelmanip. If turnoff diff --git a/mesecons/internal.lua b/mesecons/internal.lua index 6f52b44..a28c430 100644 --- a/mesecons/internal.lua +++ b/mesecons/internal.lua @@ -542,9 +542,12 @@ function mesecon.turnoff(pos, link) end for _, sig in ipairs(signals) do - mesecon.changesignal(sig.pos, sig.node, sig.link, mesecon.state.off, sig.depth) - if mesecon.is_effector_on(sig.node.name) and not mesecon.is_powered(sig.pos) then - mesecon.deactivate(sig.pos, sig.node, sig.link, sig.depth) + -- If sig.depth is 1, it has not yet been checked that the power source is actually off. + if sig.depth > 1 or not mesecon.is_powered(sig.pos, sig.link) then + mesecon.changesignal(sig.pos, sig.node, sig.link, mesecon.state.off, sig.depth) + if mesecon.is_effector_on(sig.node.name) and not mesecon.is_powered(sig.pos) then + mesecon.deactivate(sig.pos, sig.node, sig.link, sig.depth) + end end end diff --git a/mesecons_mvps/spec/node_spec.lua b/mesecons_mvps/spec/node_spec.lua index 3f16718..2a9d170 100644 --- a/mesecons_mvps/spec/node_spec.lua +++ b/mesecons_mvps/spec/node_spec.lua @@ -206,7 +206,7 @@ describe("node movement", function() end) -- Since turnon is called before turnoff when pushing, effectors may be incorrectly turned off. - pending("does not overwrite turnon with receptor_off", function() + it("does not overwrite turnon with receptor_off", function() local pos = {x = 0, y = 0, z = 0} local dir = {x = 1, y = 0, z = 0} mesecon._test_place(pos, "mesecons:test_effector")