diff options
| author | Vanessa Ezekowitz <vanessaezekowitz@gmail.com> | 2013-11-26 00:23:14 -0500 | 
|---|---|---|
| committer | Vanessa Ezekowitz <vanessaezekowitz@gmail.com> | 2013-11-26 00:26:38 -0500 | 
| commit | bd1d8bbd86fa6a892cb57932cd9f159b6975db91 (patch) | |
| tree | 4a5307d275f02d1255b56b64d55d82fbf0d64be1 | |
| parent | bf7993b802734b5b029fa0a0b99cea9e2af1c619 (diff) | |
Make the tube_connects={} method work properly for technic devices.
Also phase out "old new" API, leaving only the "tube_connects={}" method,
as nothing in technic or pipeworks uses it.
Fix a few more places where minetest.facedir_to_dir() was duplicated, since
that code is part of Minetest 0.4.8.
| -rw-r--r-- | autoplace_tubes.lua | 137 | ||||
| -rw-r--r-- | deployer.lua | 23 | ||||
| -rw-r--r-- | item_transport.lua | 77 | ||||
| -rw-r--r-- | node_breaker.lua | 24 | ||||
| -rw-r--r-- | tubes.lua | 23 | 
5 files changed, 22 insertions, 262 deletions
| diff --git a/autoplace_tubes.lua b/autoplace_tubes.lua index 30f15fc..b67bf4f 100644 --- a/autoplace_tubes.lua +++ b/autoplace_tubes.lua @@ -26,95 +26,10 @@ if pipeworks == nil then      pipeworks = {}  end --- this was tested experimentally, because I can't the whole bit arithematic - --- with these facingRight means "We're facing the right side of whatever it is" -pipeworks.connects = { -    -- a filter's output is on the right, input on the left -    facingLeft = function (i,param2) -        -- measured with a mese filter -        if i == 1 then -            return param2 == 2 or param2 == 6 or param2 == 10 or param2 == 20 -        elseif i == 2 then -            return param2 == 0 or param2 == 4 or param2 == 8 or param2 == 22 -        elseif i == 3 then -            return param2 == 7 or param2 == 9 or param2 == 12 or param2 == 18 -        elseif i == 4 then -            return param2 == 5 or param2 == 11 or param2 == 14 or param2 == 16 -        elseif i == 5 then -            return param2 == 1 or param2 == 13 or param2 == 17 or param2 == 21 -        elseif i == 6 then -            return param2 == 3 or param2 == 15 or param2 == 19 -        end -    end, -    facingRight = function (i,param2) -        -- measured with a mese filter -        if i == 1 then -            return param2 == 0 or param2 == 4 or param2 == 8 or param2 == 22 -        elseif i == 2 then -            return param2 == 2 or param2 == 6 or param2 == 10 or param2 == 20 -        elseif i == 3 then -            return param2 == 5 or param2 == 11 or param2 == 14 or param2 == 16 -        elseif i == 4 then -            return param2 == 7 or param2 == 9 or param2 == 12 or param2 == 18 -        elseif i == 5 then -            return param2 == 3 or param2 == 15 or param2 == 19 -        elseif i == 6 then -            return param2 == 1 or param2 == 13 or param2 == 17 or param2 == 21 -        end -    end, -    facingFront = function (i,param2) -        -- measured with a chest and a technic:nodebreaker -        if i == 1 then -            return param2 == 3 or param2 == 7 or param2 == 11 or param2 == 21 -        elseif i == 2 then -            return param2 == 1 or param2 == 5 or param2 == 9 -        elseif i == 3 then -            return param2 == 4 or param2 == 10 or param2 == 14 or param2 == 19 -        elseif i == 4 then -            return param2 == 6 or param2 == 8 or param2 == 15 or param2 == 17 -        elseif i == 5 then -            return param2 == 14 or param2 == 18 or param2 == 22 or param2 == 2 -        elseif i == 6 then -            return param2 == 12 or param2 == 16 or param2 == 20 or param2 == 0 -        end -    end, -    facingSide = function (i,param2) -        -- aka not top or bottom -        -- measured with a chair -        if i == 1 or i == 2 then -            return not (param2 >= 12 and param2 <= 19) -        elseif i == 3 or i == 4 then -            return not ((param2 >= 0 and param2 < 4) or (param2 >= 20 and param2 <= 22)) -        elseif i == 5 or i == 6 then -            return not (param2 >= 4 and param2 <= 11) -        end -    end, -    facingTop = function(i,param2) -        -- measured with a chair -        if i == 1 then -            return param2 >= 16 and param2 <= 20 -        elseif i == 2 then -            return param2 >= 12 and param2 < 16 -        elseif i == 3 then -            return param2 >= 0 and param2 < 4 -        elseif i == 4 then -            return param2 >= 21 and param2 < 23 -        elseif i == 5 then -            return param2 >= 4 and param2 < 8 -        elseif i == 6 then -            return param2 >= 8 and param2 < 12 -            -- else error bad value for i -        end -    end -} - - -  --a function for determining which side of the node we are on  local function nodeside(node, tubedir)      --get a vector pointing back -    local backdir = facedir_to_dir(node.param2) +    local backdir = minetest.facedir_to_dir(node.param2)      --check whether the vector is equivalent to the tube direction; if it is, the tube's on the backside      if backdir.x == tubedir.x and backdir.y == tubedir.y and backdir.z == tubedir.z then @@ -191,40 +106,9 @@ function tube_autoroute(pos)          if is_tube(node.name) then              active[i] = 1          -- handle new style connectors -        elseif idef.tube and idef.tube.connects then -            -- connects returns true if self can connect w/ neighboring position -            -- it uses facesFront, facesTop etc to determine this -            -- pipeworks.connects.facingFront... -            if idef.tube.connects(i,param2) then active[i] = 1 end -        -- oops, handle the *other* newstyle connectors -        elseif idef.tube and idef.tube.connect_side then +        elseif idef.tube and idef.tube.connect_sides then              local dir = adjustments[i] -            if idef.connect_sides[nodeside(node, {x=-dir.x, y=-dir.y, z=-dir.z})] then active[i] = 1 end - -        -- legacy stuff follows -        elseif string.find(node.name, "pipeworks:filter") ~= nil or string.find(node.name, "pipeworks:mese_filter") ~= nil then -            -- filters only connect to pipes on their output (despite appearances) -            -- input has to be a chest or furnace or something -            if pipeworks.connects.facingRight(i,node.param2) -                then -                    active[i] = 1 -                end -        elseif -            -- not the front -            string.find(node.name, "pipeworks:deployer_") ~= nil or -            string.find(node.name, "pipeworks:nodebreaker_") ~= nil or -            string.find(node.name, "technic:nodebreaker_") ~= nil -            then -                if not pipeworks.connects.facingFront(i,node.param2) then active[i] = 1 end -        elseif -            string.find(node.name, "default:furnace") ~= nil or -            string.find(node.name, "default:chest") or -            string.find(node.name, "default:chest_locked") -            then -                if not pipeworks.connects.facingFront(i,node.param2) or -                    pipeworks.connects.facingTop(i,node.param2) then active[i] = 1 end -        elseif string.find(node.name, "pipeworks:autocrafter") ~= nil then -            active[i] = 1 +            if idef.tube.connect_sides[nodeside(node, {x=-dir.x, y=-dir.y, z=-dir.z})] then active[i] = 1 end          end      end @@ -244,3 +128,18 @@ function tube_autoroute(pos)      meta:from_table(meta0)  	local nctr = minetest.get_node(pos)  end + +minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) +	if minetest.registered_items[newnode.name] +	  and minetest.registered_items[newnode.name].tube then +		tube_scanforobjects(pos) +	end +end) + +minetest.register_on_dignode(function(pos, oldnode, digger) +	if minetest.registered_items[oldnode.name] +	  and minetest.registered_items[oldnode.name].tube then +		tube_scanforobjects(pos) +	end +end) + diff --git a/deployer.lua b/deployer.lua index b8a4850..adaae38 100644 --- a/deployer.lua +++ b/deployer.lua @@ -57,27 +57,6 @@ local function dir_to_facedir(dir, is6d)  	end  end -local function facedir_to_dir(facedir) -	--a table of possible dirs -	return ({{x=0, y=0, z=1}, -					{x=1, y=0, z=0}, -					{x=0, y=0, z=-1}, -					{x=-1, y=0, z=0}, -					{x=0, y=-1, z=0}, -					{x=0, y=1, z=0}}) -					 -					--indexed into by a table of correlating facedirs -					[({[0]=1, 2, 3, 4,  -						5, 2, 6, 4, -						6, 2, 5, 4, -						1, 5, 3, 6, -						1, 6, 3, 5, -						1, 4, 3, 2}) -						 -						--indexed into by the facedir in question -						[facedir]] -end -  minetest.register_craft({  	output = 'pipeworks:deployer_off 1',  	recipe = { @@ -110,7 +89,7 @@ deployer_on = function(pos, node)  	end  	--locate the above and under positions -	local dir = facedir_to_dir(node.param2) +	local dir = minetest.facedir_to_dir(node.param2)  	local pos_under, pos_above = {x=pos.x - dir.x, y=pos.y - dir.y, z=pos.z - dir.z}, {x=pos.x - 2*dir.x, y=pos.y - 2*dir.y, z=pos.z - 2*dir.z}  	hacky_swap_node(pos,"pipeworks:deployer_on") diff --git a/item_transport.lua b/item_transport.lua index 6990907..3c40178 100644 --- a/item_transport.lua +++ b/item_transport.lua @@ -1,85 +1,10 @@  dofile(pipeworks.modpath.."/compat.lua") ---define the functions from https://github.com/minetest/minetest/pull/834 while waiting for the devs to notice it -local function dir_to_facedir(dir, is6d) -	--account for y if requested -	if is6d and math.abs(dir.y) > math.abs(dir.x) and math.abs(dir.y) > math.abs(dir.z) then -		 -		--from above -		if dir.y < 0 then -			if math.abs(dir.x) > math.abs(dir.z) then -				if dir.x < 0 then -					return 19 -				else -					return 13 -				end -			else -				if dir.z < 0 then -					return 10 -				else -					return 4 -				end -			end -		 -		--from below -		else -			if math.abs(dir.x) > math.abs(dir.z) then -				if dir.x < 0 then -					return 15 -				else -					return 17 -				end -			else -				if dir.z < 0 then -					return 6 -				else -					return 8 -				end -			end -		end -	 -	--otherwise, place horizontally -	elseif math.abs(dir.x) > math.abs(dir.z) then -		if dir.x < 0 then -			return 3 -		else -			return 1 -		end -	else -		if dir.z < 0 then -			return 2 -		else -			return 0 -		end -	end -end - -local function facedir_to_dir(facedir) -	--a table of possible dirs -	return ({{x=0, y=0, z=1}, -					{x=1, y=0, z=0}, -					{x=0, y=0, z=-1}, -					{x=-1, y=0, z=0}, -					{x=0, y=-1, z=0}, -					{x=0, y=1, z=0}}) -					 -					--indexed into by a table of correlating facedirs -					[({[0]=1, 2, 3, 4,  -						5, 2, 6, 4, -						6, 2, 5, 4, -						1, 5, 3, 6, -						1, 6, 3, 5, -						1, 4, 3, 2}) -						 -						--indexed into by the facedir in question -						[facedir]] -end -  --and an extra function for getting the right-facing vector  local function facedir_to_right_dir(facedir)  	--find the other directions -	local backdir = facedir_to_dir(facedir) +	local backdir = minetest.facedir_to_dir(facedir)  	local topdir = ({[0]={x=0, y=1, z=0},  									{x=0, y=0, z=1},  									{x=0, y=0, z=-1}, diff --git a/node_breaker.lua b/node_breaker.lua index a7f5e32..23ff533 100644 --- a/node_breaker.lua +++ b/node_breaker.lua @@ -81,28 +81,6 @@ local function dir_to_facedir(dir, is6d)  	end  end -local function facedir_to_dir(facedir) -	--a table of possible dirs -	return ({{x=0, y=0, z=1}, -					{x=1, y=0, z=0}, -					{x=0, y=0, z=-1}, -					{x=-1, y=0, z=0}, -					{x=0, y=-1, z=0}, -					{x=0, y=1, z=0}}) -					 -					--indexed into by a table of correlating facedirs -					[({[0]=1, 2, 3, 4,  -						5, 2, 6, 4, -						6, 2, 5, 4, -						1, 5, 3, 6, -						1, 6, 3, 5, -						1, 4, 3, 2}) -						 -						--indexed into by the facedir in question -						[facedir]] -end - -  node_breaker_on = function(pos, node)  	if node.name == "pipeworks:nodebreaker_off" then  		hacky_swap_node(pos,"pipeworks:nodebreaker_on") @@ -124,7 +102,7 @@ end  function break_node (pos, facedir)  	--locate the outgoing velocity, front, and back of the node via facedir_to_dir -	local vel = facedir_to_dir(facedir); +	local vel = minetest.facedir_to_dir(facedir);  	local front = {x=pos.x - vel.x, y=pos.y - vel.y, z=pos.z - vel.z}  	local back = {x=pos.x + vel.x, y=pos.y + vel.y, z=pos.z + vel.z} @@ -577,31 +577,10 @@ if enable_mese_sand_tube then  	})  end -local function facedir_to_dir(facedir) -	--a table of possible dirs -	return ({{x=0, y=0, z=1}, -					{x=1, y=0, z=0}, -					{x=0, y=0, z=-1}, -					{x=-1, y=0, z=0}, -					{x=0, y=-1, z=0}, -					{x=0, y=1, z=0}}) -					 -					--indexed into by a table of correlating facedirs -					[({[0]=1, 2, 3, 4,  -						5, 2, 6, 4, -						6, 2, 5, 4, -						1, 5, 3, 6, -						1, 6, 3, 5, -						1, 4, 3, 2}) -						 -						--indexed into by the facedir in question -						[facedir]] -end -  local function facedir_to_right_dir(facedir)  	--find the other directions -	local backdir = facedir_to_dir(facedir) +	local backdir = minetest.facedir_to_dir(facedir)  	local topdir = ({[0]={x=0, y=1, z=0},  									{x=0, y=0, z=1},  									{x=0, y=0, z=-1}, | 
