From f44993cd846ab8b45408fba2c4b84664e77f4930 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 12 Apr 2017 03:39:43 -0400 Subject: 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 --- autoplace_pipes.lua | 137 +++++++++++++++++++++++++++------------------------- 1 file changed, 72 insertions(+), 65 deletions(-) (limited to 'autoplace_pipes.lua') 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 = , -- if supplied, search for this pattern instead of the exact node name + left = , -- true (or 1) if the left side of the node needs to connect to a pipe + right = , -- or from the right side, etc. + top = , + bottom = , + front = , + back = , + left_param2 = , -- the node must have this param2 to connect from the left + right_param2 = , -- or right, etc. + top_param2 = , -- Omit some or all of these to skip checking param2 for those sides + bottom_param2 = , + front_param2 = , + back_param2 = , + }, + + ...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 - -- cgit v1.2.3