Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Only enqueue falling nodes if they really want to fall
- Loading branch information
Showing
with
9 additions
and
8 deletions.
-
+9
−8
builtin/falling.lua
|
@@ -142,7 +142,7 @@ end |
|
|
-- Some common functions |
|
|
-- |
|
|
|
|
|
function nodeupdate_single(p) |
|
|
function nodeupdate_single(p, delay) |
|
|
n = minetest.env:get_node(p) |
|
|
if minetest.get_node_group(n.name, "falling_node") ~= 0 then |
|
|
p_bottom = {x=p.x, y=p.y-1, z=p.z} |
|
@@ -151,9 +151,13 @@ function nodeupdate_single(p) |
|
|
if minetest.registered_nodes[n_bottom.name] and |
|
|
(not minetest.registered_nodes[n_bottom.name].walkable or |
|
|
minetest.registered_nodes[n_bottom.name].buildable_to) then |
|
|
minetest.env:remove_node(p) |
|
|
spawn_falling_node(p, n.name) |
|
|
nodeupdate(p) |
|
|
if delay then |
|
|
minetest.after(0.1, nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false) |
|
|
else |
|
|
minetest.env:remove_node(p) |
|
|
spawn_falling_node(p, n.name) |
|
|
nodeupdate(p) |
|
|
end |
|
|
end |
|
|
end |
|
|
|
|
@@ -170,14 +174,11 @@ function nodeupdate(p) |
|
|
p.x = math.floor(p.x+0.5) |
|
|
p.y = math.floor(p.y+0.5) |
|
|
p.z = math.floor(p.z+0.5) |
|
|
nodeupdate_single(p) |
|
|
|
|
|
for x = -1,1 do |
|
|
for y = -1,1 do |
|
|
for z = -1,1 do |
|
|
if not (x==0 and y==0 and z==0) then |
|
|
minetest.after(0.1, nodeupdate_single, {x=p.x+x, y=p.y+y, z=p.z+z}) |
|
|
end |
|
|
nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, not (x==0 and y==0 and z==0)) |
|
|
end |
|
|
end |
|
|
end |
|
|