mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-22 02:21:06 +01:00
Address review comments on mcl_util.trace_nodes
This commit is contained in:
parent
981cddddd4
commit
189a2c62ad
3 changed files with 12 additions and 7 deletions
|
@ -1134,21 +1134,21 @@ end
|
|||
|
||||
-- Traces along a line of nodes vertically to find the next possition that isn't an allowed node
|
||||
---@param pos The position to start tracing from
|
||||
---@param dir The direction to trace in (1 is up, -1 is down)
|
||||
---@param allowed_nodes A table of node names to trace along
|
||||
---@param dir The direction to trace in. 1 is up, -1 is down, all other values are not allowed.
|
||||
---@param allowed_nodes A set of node names to trace along.
|
||||
---@param limit The maximum number of steps to make. Defaults to 16 if nil or missing
|
||||
---@return Three return values:
|
||||
--- the position of the next node that isn't allowed or nil if no such node was found,
|
||||
--- the distance from the start where that node was found,
|
||||
--- the node table if a node was found
|
||||
function mcl_util.trace_nodes(pos, dir, allowed_nodes, limit)
|
||||
if not dir or dir == 0 or #allowed_nodes == 0 then return nil, 0, nil end
|
||||
if ( dir ~= -1 ) and ( dir ~= 1 ) then return nil, 0, nil end
|
||||
limit = limit or 16
|
||||
|
||||
for i = 1,limit do
|
||||
pos = vector.offset(pos, 0, dir, 0)
|
||||
local node = minetest.get_node(pos)
|
||||
if table.indexof(allowed_nodes, node.name) == -1 then return pos, i, node end
|
||||
if not allowed_nodes[node.name] then return pos, i, node end
|
||||
end
|
||||
|
||||
return nil, limit, nil
|
||||
|
|
|
@ -44,6 +44,10 @@ mcl_bamboo.bamboo_index = {
|
|||
"mcl_bamboo:bamboo_2",
|
||||
"mcl_bamboo:bamboo_3",
|
||||
}
|
||||
mcl_bamboo.bamboo_set = {}
|
||||
for _,key in pairs(mcl_bamboo.bamboo_index) do
|
||||
mcl_bamboo.bamboo_set[key] = true
|
||||
end
|
||||
|
||||
function mcl_bamboo.is_bamboo(node_name)
|
||||
local index = table.indexof(mcl_bamboo.bamboo_index, node_name)
|
||||
|
@ -108,7 +112,7 @@ function mcl_bamboo.grow_bamboo(pos, bonemeal_applied)
|
|||
|
||||
-- Determine the location of soil
|
||||
local soil_pos
|
||||
soil_pos,a,b = mcl_util.trace_nodes(pos, -1, mcl_bamboo.bamboo_index, BAMBOO_MAX_HEIGHT - 1)
|
||||
soil_pos,a,b = mcl_util.trace_nodes(pos, -1, mcl_bamboo.bamboo_set, BAMBOO_MAX_HEIGHT - 1)
|
||||
|
||||
-- No soil found, return false so that bonemeal isn't used
|
||||
if not soil_pos then return false end
|
||||
|
@ -127,7 +131,7 @@ function mcl_bamboo.grow_bamboo(pos, bonemeal_applied)
|
|||
log("Grow bamboo; height: " .. height)
|
||||
|
||||
-- Locate the bamboo tip
|
||||
local bamboo_tip,actual_height,bamboo_tip_node = mcl_util.trace_nodes(first_shoot, 1, mcl_bamboo.bamboo_index, height - 1)
|
||||
local bamboo_tip,actual_height,bamboo_tip_node = mcl_util.trace_nodes(first_shoot, 1, mcl_bamboo.bamboo_set, height - 1)
|
||||
log("Current height: "..tostring(actual_height))
|
||||
|
||||
-- Short circuit growth if the bamboo is already finished growing
|
||||
|
|
|
@ -23,7 +23,8 @@ function grow_vines(pos, moreontop, vine, dir)
|
|||
if dir == nil then dir = 1 end
|
||||
if not moreontop or moreontop < 1 then return false end
|
||||
|
||||
local allowed_nodes = {vine}
|
||||
local allowed_nodes = {}
|
||||
allowed_nodes[vine] = true
|
||||
|
||||
-- Find the root, tip and calculate height
|
||||
local root,_,root_node = mcl_util.trace_nodes(pos, -dir, allowed_nodes, MAXIMUM_VINE_HEIGHT)
|
||||
|
|
Loading…
Reference in a new issue