TNT: add some depth to the explosion effect
We add a dirt-like particle (drawn from scratch, uses some colors from default_dirt's palette) to spawn many particles that have collision enabled around the center of the blast. This has the effect of obscuring the center of the blast, as that is a painfully visible empty area when the explosion happens, as there's only a little spark. The dirt particles bounce around the walls and floor a bit, and disappear rapidly, well before the smoke particles disappear. This is a nice visual distraction that obscures the sudden appearance of the gaping hole, and makes it a whole lot more believable.
This commit is contained in:
parent
91856fb3fb
commit
c90df65294
31
init.lua
31
init.lua
@ -162,6 +162,37 @@ local function add_effects(pos, radius)
|
||||
maxsize = 16,
|
||||
texture = "tnt_smoke.png",
|
||||
})
|
||||
|
||||
-- we just dropped some items. Look at the items entities and pick
|
||||
-- one of them to use as texture
|
||||
local texture = "tnt_blast.png" --fallback texture
|
||||
local objs = minetest.get_objects_inside_radius(pos, 2)
|
||||
for _, obj in pairs(objs) do
|
||||
if obj and obj:get_luaentity() then
|
||||
local def = ItemStack(obj:get_luaentity().itemstring):get_definition()
|
||||
if def.tiles then
|
||||
texture = def.tiles[1]
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = 64,
|
||||
time = 0.1,
|
||||
minpos = vector.subtract(pos, radius / 2),
|
||||
maxpos = vector.add(pos, radius / 2),
|
||||
minvel = {x=-3, y=0, z=-3},
|
||||
maxvel = {x=3, y=5, z=3},
|
||||
minacc = {x=0, y=-10, z=0},
|
||||
maxacc = {x=0, y=-10, z=0},
|
||||
minexptime = 0.8,
|
||||
maxexptime = 2.0,
|
||||
minsize = 2,
|
||||
maxsize = 6,
|
||||
texture = texture,
|
||||
collisiondetection = true,
|
||||
})
|
||||
end
|
||||
|
||||
local function burn(pos)
|
||||
|
BIN
textures/tnt_blast.png
Normal file
BIN
textures/tnt_blast.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 855 B |
Loading…
Reference in New Issue
Block a user