From: PilzAdam Date: Fri, 5 Apr 2013 20:33:11 +0000 (+0200) Subject: Only enqueue falling nodes if they really want to fall X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=97f0bb03423b6d2e22058166b677e568c53d7567;p=zefram%2Fminetest%2Fminetest_engine.git Only enqueue falling nodes if they really want to fall --- diff --git a/builtin/falling.lua b/builtin/falling.lua index 5ae51e76..f6491991 100644 --- a/builtin/falling.lua +++ b/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