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 2 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
105 changes: 20 additions & 85 deletions mods/stairs/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ local function warn_if_exists(nodename)
end
end

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

local def = minetest.registered_nodes[nodename]
Copy link
Contributor

@appgurueu appgurueu Sep 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I'm seeing this correctly, the only thing this function is ever used for is to "transplant" a few definition fields? Why not refactor it to be a local function transplant_def_fields(nodename, to_def)?

The code would then become something like

local def = minetest.registered_nodes[nodename]
if not def then return end
for _, field in ipairs({"light_source", "use_texture_alpha", "sunlight_propagates", "sounds"}) do
    if to_def[field] == nil then
        to_def[field] = def[field]
    end
end

Or alternatively, something like register_node_based_on(nodename, base_nodename, def)?

Another alternative to get rid of get_node_vars: Replace its usage with local def = minetest.registered_nodes[nodename] or {}, then you can directly access def fields as def.light_source etc.

Expand All @@ -75,34 +75,28 @@ local function get_node_vars(nodename)
return nil, nil, nil
end

-- 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 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 stair_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.stair = 1
warn_if_exists("stairs:stair_" .. subname)
Expand Down Expand Up @@ -185,24 +179,7 @@ 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 slab_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.slab = 1
warn_if_exists("stairs:slab_" .. subname)
Expand Down Expand Up @@ -325,28 +302,7 @@ 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 stair_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.stair = 1
if full_description then
Expand Down Expand Up @@ -417,28 +373,7 @@ 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 stair_images = set_textures(images, worldaligntex)
local new_groups = table.copy(groups)
new_groups.stair = 1
if full_description then
Expand Down
Loading