Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stairs: Add helper function for textures #3060

Merged
merged 5 commits into from
Sep 11, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 36 additions & 113 deletions mods/stairs/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,61 +63,43 @@ local function warn_if_exists(nodename)
end
end

-- get node settings to use for stairs
local function get_node_vars(nodename)

local def = minetest.registered_nodes[nodename]

if def then
return def.light_source, def.use_texture_alpha, def.sunlight_propagates
-- Set backface culling and world-aligned textures
local function set_textures(images, worldaligntex)
local stair_images = {}
for i, image in ipairs(images) do
stair_images[i] = type(image) == "string" and {name = image} or table.copy(image)
if stair_images[i].backface_culling == nil then
stair_images[i].backface_culling = true
end
if worldaligntex and stair_images[i].align_style == nil then
stair_images[i].align_style = "world"
end
sfan5 marked this conversation as resolved.
Show resolved Hide resolved
end

return nil, nil, nil
return stair_images
end

-- Register stair
-- Node will be called stairs:stair_<subname>

function stairs.register_stair(subname, recipeitem, groups, images, description,
sounds, worldaligntex)
local light_source, texture_alpha, sunlight = get_node_vars(recipeitem)

-- Set backface culling and world-aligned textures
local stair_images = {}
for i, image in ipairs(images) do
if type(image) == "string" then
stair_images[i] = {
name = image,
backface_culling = true,
}
if worldaligntex then
stair_images[i].align_style = "world"
end
else
stair_images[i] = table.copy(image)
if stair_images[i].backface_culling == nil then
stair_images[i].backface_culling = true
end
if worldaligntex and stair_images[i].align_style == nil then
stair_images[i].align_style = "world"
end
end
end
local def = minetest.registered_nodes[recipeitem] or {}
local stair_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.stair = 1
warn_if_exists("stairs:stair_" .. subname)
minetest.register_node(":stairs:stair_" .. subname, {
description = description,
drawtype = "nodebox",
tiles = stair_images,
use_texture_alpha = texture_alpha,
sunlight_propagates = sunlight,
light_source = light_source,
use_texture_alpha = def.use_texture_alpha,
sunlight_propagates = def.sunlight_propagates,
light_source = def.light_source,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = new_groups,
sounds = sounds,
sounds = sounds or def.sounds,
node_box = {
type = "fixed",
fixed = {
Expand Down Expand Up @@ -184,40 +166,23 @@ end

function stairs.register_slab(subname, recipeitem, groups, images, description,
sounds, worldaligntex)
local light_source, texture_alpha, sunlight = get_node_vars(recipeitem)

-- Set world-aligned textures
local slab_images = {}
for i, image in ipairs(images) do
if type(image) == "string" then
slab_images[i] = {
name = image,
}
if worldaligntex then
slab_images[i].align_style = "world"
end
else
slab_images[i] = table.copy(image)
if worldaligntex and image.align_style == nil then
slab_images[i].align_style = "world"
end
end
end
local def = minetest.registered_nodes[recipeitem] or {}
local slab_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.slab = 1
warn_if_exists("stairs:slab_" .. subname)
minetest.register_node(":stairs:slab_" .. subname, {
description = description,
drawtype = "nodebox",
tiles = slab_images,
use_texture_alpha = texture_alpha,
sunlight_propagates = sunlight,
light_source = light_source,
use_texture_alpha = def.use_texture_alpha,
sunlight_propagates = def.sunlight_propagates,
light_source = def.light_source,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = new_groups,
sounds = sounds,
sounds = sounds or def.sounds,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
Expand Down Expand Up @@ -324,29 +289,8 @@ end

function stairs.register_stair_inner(subname, recipeitem, groups, images,
description, sounds, worldaligntex, full_description)
local light_source, texture_alpha, sunlight = get_node_vars(recipeitem)

-- Set backface culling and world-aligned textures
local stair_images = {}
for i, image in ipairs(images) do
if type(image) == "string" then
stair_images[i] = {
name = image,
backface_culling = true,
}
if worldaligntex then
stair_images[i].align_style = "world"
end
else
stair_images[i] = table.copy(image)
if stair_images[i].backface_culling == nil then
stair_images[i].backface_culling = true
end
if worldaligntex and stair_images[i].align_style == nil then
stair_images[i].align_style = "world"
end
end
end
local def = minetest.registered_nodes[recipeitem] or {}
local stair_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.stair = 1
if full_description then
Expand All @@ -359,14 +303,14 @@ function stairs.register_stair_inner(subname, recipeitem, groups, images,
description = description,
drawtype = "nodebox",
tiles = stair_images,
use_texture_alpha = texture_alpha,
sunlight_propagates = sunlight,
light_source = light_source,
use_texture_alpha = def.use_texture_alpha,
sunlight_propagates = def.sunlight_propagates,
light_source = def.light_source,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = new_groups,
sounds = sounds,
sounds = sounds or def.sounds,
node_box = {
type = "fixed",
fixed = {
Expand Down Expand Up @@ -416,29 +360,8 @@ end

function stairs.register_stair_outer(subname, recipeitem, groups, images,
description, sounds, worldaligntex, full_description)
local light_source, texture_alpha, sunlight = get_node_vars(recipeitem)

-- Set backface culling and world-aligned textures
local stair_images = {}
for i, image in ipairs(images) do
if type(image) == "string" then
stair_images[i] = {
name = image,
backface_culling = true,
}
if worldaligntex then
stair_images[i].align_style = "world"
end
else
stair_images[i] = table.copy(image)
if stair_images[i].backface_culling == nil then
stair_images[i].backface_culling = true
end
if worldaligntex and stair_images[i].align_style == nil then
stair_images[i].align_style = "world"
end
end
end
local def = minetest.registered_nodes[recipeitem] or {}
local stair_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.stair = 1
if full_description then
Expand All @@ -451,14 +374,14 @@ function stairs.register_stair_outer(subname, recipeitem, groups, images,
description = description,
drawtype = "nodebox",
tiles = stair_images,
use_texture_alpha = texture_alpha,
sunlight_propagates = sunlight,
light_source = light_source,
use_texture_alpha = def.use_texture_alpha,
sunlight_propagates = def.sunlight_propagates,
light_source = def.light_source,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = new_groups,
sounds = sounds,
sounds = sounds or def.sounds,
node_box = {
type = "fixed",
fixed = {
Expand Down
Loading