Make mesecons only connect to input and output ports (e.g. of the delayer)

This commit is contained in:
Jeija
2012-08-13 16:49:14 +02:00
parent 439af2a88b
commit 24c50571f7
4 changed files with 138 additions and 30 deletions

View File

@ -37,6 +37,7 @@ function mesecon:receptor_get_rules(node)
i = i + 1
end
local i = 1
while(mesecon.receptors_off[i] ~= nil) do
if mesecon.receptors_off[i].name == node.name then
if mesecon.receptors_off[i].get_rules ~= nil then
@ -52,6 +53,64 @@ function mesecon:receptor_get_rules(node)
return nil
end
function mesecon:effector_get_input_rules(node)
local i = 1
while(mesecon.effectors[i] ~= nil) do
if mesecon.effectors[i].onstate == node.name
or mesecon.effectors[i].offstate == node.name then
if mesecon.effectors[i].get_input_rules ~= nil then
return mesecon.effectors[i].get_input_rules(node.param2)
elseif mesecon.receptors[i].input_rules ~=nil then
return mesecon.effectors[i].input_rules
else
return mesecon:get_rules("default")
end
end
i = i + 1
end
end
-- Helpers for nodeboxlike mesecons
function mesecon:receptor_outputs (cpos, rpos) --cpos = conductor pos, rpos = receptor pos
local rnode = minetest.env:get_node (rpos)
local rules = mesecon:receptor_get_rules (rnode)
if rules == nil then return false end
local i = 1
while rules[i] ~= nil do
if rpos.x + rules[i].x == cpos.x
and rpos.y + rules[i].y == cpos.y
and rpos.z + rules[i].z == cpos.z then
return true
end
i = i + 1
end
return false
end
function mesecon:effector_inputs (cpos, rpos) --cpos = conductor pos, rpos = receptor pos
local rnode = minetest.env:get_node (rpos)
local rules = mesecon:effector_get_input_rules (rnode)
if rules == nil then return false end
local i = 1
while rules[i] ~= nil do
if rpos.x + rules[i].x == cpos.x
and rpos.y + rules[i].y == cpos.y
and rpos.z + rules[i].z == cpos.z then
return true
end
i = i + 1
end
return false
end
function mesecon:node_connects(cpos, rpos) --cpos = conductor pos, rpos = receptor pos
return mesecon:receptor_outputs (cpos, rpos) or mesecon:effector_inputs (cpos, rpos)
end
--Signals
function mesecon:activate(pos)