mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-26 12:31:05 +01:00
Refactor some redstone internal code
This commit is contained in:
parent
e85a16f70a
commit
5d913b6d29
1 changed files with 16 additions and 17 deletions
|
@ -37,9 +37,8 @@
|
||||||
-- HIGH-LEVEL Internals
|
-- HIGH-LEVEL Internals
|
||||||
-- mesecon.is_power_on(pos) --> Returns true if pos emits power in any way
|
-- mesecon.is_power_on(pos) --> Returns true if pos emits power in any way
|
||||||
-- mesecon.is_power_off(pos) --> Returns true if pos does not emit power in any way
|
-- mesecon.is_power_off(pos) --> Returns true if pos does not emit power in any way
|
||||||
-- mesecon.is_powered(pos) --> Returns bool, direct_source. bool is true if pos is powered by a receptor, a conductor or an opaque block.
|
-- mesecon.is_powered(pos) --> Returns bool, spread. bool is true if pos is powered by a receptor, a conductor or an opaque block.
|
||||||
-- direct_source is true if it powered at least by one power source directly
|
-- spread is true if it is powered AND also transmits its power one block further.
|
||||||
-- (rather than just indirectly with a strongly-powered (opaque) block.
|
|
||||||
|
|
||||||
-- RULES ROTATION helpers
|
-- RULES ROTATION helpers
|
||||||
-- mesecon.rotate_rules_right(rules)
|
-- mesecon.rotate_rules_right(rules)
|
||||||
|
@ -538,7 +537,7 @@ function mesecon.is_powered(pos, rule, depth, sourcepos, home_pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function power_walk(pos, home_pos, sourcepos, rulenames, rule, depth)
|
local function power_walk(pos, home_pos, sourcepos, rulenames, rule, depth)
|
||||||
local direct_source = false
|
local spread = false
|
||||||
for _, rname in ipairs(rulenames) do
|
for _, rname in ipairs(rulenames) do
|
||||||
local np = vector.add(pos, rname)
|
local np = vector.add(pos, rname)
|
||||||
local nn = mesecon.get_node_force(np)
|
local nn = mesecon.get_node_force(np)
|
||||||
|
@ -546,18 +545,18 @@ function mesecon.is_powered(pos, rule, depth, sourcepos, home_pos)
|
||||||
or mesecon.is_receptor_on (nn.name)) then
|
or mesecon.is_receptor_on (nn.name)) then
|
||||||
if not vector.equals(home_pos, np) then
|
if not vector.equals(home_pos, np) then
|
||||||
local rulez = mesecon.get_any_outputrules(nn)
|
local rulez = mesecon.get_any_outputrules(nn)
|
||||||
local ds_tmp = false
|
local spread_tmp = false
|
||||||
for r=1, #rulez do
|
for r=1, #rulez do
|
||||||
if vector.equals(mesecon.invertRule(rname), rulez[r]) then
|
if vector.equals(mesecon.invertRule(rname), rulez[r]) then
|
||||||
if rulez[r].spread then
|
if rulez[r].spread then
|
||||||
ds_tmp = true
|
spread_tmp = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if depth == 0 or ds_tmp then
|
if depth == 0 or spread_tmp then
|
||||||
table.insert(sourcepos, np)
|
table.insert(sourcepos, np)
|
||||||
if ds_tmp then
|
if spread_tmp then
|
||||||
direct_source = true
|
spread = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -568,22 +567,22 @@ function mesecon.is_powered(pos, rule, depth, sourcepos, home_pos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return sourcepos, direct_source
|
return sourcepos, spread
|
||||||
end
|
end
|
||||||
|
|
||||||
local direct_source = false
|
local spread = false
|
||||||
if not rule then
|
if not rule then
|
||||||
for _, rule in ipairs(mesecon.flattenrules(rules)) do
|
for _, rule in ipairs(mesecon.flattenrules(rules)) do
|
||||||
local direct_source_temp
|
local spread_temp
|
||||||
local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule)
|
local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule)
|
||||||
sourcepos, direct_source_temp = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth)
|
sourcepos, spread_temp = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth)
|
||||||
if direct_source_temp then
|
if spread_temp then
|
||||||
direct_source = true
|
spread = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule)
|
local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule)
|
||||||
sourcepos, direct_source = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth)
|
sourcepos, spread = power_walk(pos, home_pos, sourcepos, rulenames, rule, depth)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Return FALSE if not powered, return list of sources if is powered
|
-- Return FALSE if not powered, return list of sources if is powered
|
||||||
|
@ -591,7 +590,7 @@ function mesecon.is_powered(pos, rule, depth, sourcepos, home_pos)
|
||||||
if (#sourcepos == 0) then
|
if (#sourcepos == 0) then
|
||||||
return false, false
|
return false, false
|
||||||
else
|
else
|
||||||
return sourcepos, direct_source
|
return sourcepos, spread
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue