From 3a0fd39bf670a9210c962381455bb42cd3893fc0 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Sun, 23 Jun 2013 21:36:13 -0400 Subject: 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) --- autoplace.lua | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 180 insertions(+), 28 deletions(-) (limited to 'autoplace.lua') 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 -- cgit v1.2.3