summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2013-06-23 21:36:13 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2013-06-23 21:36:13 -0400
commit3a0fd39bf670a9210c962381455bb42cd3893fc0 (patch)
tree22094c4990441be31c887c8e31f8ed15b8460106
parent5537257185bd510828295b0c9d7da0e542e801ff (diff)
downloadpipeworks-3a0fd39bf670a9210c962381455bb42cd3893fc0.tar
pipeworks-3a0fd39bf670a9210c962381455bb42cd3893fc0.tar.gz
pipeworks-3a0fd39bf670a9210c962381455bb42cd3893fc0.tar.bz2
pipeworks-3a0fd39bf670a9210c962381455bb42cd3893fc0.tar.xz
pipeworks-3a0fd39bf670a9210c962381455bb42cd3893fc0.zip
rewrote autoplacement code to make it more aware of filters,
autocrafter, nodebreaker, deployer, and made sure each item will only initiate a connection to those sides which can accept such. Fixed various autorouting bugs as I ran across them. Autorouting for various devices is now: filters: left and right sides only nodebreaker, deployer: back only autocrafter: all six sides chests: top, bottom, left, right, back (not front) furnace: bottom, left, right, back (not the top or front)
-rw-r--r--autocrafter.lua8
-rw-r--r--autoplace.lua208
-rw-r--r--compat.lua140
-rw-r--r--item_transport.lua9
-rw-r--r--node_breaker.lua2
5 files changed, 269 insertions, 98 deletions
diff --git a/autocrafter.lua b/autocrafter.lua
index a28faec..1266a20 100644
--- a/autocrafter.lua
+++ b/autocrafter.lua
@@ -71,11 +71,15 @@ minetest.register_node("pipeworks:autocrafter",{
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory()
return (inv:is_empty("src") and inv:is_empty("recipe") and inv:is_empty("dst"))
- end})
+ end,
+ after_place_node = tube_scanforobjects,
+ after_dig_node = tube_scanforobjects,
+})
minetest.register_abm({nodenames={"pipeworks:autocrafter"},interval=1,chance=1,
action=function(pos,node)
local meta=minetest.env:get_meta(pos)
local inv=meta:get_inventory()
autocraft(inv)
- end})
+ end
+})
diff --git a/autoplace.lua b/autoplace.lua
index c58a58b..1f75f07 100644
--- a/autoplace.lua
+++ b/autoplace.lua
@@ -32,6 +32,8 @@ end
-- autorouting for pneumatic tubes
function tube_scanforobjects(pos)
+ if pos == nil then return end
+ print("tubes_scanforobjects called at pos "..dump(pos))
tube_autoroute({ x=pos.x-1, y=pos.y , z=pos.z })
tube_autoroute({ x=pos.x+1, y=pos.y , z=pos.z })
tube_autoroute({ x=pos.x , y=pos.y-1, z=pos.z })
@@ -53,37 +55,187 @@ function is_tube(nodename)
end
function tube_autoroute(pos)
- nctr = minetest.env:get_node(pos)
- --print ("minetest.get_item_group("..nctr.name..',"tubedevice") == '..minetest.get_item_group(nctr.name, "tubedevice"))
- if (is_tube(nctr.name) == nil)
- and minetest.get_item_group(nctr.name, "tubedevice") ~= 1 then return end
+ local pxm=0
+ local pxp=0
+ local pym=0
+ local pyp=0
+ local pzm=0
+ local pzp=0
+
+ local nxm = minetest.env:get_node({ x=pos.x-1, y=pos.y , z=pos.z })
+ local nxp = minetest.env:get_node({ x=pos.x+1, y=pos.y , z=pos.z })
+ local nym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z })
+ local nyp = minetest.env:get_node({ x=pos.x , y=pos.y+1, z=pos.z })
+ local nzm = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z-1 })
+ local nzp = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z+1 })
+
+ local nctr = minetest.env:get_node(pos)
+
+-- handle the tubes themselves
+
+ if is_tube(nxm.name) then pxm=1 end
+ if is_tube(nxp.name) then pxp=1 end
+ if is_tube(nym.name) then pym=1 end
+ if is_tube(nyp.name) then pyp=1 end
+ if is_tube(nzm.name) then pzm=1 end
+ if is_tube(nzp.name) then pzp=1 end
+
+-- handle regular filters
+
+ if string.find(nxm.name, "pipeworks:filter") ~= nil
+ and (nxm.param2 == 0 or nxm.param2 == 2) then
+ pxm=1 end
+ if string.find(nxp.name, "pipeworks:filter") ~= nil
+ and (nxp.param2 == 0 or nxp.param2 == 2) then
+ pxp=1 end
+ if string.find(nzm.name, "pipeworks:filter") ~= nil
+ and (nzm.param2 == 1 or nzm.param2 == 3) then
+ pzm=1 end
+ if string.find(nzp.name, "pipeworks:filter") ~= nil
+ and (nzp.param2 == 1 or nzp.param2 == 3) then
+ pzp=1 end
- pxm=0
- pxp=0
- pym=0
- pyp=0
- pzm=0
- pzp=0
+-- handle mese filters
- nxm = minetest.env:get_node({ x=pos.x-1, y=pos.y , z=pos.z })
- nxp = minetest.env:get_node({ x=pos.x+1, y=pos.y , z=pos.z })
- nym = minetest.env:get_node({ x=pos.x , y=pos.y-1, z=pos.z })
- nyp = minetest.env:get_node({ x=pos.x , y=pos.y+1, z=pos.z })
- nzm = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z-1 })
- nzp = minetest.env:get_node({ x=pos.x , y=pos.y , z=pos.z+1 })
+ if string.find(nxm.name, "pipeworks:mese_filter") ~= nil
+ and (nxm.param2 == 0 or nxm.param2 == 2) then
+ pxm=1 end
+ if string.find(nxp.name, "pipeworks:mese_filter") ~= nil
+ and (nxp.param2 == 0 or nxp.param2 == 2) then
+ pxp=1 end
+
+ if string.find(nzm.name, "pipeworks:mese_filter") ~= nil
+ and (nzm.param2 == 1 or nzm.param2 == 3) then
+ pzm=1 end
+ if string.find(nzp.name, "pipeworks:mese_filter") ~= nil
+ and (nzp.param2 == 1 or nzp.param2 == 3) then
+ pzp=1 end
+
+-- handle deployers
+
+ if string.find(nxm.name, "pipeworks:deployer_") ~= nil
+ and nxm.param2 == 1 then
+ pxm=1 end
+ if string.find(nxp.name, "pipeworks:deployer_") ~= nil
+ and nxp.param2 == 3 then
+ pxp=1 end
+ if string.find(nzm.name, "pipeworks:deployer_") ~= nil
+ and nzm.param2 == 0 then
+ pzm=1 end
+ if string.find(nzp.name, "pipeworks:deployer_") ~= nil
+ and nzp.param2 == 2 then
+ pzp=1 end
+
+--node breakers
+
+ if string.find(nxm.name, "pipeworks:nodebreaker_") ~= nil
+ and nxm.param2 == 1 then
+ pxm=1 end
+ if string.find(nxp.name, "pipeworks:nodebreaker_") ~= nil
+ and nxp.param2 == 3 then
+ pxp=1 end
+ if string.find(nzm.name, "pipeworks:nodebreaker_") ~= nil
+ and nzm.param2 == 0 then
+ pzm=1 end
+ if string.find(nzp.name, "pipeworks:nodebreaker_") ~= nil
+ and nzp.param2 == 2 then
+ pzp=1 end
+
+-- autocrafter
+
+ if string.find(nxm.name, "pipeworks:autocrafter") ~= nil then pxm = 1 end
+ if string.find(nxp.name, "pipeworks:autocrafter") ~= nil then pxp = 1 end
+ if string.find(nym.name, "pipeworks:autocrafter") ~= nil then pym = 1 end
+ if string.find(nyp.name, "pipeworks:autocrafter") ~= nil then pyp = 1 end
+ if string.find(nzm.name, "pipeworks:autocrafter") ~= nil then pzm = 1 end
+ if string.find(nzp.name, "pipeworks:autocrafter") ~= nil then pzp = 1 end
+
+--chests
+
+ -- check for left/right connects
+
+ if string.find(nxm.name, "default:chest") ~= nil
+ and (nxm.param2 == 0 or nxm.param2 == 2) then
+ pxm=1 end
+ if string.find(nxp.name, "default:chest") ~= nil
+ and (nxp.param2 == 0 or nxp.param2 == 2) then
+ pxp=1 end
+
+ if string.find(nzm.name, "default:chest") ~= nil
+ and (nzm.param2 == 1 or nzm.param2 == 3) then
+ pzm=1 end
+ if string.find(nzp.name, "default:chest") ~= nil
+ and (nzp.param2 == 1 or nzp.param2 == 3) then
+ pzp=1 end
+
+ -- check for backside connects
+
+ if string.find(nxm.name, "default:chest") ~= nil
+ and nxm.param2 == 1 then
+ pxm = 1 end
+
+ if string.find(nxp.name, "default:chest") ~= nil
+ and nxp.param2 == 3 then
+ pxp = 1 end
+
+ if string.find(nzm.name, "default:chest") ~= nil
+ and nzm.param2 == 0 then
+ pzm = 1 end
+
+ if string.find(nzp.name, "default:chest") ~= nil
+ and nzp.param2 == 2 then
+ pzp = 1 end
+
+ -- check for top/bottom connections
+
+ if string.find(nym.name, "default:chest") ~= nil then pym = 1 end
+ if string.find(nyp.name, "default:chest") ~= nil then pyp = 1 end
+
+ -- does not scan for the front side of the node.
+
+--chests
+
+ -- check for left/right connects
+
+ if string.find(nxm.name, "default:furnace") ~= nil
+ and (nxm.param2 == 0 or nxm.param2 == 2) then
+ pxm=1 end
+ if string.find(nxp.name, "default:furnace") ~= nil
+ and (nxp.param2 == 0 or nxp.param2 == 2) then
+ pxp=1 end
+
+ if string.find(nzm.name, "default:furnace") ~= nil
+ and (nzm.param2 == 1 or nzm.param2 == 3) then
+ pzm=1 end
+ if string.find(nzp.name, "default:furnace") ~= nil
+ and (nzp.param2 == 1 or nzp.param2 == 3) then
+ pzp=1 end
+
+ -- check for backside connects
+
+ if string.find(nxm.name, "default:furnace") ~= nil
+ and nxm.param2 == 1 then
+ pxm = 1 end
+
+ if string.find(nxp.name, "default:furnace") ~= nil
+ and nxp.param2 == 3 then
+ pxp = 1 end
+
+ if string.find(nzm.name, "default:furnace") ~= nil
+ and nzm.param2 == 0 then
+ pzm = 1 end
+
+ if string.find(nzp.name, "default:furnace") ~= nil
+ and nzp.param2 == 2 then
+ pzp = 1 end
+
+ -- check for bottom connection
+
+ if string.find(nyp.name, "default:furnace") ~= nil then pyp = 1 end
+
+ -- does not scan for the front or top side of the node.
- if is_tube(nxm.name)
- or minetest.get_item_group(nxm.name, "tubedevice") == 1 then pxm=1 end
- if is_tube(nxp.name)
- or minetest.get_item_group(nxp.name, "tubedevice") == 1 then pxp=1 end
- if is_tube(nym.name)
- or minetest.get_item_group(nym.name, "tubedevice") == 1 then pym=1 end
- if is_tube(nyp.name)
- or minetest.get_item_group(nyp.name, "tubedevice") == 1 then pyp=1 end
- if is_tube(nzm.name)
- or minetest.get_item_group(nzm.name, "tubedevice") == 1 then pzm=1 end
- if is_tube(nzp.name)
- or minetest.get_item_group(nzp.name, "tubedevice") == 1 then pzp=1 end
+-- Apply the final routing decisions to the existing tube (if any)
nsurround = pxm..pxp..pym..pyp..pzm..pzp
if is_tube(nctr.name) then
diff --git a/compat.lua b/compat.lua
index 6f555d0..55d207a 100644
--- a/compat.lua
+++ b/compat.lua
@@ -10,9 +10,9 @@ function clone_node(name)
end
furnace=clone_node("default:furnace")
-furnace.groups.tubedevice=1
-furnace.groups.tubedevice_receiver=1
-furnace.tube={insert_object=function(pos,node,stack,direction)
+ furnace.groups.tubedevice=1
+ furnace.groups.tubedevice_receiver=1
+ furnace.tube={insert_object = function(pos,node,stack,direction)
local meta=minetest.env:get_meta(pos)
local inv=meta:get_inventory()
if direction.y==1 then
@@ -21,73 +21,79 @@ furnace.tube={insert_object=function(pos,node,stack,direction)
return inv:add_item("src",stack)
end
end,
- can_insert=function(pos,node,stack,direction)
- local meta=minetest.env:get_meta(pos)
- local inv=meta:get_inventory()
- if direction.y==1 then
- return inv:room_for_item("fuel",stack)
- elseif direction.y==-1 then
- return inv:room_for_item("src",stack)
- else
- return 0
- end
- end,
- input_inventory="dst"}
-furnace.after_place_node= function(pos)
- tube_scanforobjects(pos)
- end
-furnace.after_dig_node = function(pos)
- tube_scanforobjects(pos)
- end
-minetest.register_node(":default:furnace",furnace)
+ can_insert=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ if direction.y==1 then
+ return inv:room_for_item("fuel",stack)
+ elseif direction.y==-1 then
+ return inv:room_for_item("src",stack)
+ else
+ return 0
+ end
+ end,
+ input_inventory="dst"}
+ furnace.after_place_node= function(pos)
+ tube_scanforobjects(pos)
+ end
+ furnace.after_dig_node = function(pos)
+ tube_scanforobjects(pos)
+ end
+minetest.register_node(":default:furnace",furnace)
furnace=clone_node("default:furnace_active")
-furnace.groups.tubedevice=1
-furnace.groups.tubedevice_receiver=1
-furnace.tube={insert_object=function(pos,node,stack,direction)
- local meta=minetest.env:get_meta(pos)
- local inv=meta:get_inventory()
- if direction.y==1 then
- return inv:add_item("fuel",stack)
- else
- return inv:add_item("src",stack)
- end
- end,
- can_insert=function(pos,node,stack,direction)
- local meta=minetest.env:get_meta(pos)
- local inv=meta:get_inventory()
- if direction.y==1 then
- return inv:room_for_item("fuel",stack)
- elseif direction.y==-1 then
- return inv:room_for_item("src",stack)
- else
- return 0
- end
- end,
- input_inventory="dst"}
-furnace.after_place_node= function(pos)
- tube_scanforobjects(pos)
- end
-furnace.after_dig_node = function(pos)
- tube_scanforobjects(pos)
- end
-minetest.register_node(":default:furnace_active",furnace)
+ furnace.groups.tubedevice=1
+ furnace.groups.tubedevice_receiver=1
+ furnace.tube={insert_object=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ if direction.y==1 then
+ return inv:add_item("fuel",stack)
+ else
+ return inv:add_item("src",stack)
+ end
+ end,
+ can_insert=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ if direction.y==1 then
+ return inv:room_for_item("fuel",stack)
+ elseif direction.y==-1 then
+ return inv:room_for_item("src",stack)
+ else
+ return 0
+ end
+ end,
+ input_inventory="dst"}
+ furnace.after_place_node= function(pos)
+ tube_scanforobjects(pos)
+ end
+ furnace.after_dig_node = function(pos)
+ tube_scanforobjects(pos)
+ end
+ minetest.register_node(":default:furnace_active",furnace)
+
chest=clone_node("default:chest")
-chest.groups.tubedevice=1
-chest.groups.tubedevice_receiver=1
-chest.tube={insert_object=function(pos,node,stack,direction)
- local meta=minetest.env:get_meta(pos)
- local inv=meta:get_inventory()
- return inv:add_item("main",stack)
- end,
- can_insert=function(pos,node,stack,direction)
- local meta=minetest.env:get_meta(pos)
- local inv=meta:get_inventory()
- return inv:room_for_item("main",stack)
- end,
- input_inventory="main"}
-chest.after_place_node = tube_scanforobjects(pos)
-chest.after_dig_node = tube_scanforobjects
+ chest.groups.tubedevice=1
+ chest.groups.tubedevice_receiver=1
+ chest.tube={insert_object = function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ return inv:add_item("main",stack)
+ end,
+ can_insert=function(pos,node,stack,direction)
+ local meta=minetest.env:get_meta(pos)
+ local inv=meta:get_inventory()
+ return inv:room_for_item("main",stack)
+ end,
+ input_inventory="main"}
+ chest.after_place_node = function(pos)
+ tube_scanforobjects(pos)
+ end
+ chest.after_dig_node = function(pos)
+ tube_scanforobjects(pos)
+ end
+
minetest.register_node(":default:chest",chest)
diff --git a/item_transport.lua b/item_transport.lua
index d5cb7cd..12a177c 100644
--- a/item_transport.lua
+++ b/item_transport.lua
@@ -33,6 +33,9 @@ minetest.register_node("pipeworks:filter", {
after_place_node = function(pos)
tube_scanforobjects(pos)
end,
+ after_dig_node = function(pos)
+ tube_scanforobjects(pos)
+ end,
mesecons={effector={action_on=function(pos,node)
minetest.registered_nodes[node.name].on_punch(pos,node,nil)
end}},
@@ -125,6 +128,12 @@ minetest.register_node("pipeworks:mese_filter", {
local inv = meta:get_inventory()
return inv:is_empty("main")
end,
+ after_place_node = function(pos)
+ tube_scanforobjects(pos)
+ end,
+ after_dig_node = function(pos)
+ tube_scanforobjects(pos)
+ end,
mesecons={effector={action_on=function(pos,node)
minetest.registered_nodes[node.name].on_punch(pos,node,nil)
end}},
diff --git a/node_breaker.lua b/node_breaker.lua
index cda2692..2ebcac6 100644
--- a/node_breaker.lua
+++ b/node_breaker.lua
@@ -108,4 +108,4 @@ minetest.register_node("pipeworks:nodebreaker_on", {
sounds = default.node_sound_stone_defaults(),
after_place_node = tube_scanforobjects,
after_dig_node = tube_scanforobjects,
-}) \ No newline at end of file
+})