Use iterative algorithm for mesecon.find_receptor_on, major performance improvement for large

circuits.
This also fixes a crash introduced with the previous commit that occured when placing a wire
crossing.
This commit is contained in:
Jeija
2014-11-22 17:12:48 +01:00
parent 29dc50057c
commit d19e975955
4 changed files with 47 additions and 58 deletions

View File

@ -196,20 +196,23 @@ end
-- does not overwrite values; number keys (ipairs) are appended, not overwritten
mesecon.mergetable = function(source, dest)
local rval = mesecon.tablecopy(dest)
for k, v in pairs(source) do
dest[k] = dest[k] or v
rval[k] = dest[k] or mesecon.tablecopy(v)
end
for i, v in ipairs(source) do
table.insert(rval, mesecon.tablecopy(v))
end
for i, v in ipairs(source) do
table.insert(dest, v)
end
return rval
end
mesecon.register_node = function(name, spec_common, spec_off, spec_on)
spec_common.drop = spec_common.drop or name .. "_off"
mesecon.mergetable(spec_common, spec_on);
mesecon.mergetable(spec_common, spec_off);
spec_on = mesecon.mergetable(spec_common, spec_on);
spec_off = mesecon.mergetable(spec_common, spec_off);
minetest.register_node(name .. "_on", spec_on)
minetest.register_node(name .. "_off", spec_off)