TNT: make tnt:boom visual a particle, and larger
authorAuke Kok <sofar@foo-projects.org>
Tue, 26 Apr 2016 00:51:38 +0000 (17:51 -0700)
committerparamat <mat.gregory@virginmedia.com>
Tue, 26 Apr 2016 21:34:00 +0000 (22:34 +0100)
We reuse the tnt:boom texture for a particle that is added by the
on_construct() of tnt:boom, and has a short expiry time (0.2sec).
It is 3 nodes larged, centered on the explosion.

We then make tnt:boom airlike so it doesn't have a texture, and it's
the thing that emits lots of light (we could even make it exist a
bit longer).

The nice thing about particles is that the client is less susceptible
to lag and will always remove them as fast as possible, so this makes
the visual more constant and responsive.

mods/tnt/init.lua

index 3ef8a844ef011658ed2b00aa4508981d0a4750cd..4330c4fcaddaf93453aca9e46c926a82425cd6b9 100644 (file)
@@ -309,14 +309,24 @@ function tnt.boom(pos, def)
 end
 
 minetest.register_node("tnt:boom", {
-       drawtype = "plantlike",
-       tiles = {"tnt_boom.png"},
+       drawtype = "airlike",
        light_source = default.LIGHT_MAX,
        walkable = false,
        drop = "",
        groups = {dig_immediate = 3},
        on_construct = function(pos)
-               minetest.get_node_timer(pos):start(0.5)
+               minetest.add_particle({
+                       pos = pos,
+                       velocity = vector.new(),
+                       acceleration = vector.new(),
+                       expirationtime = 0.4,
+                       size = 30,
+                       collisiondetection = false,
+                       vertical = false,
+                       texture = "tnt_boom.png",
+                       playername = nil,
+               })
+               minetest.get_node_timer(pos):start(0.4)
        end,
        on_timer = function(pos, elapsed)
                minetest.remove_node(pos)