mirror of
https://github.com/minetest-mods/mesecons.git
synced 2025-03-21 19:40:38 +01:00
Speed up internal info getters a little bit
This commit is contained in:
parent
27c3c515b4
commit
fee53f38d5
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user