forked from minetest-mods/mesecons
		
	Use vector helper functions instead of old builtin cmpPos and addPosRule functions
This commit is contained in:
		@@ -23,7 +23,7 @@ function mesecon.queue:add_action(pos, func, params, time, overwritecheck, prior
 | 
			
		||||
	-- Otherwise, add the action to the queue
 | 
			
		||||
	if overwritecheck then -- check if old action has to be overwritten / removed:
 | 
			
		||||
		for i, ac in ipairs(mesecon.queue.actions) do
 | 
			
		||||
			if(mesecon.cmpPos(pos, ac.pos)
 | 
			
		||||
			if(vector.equals(pos, ac.pos)
 | 
			
		||||
			and mesecon.cmpAny(overwritecheck, ac.owcheck)) then
 | 
			
		||||
				toremove = i
 | 
			
		||||
				break
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ mesecon.queue:add_function("receptor_on", function (pos, rules)
 | 
			
		||||
 | 
			
		||||
	-- if area (any of the rule targets) is not loaded, keep trying and call this again later
 | 
			
		||||
	for _, rule in ipairs(mesecon.flattenrules(rules)) do
 | 
			
		||||
		local np = mesecon.addPosRule(pos, rule)
 | 
			
		||||
		local np = vector.add(pos, rule)
 | 
			
		||||
		-- if area is not loaded, keep trying
 | 
			
		||||
		if minetest.get_node_or_nil(np) == nil then
 | 
			
		||||
			mesecon.queue:add_action(pos, "receptor_on", {rules}, nil, rules)
 | 
			
		||||
@@ -84,7 +84,7 @@ mesecon.queue:add_function("receptor_on", function (pos, rules)
 | 
			
		||||
 | 
			
		||||
	-- execute action
 | 
			
		||||
	for _, rule in ipairs(mesecon.flattenrules(rules)) do
 | 
			
		||||
		local np = mesecon.addPosRule(pos, rule)
 | 
			
		||||
		local np = vector.add(pos, rule)
 | 
			
		||||
		local rulenames = mesecon.rules_link_rule_all(pos, rule)
 | 
			
		||||
		for _, rulename in ipairs(rulenames) do
 | 
			
		||||
			mesecon.turnon(np, rulename)
 | 
			
		||||
@@ -101,7 +101,7 @@ mesecon.queue:add_function("receptor_off", function (pos, rules)
 | 
			
		||||
 | 
			
		||||
	-- if area (any of the rule targets) is not loaded, keep trying and call this again later
 | 
			
		||||
	for _, rule in ipairs(mesecon.flattenrules(rules)) do
 | 
			
		||||
		local np = mesecon.addPosRule(pos, rule)
 | 
			
		||||
		local np = vector.add(pos, rule)
 | 
			
		||||
		if minetest.get_node_or_nil(np) == nil then
 | 
			
		||||
			mesecon.queue:add_action(pos, "receptor_off", {rules}, nil, rules)
 | 
			
		||||
			return
 | 
			
		||||
@@ -109,7 +109,7 @@ mesecon.queue:add_function("receptor_off", function (pos, rules)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	for _, rule in ipairs(mesecon.flattenrules(rules)) do
 | 
			
		||||
		local np = mesecon.addPosRule(pos, rule)
 | 
			
		||||
		local np = vector.add(pos, rule)
 | 
			
		||||
		local rulenames = mesecon.rules_link_rule_all(pos, rule)
 | 
			
		||||
		for _, rulename in ipairs(rulenames) do
 | 
			
		||||
			if not mesecon.connected_to_receptor(np, mesecon.invertRule(rule)) then
 | 
			
		||||
 
 | 
			
		||||
@@ -374,7 +374,7 @@ function mesecon.turnon(pos, link)
 | 
			
		||||
 | 
			
		||||
			-- call turnon on neighbors: normal rules
 | 
			
		||||
			for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
 | 
			
		||||
				local np = mesecon.addPosRule(f.pos, r)
 | 
			
		||||
				local np = vector.add(f.pos, r)
 | 
			
		||||
 | 
			
		||||
				-- area not loaded, postpone action
 | 
			
		||||
				if not minetest.get_node_or_nil(np) then
 | 
			
		||||
@@ -420,7 +420,7 @@ function mesecon.turnoff(pos, link)
 | 
			
		||||
 | 
			
		||||
			-- call turnoff on neighbors: normal rules
 | 
			
		||||
			for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
 | 
			
		||||
				local np = mesecon.addPosRule(f.pos, r)
 | 
			
		||||
				local np = vector.add(f.pos, r)
 | 
			
		||||
 | 
			
		||||
				-- area not loaded, postpone action
 | 
			
		||||
				if not minetest.get_node_or_nil(np) then
 | 
			
		||||
@@ -458,7 +458,7 @@ function mesecon.connected_to_receptor(pos, link)
 | 
			
		||||
	for _, rule in ipairs(mesecon.rule2meta(link, rules)) do
 | 
			
		||||
		local links = mesecon.rules_link_rule_all_inverted(pos, rule)
 | 
			
		||||
		for _, l in ipairs(links) do
 | 
			
		||||
			local np = mesecon.addPosRule(pos, l)
 | 
			
		||||
			local np = vector.add(pos, l)
 | 
			
		||||
			if mesecon.find_receptor_on(np, mesecon.invertRule(l)) then
 | 
			
		||||
				return true
 | 
			
		||||
			end
 | 
			
		||||
@@ -485,7 +485,7 @@ function mesecon.find_receptor_on(pos, link)
 | 
			
		||||
 | 
			
		||||
			-- call turnoff on neighbors: normal rules
 | 
			
		||||
			for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
 | 
			
		||||
				local np = mesecon.addPosRule(f.pos, r)
 | 
			
		||||
				local np = vector.add(f.pos, r)
 | 
			
		||||
 | 
			
		||||
				local links = mesecon.rules_link_rule_all_inverted(f.pos, r)
 | 
			
		||||
				for _, l in ipairs(links) do
 | 
			
		||||
@@ -513,10 +513,10 @@ function mesecon.rules_link(output, input, dug_outputrules) --output/input are p
 | 
			
		||||
 | 
			
		||||
	for _, outputrule in ipairs(mesecon.flattenrules(outputrules)) do
 | 
			
		||||
		-- Check if output sends to input
 | 
			
		||||
		if mesecon.cmpPos(mesecon.addPosRule(output, outputrule), input) then
 | 
			
		||||
		if vector.equals(vector.add(output, outputrule), input) then
 | 
			
		||||
			for _, inputrule in ipairs(mesecon.flattenrules(inputrules)) do
 | 
			
		||||
				-- Check if input accepts from output
 | 
			
		||||
				if  mesecon.cmpPos(mesecon.addPosRule(input, inputrule), output) then
 | 
			
		||||
				if  vector.equals(vector.add(input, inputrule), output) then
 | 
			
		||||
					return true, inputrule
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
@@ -526,7 +526,7 @@ function mesecon.rules_link(output, input, dug_outputrules) --output/input are p
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon.rules_link_rule_all(output, rule)
 | 
			
		||||
	local input = mesecon.addPosRule(output, rule)
 | 
			
		||||
	local input = vector.add(output, rule)
 | 
			
		||||
	local inputnode = minetest.get_node(input)
 | 
			
		||||
	local inputrules = mesecon.get_any_inputrules (inputnode)
 | 
			
		||||
	if not inputrules then
 | 
			
		||||
@@ -536,7 +536,7 @@ function mesecon.rules_link_rule_all(output, rule)
 | 
			
		||||
 | 
			
		||||
	for _, inputrule in ipairs(mesecon.flattenrules(inputrules)) do
 | 
			
		||||
		-- Check if input accepts from output
 | 
			
		||||
		if  mesecon.cmpPos(mesecon.addPosRule(input, inputrule), output) then
 | 
			
		||||
		if  vector.equals(vector.add(input, inputrule), output) then
 | 
			
		||||
			table.insert(rules, inputrule)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -545,7 +545,7 @@ end
 | 
			
		||||
 | 
			
		||||
function mesecon.rules_link_rule_all_inverted(input, rule)
 | 
			
		||||
	--local irule = mesecon.invertRule(rule)
 | 
			
		||||
	local output = mesecon.addPosRule(input, rule)
 | 
			
		||||
	local output = vector.add(input, rule)
 | 
			
		||||
	local outputnode = minetest.get_node(output)
 | 
			
		||||
	local outputrules = mesecon.get_any_outputrules (outputnode)
 | 
			
		||||
	if not outputrules then
 | 
			
		||||
@@ -554,7 +554,7 @@ function mesecon.rules_link_rule_all_inverted(input, rule)
 | 
			
		||||
	local rules = {}
 | 
			
		||||
 | 
			
		||||
	for _, outputrule in ipairs(mesecon.flattenrules(outputrules)) do
 | 
			
		||||
		if  mesecon.cmpPos(mesecon.addPosRule(output, outputrule), input) then
 | 
			
		||||
		if  vector.equals(vector.add(output, outputrule), input) then
 | 
			
		||||
			table.insert(rules, mesecon.invertRule(outputrule))
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -577,7 +577,7 @@ function mesecon.is_powered(pos, rule)
 | 
			
		||||
		for _, rule in ipairs(mesecon.flattenrules(rules)) do
 | 
			
		||||
			local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule)
 | 
			
		||||
			for _, rname in ipairs(rulenames) do
 | 
			
		||||
				local np = mesecon.addPosRule(pos, rname)
 | 
			
		||||
				local np = vector.add(pos, rname)
 | 
			
		||||
				local nn = minetest.get_node(np)
 | 
			
		||||
				if (mesecon.is_conductor_on (nn, mesecon.invertRule(rname))
 | 
			
		||||
				or mesecon.is_receptor_on (nn.name)) then
 | 
			
		||||
@@ -588,7 +588,7 @@ function mesecon.is_powered(pos, rule)
 | 
			
		||||
	else
 | 
			
		||||
		local rulenames = mesecon.rules_link_rule_all_inverted(pos, rule)
 | 
			
		||||
		for _, rname in ipairs(rulenames) do
 | 
			
		||||
			local np = mesecon.addPosRule(pos, rname)
 | 
			
		||||
			local np = vector.add(pos, rname)
 | 
			
		||||
			local nn = minetest.get_node(np)
 | 
			
		||||
			if (mesecon.is_conductor_on (nn, mesecon.invertRule(rname))
 | 
			
		||||
			or mesecon.is_receptor_on (nn.name)) then
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ mesecon.on_placenode = function (pos, node)
 | 
			
		||||
			-- also call receptor_on if itself is powered already, so that neighboring
 | 
			
		||||
			-- conductors will be activated (when pushing an on-conductor with a piston)
 | 
			
		||||
			for _, s in ipairs(sources) do
 | 
			
		||||
				local rule = {x = pos.x - s.x, y = pos.y - s.y, z = pos.z - s.z}
 | 
			
		||||
				local rule = vector.subtract(pos, s)
 | 
			
		||||
				mesecon.turnon(pos, rule)
 | 
			
		||||
			end
 | 
			
		||||
			--mesecon.receptor_on (pos, mesecon.conductor_get_rules(node))
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ function mesecon.rule2bit(findrule, allrules)
 | 
			
		||||
	end
 | 
			
		||||
	for m,metarule in ipairs( allrules) do
 | 
			
		||||
	for _,    rule in ipairs(metarule ) do
 | 
			
		||||
		if mesecon.cmpPos(findrule, rule) then
 | 
			
		||||
		if vector.equals(findrule, rule) then
 | 
			
		||||
			return m
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -69,7 +69,7 @@ function mesecon.rule2metaindex(findrule, allrules)
 | 
			
		||||
 | 
			
		||||
	for m, metarule in ipairs( allrules) do
 | 
			
		||||
	for _,     rule in ipairs(metarule ) do
 | 
			
		||||
		if mesecon.cmpPos(findrule, rule) then
 | 
			
		||||
		if vector.equals(findrule, rule) then
 | 
			
		||||
			return m
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -133,15 +133,7 @@ function mesecon.set_bit(binary,bit,value)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon.invertRule(r)
 | 
			
		||||
	return {x = -r.x, y = -r.y, z = -r.z}
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon.addPosRule(p, r)
 | 
			
		||||
	return {x = p.x + r.x, y = p.y + r.y, z = p.z + r.z}
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon.cmpPos(p1, p2)
 | 
			
		||||
	return (p1.x == p2.x and p1.y == p2.y and p1.z == p2.z)
 | 
			
		||||
	return vector.multiply(r, -1)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon.tablecopy(table) -- deep table copy
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ local wire_getconnect = function (from_pos, self_pos)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		for _, r in ipairs(mesecon.flattenrules(rules)) do
 | 
			
		||||
			if (mesecon.cmpPos(mesecon.addPosRule(self_pos, r), from_pos)) then
 | 
			
		||||
			if (vector.equals(vector.add(self_pos, r), from_pos)) then
 | 
			
		||||
				return true
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
@@ -35,7 +35,7 @@ local wire_updateconnect = function (pos)
 | 
			
		||||
	local connections = {}
 | 
			
		||||
 | 
			
		||||
	for _, r in ipairs(mesecon.rules.default) do
 | 
			
		||||
		if wire_getconnect(pos, mesecon.addPosRule(pos, r)) then
 | 
			
		||||
		if wire_getconnect(pos, vector.add(pos, r)) then
 | 
			
		||||
			table.insert(connections, r)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -83,7 +83,7 @@ local update_on_place_dig = function (pos, node)
 | 
			
		||||
	if (not rules) then return end
 | 
			
		||||
 | 
			
		||||
	for _, r in ipairs(mesecon.flattenrules(rules)) do
 | 
			
		||||
		local np = mesecon.addPosRule(pos, r)
 | 
			
		||||
		local np = vector.add(pos, r)
 | 
			
		||||
		if minetest.registered_nodes[minetest.get_node(np).name]
 | 
			
		||||
		and minetest.registered_nodes[minetest.get_node(np).name].mesecon_wire then
 | 
			
		||||
			wire_updateconnect(np)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user