diff options
author | Christopher Head <chead@chead.ca> | 2016-08-21 10:28:10 -0700 |
---|---|---|
committer | Christopher Head <chead@chead.ca> | 2016-08-24 00:42:40 -0700 |
commit | 8e6536ca2edd51175733b972fb24014b342681a8 (patch) | |
tree | ffabd815387fc0ea49d81c4b193019cf3ef12bc4 | |
parent | bc9d4c2d5a1d535f4abc001d527cc65c78227016 (diff) | |
download | mesecons-8e6536ca2edd51175733b972fb24014b342681a8.tar mesecons-8e6536ca2edd51175733b972fb24014b342681a8.tar.gz mesecons-8e6536ca2edd51175733b972fb24014b342681a8.tar.bz2 mesecons-8e6536ca2edd51175733b972fb24014b342681a8.tar.xz mesecons-8e6536ca2edd51175733b972fb24014b342681a8.zip |
Simplify turnon/turnoff.
It is no longer possible for get_node_force to return nil if the target
location does, in fact, exist, because a VM will always be able to load
it (whereas a forceload might not, due to exhaustion of forceload
resources). So it is no longer necessary to handle get_node_force
returning nil by deferring processing.
-rw-r--r-- | mesecons/internal.lua | 61 |
1 files changed, 14 insertions, 47 deletions
diff --git a/mesecons/internal.lua b/mesecons/internal.lua index e11de4f..5309e24 100644 --- a/mesecons/internal.lua +++ b/mesecons/internal.lua @@ -379,42 +379,25 @@ function mesecon.turnon(pos, link) local f = frontiers[depth] local node = mesecon.get_node_force(f.pos) - -- area not loaded, postpone action if not node then - mesecon.queue:add_action(f.pos, "turnon", {f.link}, nil, true) + -- Area does not exist; do nothing elseif mesecon.is_conductor_off(node, f.link) then local rules = mesecon.conductor_get_rules(node) - - -- Success: If false, at least one neighboring node is unloaded, - -- postpone turning on action - local success = true local neighborlinks = {} -- call turnon on neighbors for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do local np = vector.add(f.pos, r) - - -- Neighboring node not loaded, postpone turning on current node - -- since we can't even know if neighboring node has matching rules - if not mesecon.get_node_force(np) then - success = false - break - else - neighborlinks[minetest.hash_node_position(np)] = mesecon.rules_link_rule_all(f.pos, r) - end + neighborlinks[minetest.hash_node_position(np)] = mesecon.rules_link_rule_all(f.pos, r) end - if success then - mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link)) + mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link)) - for npos, links in pairs(neighborlinks) do - -- links = all links to node, l = each single link - for _, l in ipairs(links) do - table.insert(frontiers, {pos = minetest.get_position_from_hash(npos), link = l}) - end + for npos, links in pairs(neighborlinks) do + -- links = all links to node, l = each single link + for _, l in ipairs(links) do + table.insert(frontiers, {pos = minetest.get_position_from_hash(npos), link = l}) end - else - mesecon.queue:add_action(f.pos, "turnon", {f.link}, nil, true) end elseif mesecon.is_effector(node.name) then mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth) @@ -440,40 +423,24 @@ function mesecon.turnoff(pos, link) -- area not loaded, postpone action if not node then - mesecon.queue:add_action(f.pos, "turnoff", {f.link}, nil, true) + -- Area does not exist; do nothing elseif mesecon.is_conductor_on(node, f.link) then local rules = mesecon.conductor_get_rules(node) - - -- Success: If false, at least one neighboring node is unloaded, - -- postpone turning on action - local success = true local neighborlinks = {} -- call turnoff on neighbors for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do local np = vector.add(f.pos, r) - - -- Neighboring node not loaded, postpone turning off current node - -- since we can't even know if neighboring node has matching rules - if not mesecon.get_node_force(np) then - success = false - break - else - neighborlinks[minetest.hash_node_position(np)] = mesecon.rules_link_rule_all(f.pos, r) - end + neighborlinks[minetest.hash_node_position(np)] = mesecon.rules_link_rule_all(f.pos, r) end - if success then - mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link)) + mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link)) - for npos, links in pairs(neighborlinks) do - -- links = all links to node, l = each single link - for _, l in ipairs(links) do - table.insert(frontiers, {pos = minetest.get_position_from_hash(npos), link = l}) - end + for npos, links in pairs(neighborlinks) do + -- links = all links to node, l = each single link + for _, l in ipairs(links) do + table.insert(frontiers, {pos = minetest.get_position_from_hash(npos), link = l}) end - else - mesecon.queue:add_action(f.pos, "turnoff", {f.link}, nil, true) end elseif mesecon.is_effector(node.name) then mesecon.changesignal(f.pos, node, f.link, mesecon.state.off, depth) |