diff options
-rw-r--r-- | autoplace.lua | 99 | ||||
-rw-r--r-- | changelog.txt | 3 | ||||
-rw-r--r-- | init.lua | 30 |
3 files changed, 57 insertions, 75 deletions
diff --git a/autoplace.lua b/autoplace.lua index 04c2acb..d8377a5 100644 --- a/autoplace.lua +++ b/autoplace.lua @@ -1,31 +1,27 @@ +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 - pxm=0 - pxp=0 - pym=0 - pyp=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 }) - 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:pipe_") ~= nil) then pxm=1 end - if (string.find(nxp.name, "pipeworks:pipe_") ~= nil) then pxp=1 end - if (string.find(nym.name, "pipeworks:pipe_") ~= nil) then pym=1 end - if (string.find(nyp.name, "pipeworks:pipe_") ~= nil) then pyp=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) + pipes_scansurroundings(pos) nsurround = pxm..pxp..pym..pyp..pzm..pzp @@ -44,35 +40,41 @@ function pipe_device_autorotate(pos, state, bname) 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 + pyp=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 }) + 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:pipe_") ~= nil) then pxm=1 end if (string.find(nxp.name, "pipeworks:pipe_") ~= nil) then pxp=1 end + if (string.find(nym.name, "pipeworks:pipe_") ~= nil) then pym=1 end + if (string.find(nyp.name, "pipeworks:pipe_") ~= nil) then pyp=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. @@ -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 |