updated pipeworks
This commit is contained in:
parent
29881ec85e
commit
1105326dc1
@ -176,7 +176,7 @@ local function update_meta(meta, enabled)
|
||||
"list[context;recipe;0,0;3,3;]"..
|
||||
"image[3,1;1,1;gui_hb_bg.png^[colorize:#141318:255]"..
|
||||
"list[context;output;3,1;1,1;]"..
|
||||
"image_button[3,2;1,1;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" ..
|
||||
"image_button[3,2;1,0.6;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" ..
|
||||
"list[context;src;0,4.5;8,3;]"..
|
||||
"list[context;dst;4,0;4,3;]"..
|
||||
default.gui_bg..
|
||||
|
@ -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
|
||||
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]
|
||||
|
||||
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
|
||||
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 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
|
||||
|
||||
-- ...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
|
||||
--
|
||||
|
||||
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
|
||||
|
||||
|
@ -139,6 +139,7 @@ for s in ipairs(states) do
|
||||
groups = dgroups,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { top = 1 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -252,11 +253,17 @@ minetest.register_node("pipeworks:grating", {
|
||||
"pipeworks_grating_sides.png",
|
||||
"pipeworks_grating_sides.png"
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.49, -0.49, -0.49, 0.49, 0.5, 0.49 }
|
||||
},
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { top = 1 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -279,6 +286,8 @@ minetest.register_node("pipeworks:spigot", {
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { left=1, right=1, front=1, back=1,
|
||||
left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -318,6 +327,8 @@ minetest.register_node("pipeworks:spigot_pouring", {
|
||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { left=1, right=1, front=1, back=1,
|
||||
left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
|
||||
after_place_node = function(pos)
|
||||
minetest.set_node(pos, { name = "pipeworks:spigot", param2 = minetest.get_node(pos).param2 })
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
@ -494,6 +505,7 @@ for fill = 0, 10 do
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
drop = "pipeworks:storage_tank_0",
|
||||
pipe_connections = { top = 1, bottom = 1},
|
||||
after_place_node = function(pos)
|
||||
pipeworks.look_for_stackable_tanks(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
@ -521,6 +533,7 @@ for fill = 0, 10 do
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
drop = "pipeworks:storage_tank_0",
|
||||
pipe_connections = { top = 1, bottom = 1},
|
||||
after_place_node = function(pos)
|
||||
pipeworks.look_for_stackable_tanks(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
@ -544,6 +557,7 @@ minetest.register_node("pipeworks:fountainhead", {
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { bottom = 1 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -576,6 +590,7 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
|
||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { bottom = 1 },
|
||||
after_place_node = function(pos)
|
||||
minetest.set_node(pos, { name = "pipeworks:fountainhead", param2 = minetest.get_node(pos).param2 })
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
|
Loading…
x
Reference in New Issue
Block a user