Barricade burning propagates to neighbors

master
Wuzzy 2022-02-15 06:18:17 +01:00
parent 8bfa7e7e21
commit c33d4bfbbf
2 changed files with 34 additions and 7 deletions

View File

@ -454,7 +454,7 @@ minetest.register_node("lzr_laser:barricade", {
wield_image = "xdecor_baricade.png",
tiles = {"blank.png","xdecor_baricade.png"},
use_texture_alpha = "clip",
groups = { breakable = 1, laser_destroys = 2 },
groups = { breakable = 1, flammable = 1, laser_destroys = 2 },
sounds = lzr_sounds.node_sound_wood_defaults({
dug = {name="lzr_laser_barricade_break", gain=1.0},
}),
@ -490,6 +490,11 @@ minetest.register_node("lzr_laser:barricade_on", {
sounds = lzr_sounds.node_sound_wood_defaults({
dug = {name="lzr_laser_barricade_break", gain=1.0},
}),
on_construct = function(pos)
minetest.sound_play({name="lzr_laser_quickburn", gain=1.0}, {pos=pos}, true)
local timer = minetest.get_node_timer(pos)
timer:start(1)
end,
on_timer = function(pos)
-- spawn a few particles for the removed node
minetest.add_particlespawner({
@ -497,12 +502,12 @@ minetest.register_node("lzr_laser:barricade_on", {
time = 0.001,
minpos = vector.subtract(pos, vector.new(0.5, 0.5, 0.5)),
maxpos = vector.add(pos, vector.new(0.5, 0.5, 0.5)),
minvel = vector.new(-0.5, -0.5, -0.5),
minvel = vector.new(-0.5, -0.2, -0.5),
maxvel = vector.new(0.5, 0.2, 0.5),
minacc = vector.new(0, -movement_gravity, 0),
maxacc = vector.new(0, -movement_gravity, 0),
minsize = 0.1,
maxsize = 0.5,
minsize = 1.5,
maxsize = 1.5,
node = {name="lzr_laser:barricade"},
})
-- Play randomly-pitched break sound
@ -511,6 +516,26 @@ minetest.register_node("lzr_laser:barricade_on", {
-- remove node
minetest.remove_node(pos)
full_update()
-- propagate to neighbors
local posses = {
vector.new(-1,0,0),
vector.new(1,0,0),
vector.new(0,-1,0),
vector.new(0,1,0),
vector.new(0,0,-1),
vector.new(0,0,1),
}
for p=1, #posses do
local ppos = vector.add(pos, posses[p])
local node = minetest.get_node(ppos)
local def = minetest.registered_nodes[node.name]
if def and def._lzr_active then
if minetest.get_item_group(node.name, "flammable") > 0 then
minetest.set_node(ppos, {name=def._lzr_active})
end
end
end
end,
drop = "",
on_place = element_on_place,

View File

@ -274,9 +274,11 @@ function lzr_laser.full_laser_update(pos1, pos2)
vmanip:write_to_map()
for b=1, #burning_cache do
local timer = minetest.get_node_timer(burning_cache[b])
minetest.sound_play({name="lzr_laser_quickburn", gain=1.0}, {pos=burning_cache[b]}, true)
timer:start(1)
local node = minetest.get_node(burning_cache[b])
local def = minetest.registered_nodes[node.name]
if def and def.on_consruct then
def.on_construct(burning_cache[b])
end
end
burning_cache = {}