diff options
author | Jeija <jeija@mesecons.net> | 2014-11-22 20:49:54 +0100 |
---|---|---|
committer | Jeija <jeija@mesecons.net> | 2014-11-22 20:49:54 +0100 |
commit | 80d136125ef8f17af85d0045800d5e761ace3229 (patch) | |
tree | f3c564c4151795f6852a64355a58813eb66aba15 /mesecons | |
parent | a550323fea995437896d809df5e5c3795271219c (diff) | |
download | mesecons-80d136125ef8f17af85d0045800d5e761ace3229.tar mesecons-80d136125ef8f17af85d0045800d5e761ace3229.tar.gz mesecons-80d136125ef8f17af85d0045800d5e761ace3229.tar.bz2 mesecons-80d136125ef8f17af85d0045800d5e761ace3229.tar.xz mesecons-80d136125ef8f17af85d0045800d5e761ace3229.zip |
Fix bug in mesecon.find_receptor that caused false turnoffs and rewrite lever +
switch
Diffstat (limited to 'mesecons')
-rw-r--r-- | mesecons/internal.lua | 5 | ||||
-rw-r--r-- | mesecons/util.lua | 20 |
2 files changed, 21 insertions, 4 deletions
diff --git a/mesecons/internal.lua b/mesecons/internal.lua index 5db8512..1072aa8 100644 --- a/mesecons/internal.lua +++ b/mesecons/internal.lua @@ -486,9 +486,10 @@ function mesecon.find_receptor_on(pos, link) local links = mesecon.rules_link_rule_all_inverted(f.pos, r) for _, l in ipairs(links) do - if not checked[f.pos.x .. f.pos.y .. f.pos.z] then + local checkedstring = np.x..np.y..np.z..l.x..l.y..l.z + if not checked[checkedstring] then table.insert(frontiers, {pos = np, link = l}) - checked[f.pos.x .. f.pos.y .. f.pos.z] = true + checked[checkedstring] = true end end end diff --git a/mesecons/util.lua b/mesecons/util.lua index 786568f..11cc95a 100644 --- a/mesecons/util.lua +++ b/mesecons/util.lua @@ -195,7 +195,7 @@ function mesecon.cmpAny(t1, t2) end -- does not overwrite values; number keys (ipairs) are appended, not overwritten -mesecon.mergetable = function(source, dest) +function mesecon.mergetable(source, dest) local rval = mesecon.tablecopy(dest) for k, v in pairs(source) do @@ -208,8 +208,11 @@ mesecon.mergetable = function(source, dest) return rval end -mesecon.register_node = function(name, spec_common, spec_off, spec_on) +function mesecon.register_node(name, spec_common, spec_off, spec_on) spec_common.drop = spec_common.drop or name .. "_off" + spec_common.__mesecon_basename = name + spec_on.__mesecon_state = "on" + spec_off.__mesecon_state = "off" spec_on = mesecon.mergetable(spec_common, spec_on); spec_off = mesecon.mergetable(spec_common, spec_off); @@ -217,3 +220,16 @@ mesecon.register_node = function(name, spec_common, spec_off, spec_on) minetest.register_node(name .. "_on", spec_on) minetest.register_node(name .. "_off", spec_off) end + +-- swap onstate and offstate nodes, returns new state +function mesecon.flipstate(pos, node) + local nodedef = minetest.registered_nodes[node.name] + local newstate + if (nodedef.__mesecon_state == "on") then newstate = "off" end + if (nodedef.__mesecon_state == "off") then newstate = "on" end + + minetest.swap_node(pos, {name = nodedef.__mesecon_basename .. "_" .. newstate, + param2 = node.param2}) + + return newstate +end |