diff --git a/mods/lzr_laser/blocks.lua b/mods/lzr_laser/blocks.lua index 7784175..0a82ee7 100644 --- a/mods/lzr_laser/blocks.lua +++ b/mods/lzr_laser/blocks.lua @@ -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, diff --git a/mods/lzr_laser/physics.lua b/mods/lzr_laser/physics.lua index 35daef2..d6c5eb6 100644 --- a/mods/lzr_laser/physics.lua +++ b/mods/lzr_laser/physics.lua @@ -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 = {}