mirror of
https://github.com/minetest/minetest_game.git
synced 2024-11-08 16:53:53 +01:00
Get rid of recursive call in default.dig_up (#3133)
This commit is contained in:
parent
7967f77f3b
commit
b23c44d980
@ -1217,3 +1217,11 @@ These can be influenced using this API.
|
|||||||
* `player`: ObjectRef of the relevant player
|
* `player`: ObjectRef of the relevant player
|
||||||
* You can override this function to change the weather effects by simply returning different values.
|
* You can override this function to change the weather effects by simply returning different values.
|
||||||
Setting `clouds` or `lighting` in the result table to `nil` will *prevent* those from changing.
|
Setting `clouds` or `lighting` in the result table to `nil` will *prevent* those from changing.
|
||||||
|
|
||||||
|
Utilities
|
||||||
|
---------
|
||||||
|
|
||||||
|
`default.dig_up(pos, node, digger, max_height)`
|
||||||
|
|
||||||
|
* Find all nodes above `pos` that is the same, then dig them all
|
||||||
|
* `max_height` Maximum number of nodes to iterate. Default: 100
|
||||||
|
@ -293,14 +293,31 @@ minetest.register_abm({
|
|||||||
-- Dig upwards
|
-- Dig upwards
|
||||||
--
|
--
|
||||||
|
|
||||||
function default.dig_up(pos, node, digger)
|
local in_dig_up = false
|
||||||
|
|
||||||
|
function default.dig_up(pos, node, digger, max_height)
|
||||||
|
if in_dig_up then return end -- Do not recurse
|
||||||
if digger == nil then return end
|
if digger == nil then return end
|
||||||
local np = {x = pos.x, y = pos.y + 1, z = pos.z}
|
max_height = max_height or 100
|
||||||
local nn = minetest.get_node(np)
|
|
||||||
if nn.name == node.name then
|
in_dig_up = true
|
||||||
minetest.node_dig(np, nn, digger)
|
for y = 1, max_height do
|
||||||
|
local up_pos = vector.offset(pos, 0, y, 0)
|
||||||
|
local up_node = minetest.get_node(up_pos)
|
||||||
|
if up_node.name ~= node.name then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
if not minetest.node_dig(up_pos, up_node, digger) then
|
||||||
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
in_dig_up = false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- errors are hard to handle, instead we rely on resetting this value the next step
|
||||||
|
minetest.register_globalstep(function()
|
||||||
|
in_dig_up = false
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
|
Loading…
Reference in New Issue
Block a user