From 7289bfcfbab13044b83720ff4c675a356b8dedc5 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Mon, 25 Nov 2013 23:55:52 -0500 Subject: [PATCH] Split pipe and tube autorouting functions into separate files. --- autoplace_pipes.lua | 205 +++++++++++++++++++ autoplace.lua => autoplace_tubes.lua | 282 +-------------------------- init.lua | 3 +- 3 files changed, 209 insertions(+), 281 deletions(-) create mode 100644 autoplace_pipes.lua rename autoplace.lua => autoplace_tubes.lua (56%) diff --git a/autoplace_pipes.lua b/autoplace_pipes.lua new file mode 100644 index 0000000..fe0ddbe --- /dev/null +++ b/autoplace_pipes.lua @@ -0,0 +1,205 @@ +-- autorouting for pipes + +function pipe_scanforobjects(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.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.add_node(pos, { name = "pipeworks:pipe_"..nsurround..state }) +end + +-- auto-rotation code for various devices the tubes attach to + +function pipes_scansurroundings(pos) + pxm=0 + pxp=0 + pym=0 + pyp=0 + pzm=0 + pzp=0 + + nxm = minetest.get_node({ x=pos.x-1, y=pos.y , z=pos.z }) + nxp = minetest.get_node({ x=pos.x+1, y=pos.y , z=pos.z }) + nym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) + nyp = minetest.get_node({ x=pos.x , y=pos.y+1, z=pos.z }) + nzm = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z-1 }) + nzp = minetest.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 + +-- Special handling for valves... + + if (string.find(nxm.name, "pipeworks:valve") ~= nil) + and (nxm.param2 == 0 or nxm.param2 == 2) then + pxm=1 + end + + if (string.find(nxp.name, "pipeworks:valve") ~= nil) + and (nxp.param2 == 0 or nxp.param2 == 2) then + pxp=1 + end + + if (string.find(nzm.name, "pipeworks:valve") ~= nil) + and (nzm.param2 == 1 or nzm.param2 == 3) then + pzm=1 + end + + if (string.find(nzp.name, "pipeworks:valve") ~= nil) + and (nzp.param2 == 1 or nzp.param2 == 3) then + pzp=1 + end + +-- ...flow sensors... + + if (string.find(nxm.name, "pipeworks:flow_sensor") ~= nil) + and (nxm.param2 == 0 or nxm.param2 == 2) then + pxm=1 + end + + if (string.find(nxp.name, "pipeworks:flow_sensor") ~= nil) + and (nxp.param2 == 0 or nxp.param2 == 2) then + pxp=1 + end + + if (string.find(nzm.name, "pipeworks:flow_sensor") ~= nil) + and (nzm.param2 == 1 or nzm.param2 == 3) then + pzm=1 + end + + if (string.find(nzp.name, "pipeworks:flow_sensor") ~= nil) + and (nzp.param2 == 1 or nzp.param2 == 3) then + pzp=1 + end + +-- ...spigots... + + if (string.find(nxm.name, "pipeworks:spigot") ~= nil) + and nxm.param2 == 1 then + pxm=1 + end + + if (string.find(nxp.name, "pipeworks:spigot") ~= nil) + and nxp.param2 == 3 then + pxp=1 + end + + if (string.find(nzm.name, "pipeworks:spigot") ~= nil) + and nzm.param2 == 0 then + pzm=1 + end + + if (string.find(nzp.name, "pipeworks:spigot") ~= nil) + and nzp.param2 == 2 then + pzp=1 + end + +-- ...sealed pipe entry/exit... + + if (string.find(nxm.name, "pipeworks:entry_panel") ~= nil) + and (nxm.param2 == 1 or nxm.param2 == 3) then + pxm=1 + end + + if (string.find(nxp.name, "pipeworks:entry_panel") ~= nil) + and (nxp.param2 == 1 or nxp.param2 == 3) then + pxp=1 + end + + if (string.find(nzm.name, "pipeworks:entry_panel") ~= nil) + and (nzm.param2 == 0 or nzm.param2 == 2) then + pzm=1 + end + + if (string.find(nzp.name, "pipeworks:entry_panel") ~= nil) + and (nzp.param2 == 0 or nzp.param2 == 2) then + pzp=1 + end + + if (string.find(nym.name, "pipeworks:entry_panel") ~= nil) + and nym.param2 == 13 then + pym=1 + end + + if (string.find(nyp.name, "pipeworks:entry_panel") ~= nil) + and nyp.param2 == 13 then + pyp=1 + end + + +-- ...pumps, grates... + + if (string.find(nym.name, "pipeworks:grating") ~= nil) or + (string.find(nym.name, "pipeworks:pump") ~= nil) then + pym=1 + end + +-- ...fountainheads... + + if (string.find(nyp.name, "pipeworks:fountainhead") ~= nil) then + pyp=1 + end + +-- ... and storage tanks. + + if (string.find(nym.name, "pipeworks:storage_tank_") ~= nil) then + pym=1 + end + + if (string.find(nyp.name, "pipeworks:storage_tank_") ~= nil) then + pyp=1 + end + +-- ...extra devices specified via the function's parameters +-- ...except that this part is not implemented yet +-- +-- xxx = nxm, nxp, nym, nyp, nzm, or nzp depending on the direction to check +-- yyy = pxm, pxp, pym, pyp, pzm, or pzp accordingly. +-- +-- if string.find(xxx.name, "modname:nodename") ~= nil then +-- yyy = 1 +-- end +-- +-- for example: +-- +-- if string.find(nym.name, "aero:outlet") ~= nil then +-- pym = 1 +-- end +-- + +end + +function pipe_look_for_stackable_tanks(pos) + local tym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) + + if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or + string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then + minetest.add_node(pos, { name = "pipeworks:expansion_tank_0", param2 = tym.param2}) + end +end + diff --git a/autoplace.lua b/autoplace_tubes.lua similarity index 56% rename from autoplace.lua rename to autoplace_tubes.lua index 4a7d378..1c1a56e 100644 --- a/autoplace.lua +++ b/autoplace_tubes.lua @@ -1,109 +1,3 @@ ---define the functions from https://github.com/minetest/minetest/pull/834 while waiting for the devs to notice it -local function dir_to_facedir(dir, is6d) - --account for y if requested - if is6d and math.abs(dir.y) > math.abs(dir.x) and math.abs(dir.y) > math.abs(dir.z) then - - --from above - if dir.y < 0 then - if math.abs(dir.x) > math.abs(dir.z) then - if dir.x < 0 then - return 19 - else - return 13 - end - else - if dir.z < 0 then - return 10 - else - return 4 - end - end - - --from below - else - if math.abs(dir.x) > math.abs(dir.z) then - if dir.x < 0 then - return 15 - else - return 17 - end - else - if dir.z < 0 then - return 6 - else - return 8 - end - end - end - - --otherwise, place horizontally - elseif math.abs(dir.x) > math.abs(dir.z) then - if dir.x < 0 then - return 3 - else - return 1 - end - else - if dir.z < 0 then - return 2 - else - return 0 - end - end -end - -local function facedir_to_dir(facedir) - --a table of possible dirs - return ({{x=0, y=0, z=1}, - {x=1, y=0, z=0}, - {x=0, y=0, z=-1}, - {x=-1, y=0, z=0}, - {x=0, y=-1, z=0}, - {x=0, y=1, z=0}}) - - --indexed into by a table of correlating facedirs - [({[0]=1, 2, 3, 4, - 5, 2, 6, 4, - 6, 2, 5, 4, - 1, 5, 3, 6, - 1, 6, 3, 5, - 1, 4, 3, 2}) - - --indexed into by the facedir in question - [facedir]] -end - --- autorouting for pipes - -function pipe_scanforobjects(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.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.add_node(pos, { name = "pipeworks:pipe_"..nsurround..state }) -end - -- autorouting for pneumatic tubes function tube_scanforobjects(pos) @@ -215,6 +109,8 @@ pipeworks.connects = { end } + + --a function for determining which side of the node we are on local function nodeside(node, tubedir) --get a vector pointing back @@ -349,177 +245,3 @@ function tube_autoroute(pos) local nctr = minetest.get_node(pos) end --- auto-rotation code for various devices the tubes attach to - -function pipes_scansurroundings(pos) - pxm=0 - pxp=0 - pym=0 - pyp=0 - pzm=0 - pzp=0 - - nxm = minetest.get_node({ x=pos.x-1, y=pos.y , z=pos.z }) - nxp = minetest.get_node({ x=pos.x+1, y=pos.y , z=pos.z }) - nym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) - nyp = minetest.get_node({ x=pos.x , y=pos.y+1, z=pos.z }) - nzm = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z-1 }) - nzp = minetest.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 - --- Special handling for valves... - - if (string.find(nxm.name, "pipeworks:valve") ~= nil) - and (nxm.param2 == 0 or nxm.param2 == 2) then - pxm=1 - end - - if (string.find(nxp.name, "pipeworks:valve") ~= nil) - and (nxp.param2 == 0 or nxp.param2 == 2) then - pxp=1 - end - - if (string.find(nzm.name, "pipeworks:valve") ~= nil) - and (nzm.param2 == 1 or nzm.param2 == 3) then - pzm=1 - end - - if (string.find(nzp.name, "pipeworks:valve") ~= nil) - and (nzp.param2 == 1 or nzp.param2 == 3) then - pzp=1 - end - --- ...flow sensors... - - if (string.find(nxm.name, "pipeworks:flow_sensor") ~= nil) - and (nxm.param2 == 0 or nxm.param2 == 2) then - pxm=1 - end - - if (string.find(nxp.name, "pipeworks:flow_sensor") ~= nil) - and (nxp.param2 == 0 or nxp.param2 == 2) then - pxp=1 - end - - if (string.find(nzm.name, "pipeworks:flow_sensor") ~= nil) - and (nzm.param2 == 1 or nzm.param2 == 3) then - pzm=1 - end - - if (string.find(nzp.name, "pipeworks:flow_sensor") ~= nil) - and (nzp.param2 == 1 or nzp.param2 == 3) then - pzp=1 - end - --- ...spigots... - - if (string.find(nxm.name, "pipeworks:spigot") ~= nil) - and nxm.param2 == 1 then - pxm=1 - end - - if (string.find(nxp.name, "pipeworks:spigot") ~= nil) - and nxp.param2 == 3 then - pxp=1 - end - - if (string.find(nzm.name, "pipeworks:spigot") ~= nil) - and nzm.param2 == 0 then - pzm=1 - end - - if (string.find(nzp.name, "pipeworks:spigot") ~= nil) - and nzp.param2 == 2 then - pzp=1 - end - --- ...sealed pipe entry/exit... - - if (string.find(nxm.name, "pipeworks:entry_panel") ~= nil) - and (nxm.param2 == 1 or nxm.param2 == 3) then - pxm=1 - end - - if (string.find(nxp.name, "pipeworks:entry_panel") ~= nil) - and (nxp.param2 == 1 or nxp.param2 == 3) then - pxp=1 - end - - if (string.find(nzm.name, "pipeworks:entry_panel") ~= nil) - and (nzm.param2 == 0 or nzm.param2 == 2) then - pzm=1 - end - - if (string.find(nzp.name, "pipeworks:entry_panel") ~= nil) - and (nzp.param2 == 0 or nzp.param2 == 2) then - pzp=1 - end - - if (string.find(nym.name, "pipeworks:entry_panel") ~= nil) - and nym.param2 == 13 then - pym=1 - end - - if (string.find(nyp.name, "pipeworks:entry_panel") ~= nil) - and nyp.param2 == 13 then - pyp=1 - end - - --- ...pumps, grates... - - if (string.find(nym.name, "pipeworks:grating") ~= nil) or - (string.find(nym.name, "pipeworks:pump") ~= nil) then - pym=1 - end - --- ...fountainheads... - - if (string.find(nyp.name, "pipeworks:fountainhead") ~= nil) then - pyp=1 - end - --- ... and storage tanks. - - if (string.find(nym.name, "pipeworks:storage_tank_") ~= nil) then - pym=1 - end - - if (string.find(nyp.name, "pipeworks:storage_tank_") ~= nil) then - pyp=1 - end - --- ...extra devices specified via the function's parameters --- ...except that this part is not implemented yet --- --- xxx = nxm, nxp, nym, nyp, nzm, or nzp depending on the direction to check --- yyy = pxm, pxp, pym, pyp, pzm, or pzp accordingly. --- --- if string.find(xxx.name, "modname:nodename") ~= nil then --- yyy = 1 --- end --- --- for example: --- --- if string.find(nym.name, "aero:outlet") ~= nil then --- pym = 1 --- end --- - -end - -function pipe_look_for_stackable_tanks(pos) - local tym = minetest.get_node({ x=pos.x , y=pos.y-1, z=pos.z }) - - if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or - string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then - minetest.add_node(pos, { name = "pipeworks:expansion_tank_0", param2 = tym.param2}) - end -end - diff --git a/init.lua b/init.lua index afbe3a8..897275f 100644 --- a/init.lua +++ b/init.lua @@ -108,7 +108,8 @@ end -- Load the various parts of the mod -dofile(pipeworks.modpath.."/autoplace.lua") +dofile(pipeworks.modpath.."/autoplace_pipes.lua") +dofile(pipeworks.modpath.."/autoplace_tubes.lua") dofile(pipeworks.modpath.."/item_transport.lua") dofile(pipeworks.modpath.."/flowing_logic.lua") dofile(pipeworks.modpath.."/crafts.lua") -- 2.30.2