summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Head <chead@chead.ca>2016-08-21 10:28:10 -0700
committerChristopher Head <chead@chead.ca>2016-08-24 00:42:40 -0700
commit8e6536ca2edd51175733b972fb24014b342681a8 (patch)
treeffabd815387fc0ea49d81c4b193019cf3ef12bc4
parentbc9d4c2d5a1d535f4abc001d527cc65c78227016 (diff)
downloadmesecons-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.lua61
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)