waterworks/nodes.lua

281 lines
10 KiB
Lua

minetest.register_node("waterworks:pipe", {
description = "Waterworks Pipe",
tiles = {
{name="waterworks_pipe.png^waterworks_pipe_rivets_offset.png", scale=4, align_style="world"},
{name="waterworks_pipe.png^waterworks_pipe_rivets_offset_2.png", scale=4, align_style="world"},
{name="waterworks_pipe.png^waterworks_pipe_rivets.png", scale=4, align_style="world"},
{name="waterworks_pipe.png^waterworks_pipe_rivets_offset_2.png", scale=4, align_style="world"},
{name="waterworks_pipe.png^waterworks_pipe_rivets.png", scale=4, align_style="world"},
{name="waterworks_pipe.png^waterworks_pipe_rivets_offset_2.png", scale=4, align_style="world"},
},
connects_to = {"group:waterworks_pipe", "group:waterworks_connected", "group:waterworks_inert"},
connect_sides = { "top", "bottom", "front", "left", "back", "right" },
drawtype = "nodebox",
node_box = {
type = "connected",
fixed = {-0.25,-0.25,-0.25,0.25,0.25,0.25},
connect_top = {-0.375, 0, -0.375, 0.375, 0.5, 0.375},
connect_bottom = {-0.375, -0.5, -0.375, 0.375, 0, 0.375},
connect_back = {-0.375, -0.375, 0, 0.375, 0.375, 0.5},
connect_right = {0, -0.375, -0.375, 0.5, 0.375, 0.375},
connect_front = {-0.375, -0.375, -0.5, 0.375, 0.375, 0},
connect_left = {-0.5, -0.375, -0.375, 0, 0.375, 0.375},
disconnected = {-0.375,-0.375,-0.375,0.375,0.375,0.375},
},
paramtype = "light",
is_ground_content = false,
groups = {oddly_breakable_by_hand = 1, waterworks_pipe = 1},
sounds = default.node_sound_metal_defaults(),
on_construct = function(pos)
waterworks.place_pipe(pos)
end,
on_destruct = function(pos)
waterworks.remove_pipe(pos)
end,
})
-----------------------------------------------------------------
minetest.register_node("waterworks:valve_on", {
description = "Waterworks Valve (open)",
tiles = {"waterworks_metal.png^waterworks_valve_seam.png^waterworks_valve_on.png",},
connects_to = {"group:waterworks_pipe", "group:waterworks_connected", "group:waterworks_inert"},
connect_sides = { "top", "bottom", "front", "left", "back", "right" },
drawtype = "nodebox",
node_box = {
type = "connected",
fixed = {-0.4375,-0.4375,-0.4375,0.4375,0.4375,0.4375},
connect_top = {-0.375, 0.4375, -0.375, 0.375, 0.5, 0.375},
connect_bottom = {-0.375, -0.5, -0.375, 0.375, -0.4375, 0.375},
connect_back = {-0.375, -0.375, 0.4375, 0.375, 0.375, 0.5},
connect_right = {0.4375, -0.375, -0.375, 0.5, 0.375, 0.375},
connect_front = {-0.375, -0.375, -0.5, 0.375, 0.375, -0.4375},
connect_left = {-0.5, -0.375, -0.375, -0.4375, 0.375, 0.375},
},
paramtype = "light",
is_ground_content = false,
groups = {oddly_breakable_by_hand = 1, waterworks_pipe = 1},
sounds = default.node_sound_metal_defaults(),
on_construct = function(pos)
waterworks.place_pipe(pos)
end,
on_destruct = function(pos)
waterworks.remove_pipe(pos)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
node.name = "waterworks:valve_off"
minetest.set_node(pos, node)
end,
})
minetest.register_node("waterworks:valve_off", {
description = "Waterworks Valve (closed)",
tiles = {"waterworks_metal.png^waterworks_valve_seam.png^waterworks_valve_off.png",},
connects_to = {"group:waterworks_pipe", "group:waterworks_connected", "group:waterworks_inert"},
connect_sides = { "top", "bottom", "front", "left", "back", "right" },
drawtype = "nodebox",
node_box = {
type = "connected",
fixed = {-0.4375,-0.4375,-0.4375,0.4375,0.4375,0.4375},
connect_top = {-0.375, 0.4375, -0.375, 0.375, 0.5, 0.375},
connect_bottom = {-0.375, -0.5, -0.375, 0.375, -0.4375, 0.375},
connect_back = {-0.375, -0.375, 0.4375, 0.375, 0.375, 0.5},
connect_right = {0.4375, -0.375, -0.375, 0.5, 0.375, 0.375},
connect_front = {-0.375, -0.375, -0.5, 0.375, 0.375, -0.4375},
connect_left = {-0.5, -0.375, -0.375, -0.4375, 0.375, 0.375},
},
paramtype = "light",
drops = "waterworks:valve_on",
is_ground_content = false,
groups = {oddly_breakable_by_hand = 1, waterworks_inert = 1, not_in_creative_inventory = 1},
sounds = default.node_sound_metal_defaults(),
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
node.name = "waterworks:valve_on"
minetest.set_node(pos, node)
end,
})
-----------------------------------------------------------------
local place_inlet = function(pos)
local node = minetest.get_node(pos)
local dir = minetest.facedir_to_dir(node.param2)
local target = vector.subtract(pos, dir)
waterworks.place_connected(pos, "inlet", {pos = pos, target = target, pressure = target.y})
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Inlet elevation " .. tostring(target.y))
end
minetest.register_node("waterworks:inlet", {
description = "Waterworks Inlet",
tiles = {
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png^waterworks_connected_back.png",
"waterworks_metal.png^waterworks_inlet.png",
},
paramtype2 = "facedir",
is_ground_content = false,
groups = {oddly_breakable_by_hand = 1, waterworks_connected = 1},
sounds = default.node_sound_metal_defaults(),
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.375, -0.375, -0.375, 0.375, 0.375, 0.5}, {-0.5, -0.5, -0.5, 0.5, 0.5, -0.375}},
},
_waterworks_update_connected = place_inlet,
on_construct = function(pos)
place_inlet(pos)
end,
on_destruct = function(pos)
waterworks.remove_connected(pos, "inlet")
end,
on_rotate = function(pos, node, user, mode, new_param2)
waterworks.remove_connected(pos, "inlet")
node.param2 = new_param2
minetest.swap_node(pos, node)
place_inlet(pos)
return true
end,
})
local place_pumped_inlet = function(pos)
local node = minetest.get_node(pos)
local dir = minetest.facedir_to_dir(node.param2)
local target = vector.subtract(pos, dir)
waterworks.place_connected(pos, "inlet", {pos = pos, target = target, pressure = target.y + 100})
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Pump effective elevation " .. tostring(target.y + 100))
end
minetest.register_node("waterworks:pumped_inlet", {
description = "Waterworks Pumped Inlet",
tiles = {
"waterworks_turbine_base.png",
"waterworks_turbine_base.png",
"waterworks_turbine_side.png^[transformFX",
"waterworks_turbine_side.png",
"waterworks_metal.png^waterworks_connected_back.png",
"waterworks_turbine_base.png^waterworks_turbine.png",
},
paramtype2 = "facedir",
is_ground_content = false,
groups = {oddly_breakable_by_hand = 1, waterworks_connected = 1},
sounds = default.node_sound_metal_defaults(),
paramtype = "light",
drawtype = "normal",
_waterworks_update_connected = place_pumped_inlet,
on_construct = function(pos)
place_pumped_inlet(pos)
end,
on_destruct = function(pos)
waterworks.remove_connected(pos, "inlet")
end,
on_rotate = function(pos, node, user, mode, new_param2)
waterworks.remove_connected(pos, "inlet")
node.param2 = new_param2
minetest.swap_node(pos, node)
place_pumped_inlet(pos)
return true
end,
})
local place_outlet = function(pos)
local node = minetest.get_node(pos)
local dir = minetest.facedir_to_dir(node.param2)
local target = vector.subtract(pos, dir)
waterworks.place_connected(pos, "outlet", {pos = pos, target = target, pressure = target.y})
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Outlet elevation " .. tostring(target.y))
end
minetest.register_node("waterworks:outlet", {
description = "Waterworks Outlet",
tiles = {
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png^waterworks_connected_back.png",
"waterworks_metal.png^waterworks_outlet.png",
},
paramtype2 = "facedir",
is_ground_content = false,
groups = {oddly_breakable_by_hand = 1, waterworks_connected = 1},
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.375, -0.375, -0.375, 0.375, 0.375, 0.5}, {-0.5, -0.5, -0.5, 0.5, 0.5, -0.375}},
},
sounds = default.node_sound_metal_defaults(),
_waterworks_update_connected = place_outlet,
on_construct = function(pos)
place_outlet(pos)
end,
on_destruct = function(pos)
waterworks.remove_connected(pos, "outlet")
end,
on_rotate = function(pos, node, user, mode, new_param2)
waterworks.remove_connected(pos, "outlet")
node.param2 = new_param2
minetest.swap_node(pos, node)
place_outlet(pos)
return true
end,
})
local place_grate = function(pos)
local node = minetest.get_node(pos)
local dir = minetest.facedir_to_dir(node.param2)
local target = vector.subtract(pos, dir)
waterworks.place_connected(pos, "outlet", {pos = pos, target = target, pressure = target.y})
waterworks.place_connected(pos, "inlet", {pos = pos, target = target, pressure = target.y})
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Grate elevation " .. tostring(target.y))
end
minetest.register_node("waterworks:grate", {
description = "Waterworks Grate",
tiles = {
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png",
"waterworks_metal.png^waterworks_connected_back.png",
"waterworks_metal.png^waterworks_grate.png",
},
paramtype2 = "facedir",
is_ground_content = false,
groups = {oddly_breakable_by_hand = 1, waterworks_connected = 1},
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {{-0.375, -0.375, -0.375, 0.375, 0.375, 0.5}, {-0.5, -0.5, -0.5, 0.5, 0.5, -0.375}},
},
sounds = default.node_sound_metal_defaults(),
_waterworks_update_connected = place_grate,
on_construct = function(pos)
place_grate(pos)
end,
on_destruct = function(pos)
waterworks.remove_connected(pos, "outlet")
waterworks.remove_connected(pos, "inlet")
end,
on_rotate = function(pos, node, user, mode, new_param2)
waterworks.remove_connected(pos, "outlet")
waterworks.remove_connected(pos, "inlet")
node.param2 = new_param2
minetest.swap_node(pos, node)
place_grate(pos)
return true
end,
})