summaryrefslogtreecommitdiff
path: root/autoplace.lua
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 /autoplace.lua
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)
Diffstat (limited to 'autoplace.lua')
-rw-r--r--autoplace.lua208
1 files changed, 180 insertions, 28 deletions
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