mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-22 05:42:33 +01:00
Refactor switching station ABMs (#508)
When the function is defined inside the ABM, a new closure is allocated every time the ABM runs. Since the action function is already way too long, it's better for readability and performance to split it out.
This commit is contained in:
parent
bb05ff8fd2
commit
d119a67482
@ -119,13 +119,13 @@ end
|
|||||||
-- Generic function to add found connected nodes to the right classification array
|
-- Generic function to add found connected nodes to the right classification array
|
||||||
local check_node_subp = function(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, pos, machines, tier, sw_pos, from_below, network_id, queue)
|
local check_node_subp = function(PR_nodes, RE_nodes, BA_nodes, SP_nodes, all_nodes, pos, machines, tier, sw_pos, from_below, network_id, queue)
|
||||||
technic.get_or_load_node(pos)
|
technic.get_or_load_node(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local name = minetest.get_node(pos).name
|
local name = minetest.get_node(pos).name
|
||||||
|
|
||||||
if technic.is_tier_cable(name, tier) then
|
if technic.is_tier_cable(name, tier) then
|
||||||
add_cable_node(all_nodes, pos,network_id, queue)
|
add_cable_node(all_nodes, pos,network_id, queue)
|
||||||
elseif machines[name] then
|
elseif machines[name] then
|
||||||
--dprint(name.." is a "..machines[name])
|
--dprint(name.." is a "..machines[name])
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string(tier.."_network",minetest.pos_to_string(sw_pos))
|
meta:set_string(tier.."_network",minetest.pos_to_string(sw_pos))
|
||||||
if machines[name] == technic.producer then
|
if machines[name] == technic.producer then
|
||||||
add_network_node(PR_nodes, pos, network_id)
|
add_network_node(PR_nodes, pos, network_id)
|
||||||
@ -227,6 +227,20 @@ minetest.register_chatcommand("powerctrl", {
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Run all the nodes
|
||||||
|
local function run_nodes(list, run_stage)
|
||||||
|
for _, pos in ipairs(list) do
|
||||||
|
technic.get_or_load_node(pos)
|
||||||
|
local node = minetest.get_node_or_nil(pos)
|
||||||
|
if node and node.name then
|
||||||
|
local nodedef = minetest.registered_nodes[node.name]
|
||||||
|
if nodedef and nodedef.technic_run then
|
||||||
|
nodedef.technic_run(pos, node, run_stage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = {"technic:switching_station"},
|
nodenames = {"technic:switching_station"},
|
||||||
label = "Switching Station", -- allows the mtt profiler to profile this abm individually
|
label = "Switching Station", -- allows the mtt profiler to profile this abm individually
|
||||||
@ -281,21 +295,6 @@ minetest.register_abm({
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Run all the nodes
|
|
||||||
local function run_nodes(list, run_stage)
|
|
||||||
for _, pos2 in ipairs(list) do
|
|
||||||
technic.get_or_load_node(pos2)
|
|
||||||
local node2 = minetest.get_node(pos2)
|
|
||||||
local nodedef
|
|
||||||
if node2 and node2.name then
|
|
||||||
nodedef = minetest.registered_nodes[node2.name]
|
|
||||||
end
|
|
||||||
if nodedef and nodedef.technic_run then
|
|
||||||
nodedef.technic_run(pos2, node2, run_stage)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
run_nodes(PR_nodes, technic.producer)
|
run_nodes(PR_nodes, technic.producer)
|
||||||
run_nodes(RE_nodes, technic.receiver)
|
run_nodes(RE_nodes, technic.receiver)
|
||||||
run_nodes(BA_nodes, technic.battery)
|
run_nodes(BA_nodes, technic.battery)
|
||||||
@ -467,7 +466,6 @@ minetest.register_abm({
|
|||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
for tier, machines in pairs(technic.machines) do
|
for tier, machines in pairs(technic.machines) do
|
||||||
if machines[node.name] and switching_station_timeout_count(pos, tier) then
|
if machines[node.name] and switching_station_timeout_count(pos, tier) then
|
||||||
local nodedef = minetest.registered_nodes[node.name]
|
local nodedef = minetest.registered_nodes[node.name]
|
||||||
@ -493,7 +491,6 @@ minetest.register_abm({
|
|||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local pos1 = {x=pos.x,y=pos.y-1,z=pos.z}
|
local pos1 = {x=pos.x,y=pos.y-1,z=pos.z}
|
||||||
local tier = technic.get_cable_tier(minetest.get_node(pos1).name)
|
local tier = technic.get_cable_tier(minetest.get_node(pos1).name)
|
||||||
if not tier then return end
|
if not tier then return end
|
||||||
|
Loading…
Reference in New Issue
Block a user