diff --git a/autoplace.lua b/autoplace.lua index 04c2acb..d8377a5 100644 --- a/autoplace.lua +++ b/autoplace.lua @@ -1,9 +1,59 @@ +pipe_scanforobjects = function(pos) + pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_loaded") + pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_loaded") + pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_loaded") + pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_loaded") + pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_loaded") + pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_loaded") + pipe_autoroute(pos, "_loaded") + + pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_empty") + pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_empty") + pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_empty") + pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_empty") + pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_empty") + pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_empty") + pipe_autoroute(pos, "_empty") +end function pipe_autoroute(pos, state) nctr = minetest.env:get_node(pos) if (string.find(nctr.name, "pipeworks:pipe_") == nil) then return end + pipes_scansurroundings(pos) + + nsurround = pxm..pxp..pym..pyp..pzm..pzp + + if nsurround == "000000" then nsurround = "110000" end + + minetest.env:add_node(pos, { name = "pipeworks:pipe_"..nsurround..state }) +end + +function pipe_device_autorotate(pos, state, bname) + + if state == nil then + nname = bname + else + nname = bname.."_"..state + end + + local nctr = minetest.env:get_node(pos) + + pipes_scansurroundings(pos) + + if (pxm+pxp) ~= 0 then + minetest.env:add_node(pos, { name = nname.."_x" }) + return + end + + if (pzm+pzp) ~= 0 then + minetest.env:add_node(pos, { name = nname.."_z" }) + end + +end + +pipes_scansurroundings = function(pos) pxm=0 pxp=0 pym=0 @@ -25,54 +75,6 @@ function pipe_autoroute(pos, state) if (string.find(nzm.name, "pipeworks:pipe_") ~= nil) then pzm=1 end if (string.find(nzp.name, "pipeworks:pipe_") ~= nil) then pzp=1 end - pipe_checkfordevice(pos) - - nsurround = pxm..pxp..pym..pyp..pzm..pzp - - if nsurround == "000000" then nsurround = "110000" end - - minetest.env:add_node(pos, { name = "pipeworks:pipe_"..nsurround..state }) -end - -function pipe_device_autorotate(pos, state, bname) - - if state == nil then - nname = bname - else - nname = bname.."_"..state - end - - local nctr = minetest.env:get_node(pos) - - pxm=0 - pxp=0 - pzm=0 - pzp=0 - - 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 }) - 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:pipe_") ~= nil) then pxm=1 end - if (string.find(nxp.name, "pipeworks:pipe_") ~= nil) then pxp=1 end - if (string.find(nzm.name, "pipeworks:pipe_") ~= nil) then pzm=1 end - if (string.find(nzp.name, "pipeworks:pipe_") ~= nil) then pzp=1 end - - pipe_checkfordevice(pos) - - if (pxm+pxp) ~= 0 then - minetest.env:add_node(pos, { name = nname.."_x" }) - return - end - - if (pzm+pzp) ~= 0 then - minetest.env:add_node(pos, { name = nname.."_z" }) - end - -end - -pipe_checkfordevice = function(pos) for p in ipairs(pipes_devicelist) do pdev = pipes_devicelist[p] if (string.find(nxm.name, "pipeworks:"..pdev.."_off_x") ~= nil) or @@ -87,6 +89,19 @@ pipe_checkfordevice = function(pos) pxp=1 end + if (string.find(nym.name, "pipeworks:"..pdev.."_off_z") ~= nil) or + (string.find(nym.name, "pipeworks:"..pdev.."_on_z") ~= nil) or + (string.find(nym.name, "pipeworks:"..pdev.."_z") ~= nil) then + pym=1 + end + + if (string.find(nyp.name, "pipeworks:"..pdev.."_off_z") ~= nil) or + (string.find(nyp.name, "pipeworks:"..pdev.."_on_z") ~= nil) or + (string.find(nyp.name, "pipeworks:"..pdev.."_z") ~= nil) then + pyp=1 + end + + if (string.find(nzm.name, "pipeworks:"..pdev.."_off_z") ~= nil) or (string.find(nzm.name, "pipeworks:"..pdev.."_on_z") ~= nil) or (string.find(nzm.name, "pipeworks:"..pdev.."_z") ~= nil) then @@ -101,15 +116,3 @@ pipe_checkfordevice = function(pos) end end -pipe_scanforobjects = function(pos) - pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_loaded") - - pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_empty") -end - diff --git a/changelog.txt b/changelog.txt index 1ce34d8..6969087 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,7 +2,8 @@ Changelog --------- 2012-08-21: Made storage tank participate in autoplace algorithm. Tuned API a -little to allow for more flexible placement. +little to allow for more flexible placement. Re-organized code a bit to allow +for some upcoming rules changes. 2012-08-20: Added temporary nodes for storage tank and intake grating, but without autoplace. diff --git a/init.lua b/init.lua index db18d8d..bfab761 100644 --- a/init.lua +++ b/init.lua @@ -270,21 +270,10 @@ for zp = 0, 1 do meta:set_int("pipelike",1) end, after_place_node = function(pos) - pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_empty") - pipe_autoroute(pos, "_empty") + pipe_scanforobjects(pos) end, after_dig_node = function(pos) - pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_empty") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_empty") + pipe_scanforobjects(pos) end }) @@ -312,21 +301,10 @@ for zp = 0, 1 do meta:set_int("pipelike",1) end, after_place_node = function(pos) - pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_loaded") - pipe_autoroute(pos, "_loaded") + pipe_scanforobjects(pos) end, after_dig_node = function(pos) - pipe_autoroute({ x=pos.x-1, y=pos.y , z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x+1, y=pos.y , z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y-1, z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y+1, z=pos.z }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z-1 }, "_loaded") - pipe_autoroute({ x=pos.x , y=pos.y , z=pos.z+1 }, "_loaded") + pipe_scanforobjects(pos) end }) end