Send changesignals for placed receptors when not powered, make on_placenode code more readable

with comments. Also fixes a bug of lua- / microcontrollers not being updated when pushed by a
piston.
This could cause some bugs, even though I haven't found any while testing as it is a very core part of mesecons.
This commit is contained in:
Jeija 2014-03-21 21:31:34 +01:00
parent a9427d267b
commit 1852e967a9
2 changed files with 20 additions and 9 deletions

@ -39,7 +39,6 @@
-- } -- }
--} --}
-- PUBLIC VARIABLES -- PUBLIC VARIABLES
mesecon={} -- contains all functions and all global variables mesecon={} -- contains all functions and all global variables
mesecon.queue={} -- contains the ActionQueue mesecon.queue={} -- contains the ActionQueue

@ -1,20 +1,32 @@
mesecon.on_placenode = function (pos, node) mesecon.on_placenode = function (pos, node)
-- Receptors: Send on signal when active
if mesecon:is_receptor_on(node.name) then if mesecon:is_receptor_on(node.name) then
mesecon:receptor_on(pos, mesecon:receptor_get_rules(node)) mesecon:receptor_on(pos, mesecon:receptor_get_rules(node))
elseif mesecon:is_powered(pos) then end
-- Conductors: Send turnon signal when powered or replace by respective offstate conductor
-- if placed conductor is an onstate one
if mesecon:is_conductor(node.name) then if mesecon:is_conductor(node.name) then
-- receptor_on if itself is powered already if mesecon:is_powered(pos) then
-- also call receptor_on if itself is powered already, so that neighboring
-- conductors will be activated (when pushing an on-conductor with a piston)
mesecon:turnon (pos) mesecon:turnon (pos)
mesecon:receptor_on (pos, mesecon:conductor_get_rules(node)) mesecon:receptor_on (pos, mesecon:conductor_get_rules(node))
else elseif mesecon:is_conductor_off(node.name) then
minetest.swap_node(pos, {name = mesecon:get_conductor_off(node)})
end
end
-- 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:changesignal(pos, node, mesecon:effector_get_rules(node), "on", 1)
mesecon:activate(pos, node, nil, 1) mesecon:activate(pos, node, nil, 1)
end else
elseif mesecon:is_conductor_on(node) then mesecon:changesignal(pos, node, mesecon:effector_get_rules(node), "off", 1)
minetest.swap_node(pos, {name = mesecon:get_conductor_off(node)})
elseif mesecon:is_effector_on (node.name) then
mesecon:deactivate(pos, node, nil, 1) mesecon:deactivate(pos, node, nil, 1)
end end
end
end end
mesecon.on_dignode = function (pos, node) mesecon.on_dignode = function (pos, node)