Make tubes opaque when entities are not used (#29)

* Make tubes opaque when entities are not used
This commit is contained in:
Jude Melton-Houghton 2022-05-11 18:41:28 -04:00 committed by GitHub
parent e3d94cb3a8
commit 55ded7e569
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 8 deletions

@ -49,12 +49,13 @@ minetest.register_node("pipeworks:steel_pane_embedded_tube", {
drawtype = "nodebox", drawtype = "nodebox",
description = S("Airtight panel embedded tube"), description = S("Airtight panel embedded tube"),
tiles = { tiles = {
"pipeworks_pane_embedded_tube_sides.png^[transformR90", pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png^[transformR90"),
"pipeworks_pane_embedded_tube_sides.png^[transformR90", pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png^[transformR90"),
"pipeworks_pane_embedded_tube_sides.png", pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png"),
"pipeworks_pane_embedded_tube_sides.png", pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png"),
"pipeworks_pane_embedded_tube_ends.png", "pipeworks_pane_embedded_tube_ends.png", pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_ends.png"),
}, pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_ends.png"),
},
use_texture_alpha = texture_alpha_mode, use_texture_alpha = texture_alpha_mode,
node_box = pane_box, node_box = pane_box,
selection_box = pane_box, selection_box = pane_box,

@ -69,6 +69,29 @@ function pipeworks.fix_image_names(table, replacement)
return outtable return outtable
end end
local function overlay_tube_texture(texture)
-- The texture appears the first time to be colorized as the opaque background.
return ("(%s)^[noalpha^[colorize:#dadada^(%s)"):format(texture, texture)
end
function pipeworks.make_tube_tile(tile)
if pipeworks.use_real_entities then
return tile
elseif type(tile) == "string" then
return overlay_tube_texture(tile)
else
tile = table.copy(tile)
if tile.color then
-- Won't work 100% of the time, but good enough.
tile.name = tile.name .. "^[multiply:" .. minetest.colorspec_to_colorstring(tile.color)
tile.color = nil
end
tile.name = overlay_tube_texture(tile.name)
tile.backface_culling = nil -- The texture is opaque
return tile
end
end
function pipeworks.add_node_box(t, b) function pipeworks.add_node_box(t, b)
if not t or not b then return end if not t or not b then return end
for i in ipairs(b) for i in ipairs(b)

@ -143,10 +143,14 @@ local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
and "clip" or true and "clip" or true
if pipeworks.enable_one_way_tube then if pipeworks.enable_one_way_tube then
local tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png",
"pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"}
for i, tile in ipairs(tiles) do
tiles[i] = pipeworks.make_tube_tile(tile)
end
minetest.register_node("pipeworks:one_way_tube", { minetest.register_node("pipeworks:one_way_tube", {
description = S("One way tube"), description = S("One way tube"),
tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png", tiles = tiles,
"pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"},
use_texture_alpha = texture_alpha_mode, use_texture_alpha = texture_alpha_mode,
paramtype2 = "facedir", paramtype2 = "facedir",
drawtype = "nodebox", drawtype = "nodebox",

@ -77,4 +77,5 @@ pipeworks_drop_on_routing_fail (Drop On Routing Fail) bool false
pipeworks_delete_item_on_clearobject (Delete Item On Clearobject) bool true pipeworks_delete_item_on_clearobject (Delete Item On Clearobject) bool true
#Use real visible entities in tubes within active areas. #Use real visible entities in tubes within active areas.
#When disabled, tubes are made opaque.
pipeworks_use_real_entities (Use real entities) bool true pipeworks_use_real_entities (Use real entities) bool true

@ -80,6 +80,10 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e
wscale = {x = 1, y = 1, z = 0.01} wscale = {x = 1, y = 1, z = 0.01}
end end
for i, tile in ipairs(outimgs) do
outimgs[i] = pipeworks.make_tube_tile(tile)
end
local rname = string.format("%s_%s", name, tname) local rname = string.format("%s_%s", name, tname)
table.insert(tubenodes, rname) table.insert(tubenodes, rname)