Speed up internal info getters a little bit

This commit is contained in:
Jude Melton-Houghton 2022-05-19 18:36:26 -04:00
parent 27c3c515b4
commit fee53f38d5

View File

@ -50,48 +50,55 @@
mesecon.fifo_queue = dofile(minetest.get_modpath("mesecons").."/fifo_queue.lua") mesecon.fifo_queue = dofile(minetest.get_modpath("mesecons").."/fifo_queue.lua")
-- General -- General
function mesecon.get_effector(nodename)
if minetest.registered_nodes[nodename] local function get_mesecons_spec(nodename)
and minetest.registered_nodes[nodename].mesecons local def = minetest.registered_nodes[nodename]
and minetest.registered_nodes[nodename].mesecons.effector then return def and def.mesecons
return minetest.registered_nodes[nodename].mesecons.effector end
local function get_rules(def, node)
local rules = def.rules
if type(rules) == 'function' then
return rules(node)
elseif rules then
return rules
end end
return mesecon.rules.default
end
function mesecon.get_effector(nodename)
local mesecons_spec = get_mesecons_spec(nodename)
return mesecons_spec and mesecons_spec.effector
end end
function mesecon.get_receptor(nodename) function mesecon.get_receptor(nodename)
if minetest.registered_nodes[nodename] local mesecons_spec = get_mesecons_spec(nodename)
and minetest.registered_nodes[nodename].mesecons return mesecons_spec and mesecons_spec.receptor
and minetest.registered_nodes[nodename].mesecons.receptor then
return minetest.registered_nodes[nodename].mesecons.receptor
end
end end
function mesecon.get_conductor(nodename) function mesecon.get_conductor(nodename)
if minetest.registered_nodes[nodename] local mesecons_spec = get_mesecons_spec(nodename)
and minetest.registered_nodes[nodename].mesecons return mesecons_spec and mesecons_spec.conductor
and minetest.registered_nodes[nodename].mesecons.conductor then
return minetest.registered_nodes[nodename].mesecons.conductor
end
end end
function mesecon.get_any_outputrules(node) function mesecon.get_any_outputrules(node)
if not node then return nil end if not node then return end
local mesecons_spec = get_mesecons_spec(node.name)
if mesecon.is_conductor(node.name) then if not mesecons_spec then return end
return mesecon.conductor_get_rules(node) local conductor = mesecons_spec.conductor
elseif mesecon.is_receptor(node.name) then if conductor then return get_rules(conductor, node) end
return mesecon.receptor_get_rules(node) local receptor = mesecons_spec.receptor
end if receptor then return get_rules(receptor, node) end
end end
function mesecon.get_any_inputrules(node) function mesecon.get_any_inputrules(node)
if not node then return nil end if not node then return end
local mesecons_spec = get_mesecons_spec(node.name)
if mesecon.is_conductor(node.name) then if not mesecons_spec then return end
return mesecon.conductor_get_rules(node) local conductor = mesecons_spec.conductor
elseif mesecon.is_effector(node.name) then if conductor then return get_rules(conductor, node) end
return mesecon.effector_get_rules(node) local effector = mesecons_spec.effector
end if effector then return get_rules(effector, node) end
end end
function mesecon.get_any_rules(node) function mesecon.get_any_rules(node)
@ -127,16 +134,7 @@ end
function mesecon.receptor_get_rules(node) function mesecon.receptor_get_rules(node)
local receptor = mesecon.get_receptor(node.name) local receptor = mesecon.get_receptor(node.name)
if receptor then return receptor and get_rules(receptor, node) or mesecon.rules.default
local rules = receptor.rules
if type(rules) == 'function' then
return rules(node)
elseif rules then
return rules
end
end
return mesecon.rules.default
end end
-- Effectors -- Effectors
@ -167,15 +165,7 @@ end
function mesecon.effector_get_rules(node) function mesecon.effector_get_rules(node)
local effector = mesecon.get_effector(node.name) local effector = mesecon.get_effector(node.name)
if effector then return effector and get_rules(effector, node) or mesecon.rules.default
local rules = effector.rules
if type(rules) == 'function' then
return rules(node)
elseif rules then
return rules
end
end
return mesecon.rules.default
end end
-- ####################### -- #######################
@ -340,15 +330,7 @@ end
function mesecon.conductor_get_rules(node) function mesecon.conductor_get_rules(node)
local conductor = mesecon.get_conductor(node.name) local conductor = mesecon.get_conductor(node.name)
if conductor then return conductor and get_rules(conductor, node) or mesecon.rules.default
local rules = conductor.rules
if type(rules) == 'function' then
return rules(node)
elseif rules then
return rules
end
end
return mesecon.rules.default
end end
-- some more general high-level stuff -- some more general high-level stuff