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", wield_image = "xdecor_baricade.png",
tiles = {"blank.png","xdecor_baricade.png"}, tiles = {"blank.png","xdecor_baricade.png"},
use_texture_alpha = "clip", 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({ sounds = lzr_sounds.node_sound_wood_defaults({
dug = {name="lzr_laser_barricade_break", gain=1.0}, 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({ sounds = lzr_sounds.node_sound_wood_defaults({
dug = {name="lzr_laser_barricade_break", gain=1.0}, 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) on_timer = function(pos)
-- spawn a few particles for the removed node -- spawn a few particles for the removed node
minetest.add_particlespawner({ minetest.add_particlespawner({
@ -497,12 +502,12 @@ minetest.register_node("lzr_laser:barricade_on", {
time = 0.001, time = 0.001,
minpos = vector.subtract(pos, vector.new(0.5, 0.5, 0.5)), minpos = vector.subtract(pos, vector.new(0.5, 0.5, 0.5)),
maxpos = vector.add(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), maxvel = vector.new(0.5, 0.2, 0.5),
minacc = vector.new(0, -movement_gravity, 0), minacc = vector.new(0, -movement_gravity, 0),
maxacc = vector.new(0, -movement_gravity, 0), maxacc = vector.new(0, -movement_gravity, 0),
minsize = 0.1, minsize = 1.5,
maxsize = 0.5, maxsize = 1.5,
node = {name="lzr_laser:barricade"}, node = {name="lzr_laser:barricade"},
}) })
-- Play randomly-pitched break sound -- Play randomly-pitched break sound
@ -511,6 +516,26 @@ minetest.register_node("lzr_laser:barricade_on", {
-- remove node -- remove node
minetest.remove_node(pos) minetest.remove_node(pos)
full_update() 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, end,
drop = "", drop = "",
on_place = element_on_place, on_place = element_on_place,

View File

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