summaryrefslogtreecommitdiff
path: root/autoplace_pipes.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-04-12 03:39:43 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-04-12 07:10:48 -0400
commitf44993cd846ab8b45408fba2c4b84664e77f4930 (patch)
tree235cacea1f39983de3d26fab881929a28fc11417 /autoplace_pipes.lua
parentacc2b6802eba3ecef1ff89b16929297e7ba84ac4 (diff)
downloadpipeworks-f44993cd846ab8b45408fba2c4b84664e77f4930.tar
pipeworks-f44993cd846ab8b45408fba2c4b84664e77f4930.tar.gz
pipeworks-f44993cd846ab8b45408fba2c4b84664e77f4930.tar.bz2
pipeworks-f44993cd846ab8b45408fba2c4b84664e77f4930.tar.xz
pipeworks-f44993cd846ab8b45408fba2c4b84664e77f4930.zip
allow external devices to connect to pipes
and use that feature to handle most of the existing devices) also, fix the "xray" glitch in the grating
Diffstat (limited to 'autoplace_pipes.lua')
-rw-r--r--autoplace_pipes.lua137
1 files changed, 72 insertions, 65 deletions
diff --git a/autoplace_pipes.lua b/autoplace_pipes.lua
index efd3bcd..a3f0b65 100644
--- a/autoplace_pipes.lua
+++ b/autoplace_pipes.lua
@@ -1,3 +1,29 @@
+--[[
+
+ autorouting for pipes
+
+ To connect pipes to some node, include this in the node def...
+
+ pipe_connections = {
+ pattern = <string>, -- if supplied, search for this pattern instead of the exact node name
+ left = <bool>, -- true (or 1) if the left side of the node needs to connect to a pipe
+ right = <bool>, -- or from the right side, etc.
+ top = <bool>,
+ bottom = <bool>,
+ front = <bool>,
+ back = <bool>,
+ left_param2 = <num>, -- the node must have this param2 to connect from the left
+ right_param2 = <num>, -- or right, etc.
+ top_param2 = <num>, -- Omit some or all of these to skip checking param2 for those sides
+ bottom_param2 = <num>,
+ front_param2 = <num>,
+ back_param2 = <num>,
+ },
+
+ ...then add, pipeworks.scan_for_pipe_objects(pos)
+ to your node's after_dig_node and after_place_node callbacks.
+
+]]--
-- get the axis dir (just 6 faces) of target node, assumes the pipe is the axis
@@ -37,9 +63,9 @@ function pipeworks.get_axis_dir(nodetable, pattern)
return match,pxm,pxp,pym,pyp,pzm,pzp
end
--- autorouting for pipes
local tube_table = {[0] = 1, 2, 2, 4, 2, 4, 4, 5, 2, 3, 4, 6, 4, 6, 5, 7, 2, 4, 3, 6, 4, 5, 6, 7, 4, 6, 6, 8, 5, 7, 7, 9, 2, 4, 4, 5, 3, 6, 6, 7, 4, 6, 5, 7, 6, 8, 7, 9, 4, 5, 6, 7, 6, 7, 8, 9, 5, 7, 7, 9, 7, 9, 9, 10}
local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0}
+
local function autoroute_pipes(pos)
local nctr = minetest.get_node(pos)
local state = "_empty"
@@ -62,7 +88,7 @@ function pipeworks.scan_for_pipe_objects(pos)
autoroute_pipes(pos)
end
--- auto-rotation code for various devices the tubes attach to
+-- auto-rotation code for various devices the pipes attach to
function pipeworks.scan_pipe_surroundings(pos)
local pxm=0
@@ -88,12 +114,14 @@ function pipeworks.scan_pipe_surroundings(pos)
nzp = nzp
}
- 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
+-- standard handling for pipes...
+
+ if string.find(nxm.name, "pipeworks:pipe_") then pxm=1 end
+ if string.find(nxp.name, "pipeworks:pipe_") then pxp=1 end
+ if string.find(nym.name, "pipeworks:pipe_") then pym=1 end
+ if string.find(nyp.name, "pipeworks:pipe_") then pyp=1 end
+ if string.find(nzm.name, "pipeworks:pipe_") then pzm=1 end
+ if string.find(nzp.name, "pipeworks:pipe_") then pzp=1 end
-- Special handling for valves...
@@ -119,28 +147,6 @@ function pipeworks.scan_pipe_surroundings(pos)
pzp = f or pzp
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...
local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:entry_panel")
@@ -153,46 +159,48 @@ function pipeworks.scan_pipe_surroundings(pos)
pzp = f or pzp
end
--- ...pumps, grates...
+-- ... other nodes
- if (string.find(nym.name, "pipeworks:grating") ~= nil) or
- (string.find(nym.name, "pipeworks:pump") ~= nil) then
- pym=1
- end
+ local def_left = minetest.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the
+ local def_right = minetest.registered_nodes[nxm.name] -- ...note that is AT the left!), etc.
+ local def_bottom = minetest.registered_nodes[nyp.name]
+ local def_top = minetest.registered_nodes[nym.name]
+ local def_front = minetest.registered_nodes[nzp.name]
+ local def_back = minetest.registered_nodes[nzm.name]
--- ...fountainheads...
-
- if (string.find(nyp.name, "pipeworks:fountainhead") ~= nil) then
- pyp=1
+ if def_left and def_left.pipe_connections and def_left.pipe_connections.left
+ and (not def_left.pipe_connections.pattern or string.find(nxp.name, def_left.pipe_connections.pattern))
+ and (not def_left.pipe_connections.left_param2 or (nxp.param2 == def_left.pipe_connections.left_param2)) then
+ pxp = 1
end
-
--- ... and storage tanks.
-
- if (string.find(nym.name, "pipeworks:storage_tank_") ~= nil) then
- pym=1
+ if def_right and def_right.pipe_connections and def_right.pipe_connections.right
+ and (not def_right.pipe_connections.pattern or string.find(nxm.name, def_right.pipe_connections.pattern))
+ and (not def_right.pipe_connections.right_param2 or (nxm.param2 == def_right.pipe_connections.right_param2)) then
+ pxm = 1
end
-
- if (string.find(nyp.name, "pipeworks:storage_tank_") ~= nil) then
- pyp=1
+ if def_top and def_top.pipe_connections and def_top.pipe_connections.top
+ and (not def_top.pipe_connections.pattern or string.find(nym.name, def_top.pipe_connections.pattern))
+ and (not def_top.pipe_connections.top_param2 or (nym.param2 == def_top.pipe_connections.top_param2)) then
+ pym = 1
+ end
+ if def_bottom and def_bottom.pipe_connections and def_bottom.pipe_connections.bottom
+ and (not def_bottom.pipe_connections.pattern or string.find(nyp.name, def_bottom.pipe_connections.pattern))
+ and (not def_bottom.pipe_connections.bottom_param2 or (nyp.param2 == def_bottom.pipe_connections.bottom_param2)) then
+ pyp = 1
+ end
+ if def_front and def_front.pipe_connections and def_front.pipe_connections.front
+ and (not def_front.pipe_connections.pattern or string.find(nzp.name, def_front.pipe_connections.pattern))
+ and (not def_front.pipe_connections.front_param2 or (nzp.param2 == def_front.pipe_connections.front_param2)) then
+ pzp = 1
+ end
+ if def_back and def_back.pipe_connections and def_back.pipe_connections.back
+ and (not def_back.pipe_connections.pattern or string.find(nzm.name, def_back.pipe_connections.pattern))
+ and (not def_back.pipe_connections.back_param2 or (nzm.param2 == def_back.pipe_connections.back_param2)) then
+ pzm = 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
---
-
+ print("stage 2 returns "..pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp..
+ " for nodes surrounding "..minetest.get_node(pos).name.." at "..minetest.pos_to_string(pos))
return pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp
end
@@ -204,4 +212,3 @@ function pipeworks.look_for_stackable_tanks(pos)
minetest.add_node(pos, { name = "pipeworks:expansion_tank_0", param2 = tym.param2})
end
end
-