mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-23 16:39:33 +01:00
Add leafdecay and anvil damage particles
This commit is contained in:
parent
80e54bf44d
commit
f91ae540c2
2 changed files with 105 additions and 0 deletions
|
@ -212,6 +212,46 @@ local function drop_anvil_items(pos, meta)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function damage_particles(pos, node)
|
||||||
|
minetest.add_particlespawner({
|
||||||
|
amount = 30,
|
||||||
|
time = 0.1,
|
||||||
|
minpos = vector.add(pos, {x=-0.5, y=-0.5, z=-0.5}),
|
||||||
|
maxpos = vector.add(pos, {x=0.5, y=-0.25, z=0.5}),
|
||||||
|
minvel = {x=-0.5, y=0.05, z=-0.5},
|
||||||
|
maxvel = {x=0.5, y=0.3, z=0.5},
|
||||||
|
minacc = {x=0, y=-9.81, z=0},
|
||||||
|
maxacc = {x=0, y=-9.81, z=0},
|
||||||
|
minexptime = 0.1,
|
||||||
|
maxexptime = 0.5,
|
||||||
|
minsize = 0.4,
|
||||||
|
maxsize = 0.5,
|
||||||
|
collisiondetection = true,
|
||||||
|
vertical = false,
|
||||||
|
node = node,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function destroy_particles(pos, node)
|
||||||
|
minetest.add_particlespawner({
|
||||||
|
amount = math.random(20, 30),
|
||||||
|
time = 0.1,
|
||||||
|
minpos = vector.add(pos, {x=-0.4, y=-0.4, z=-0.4}),
|
||||||
|
maxpos = vector.add(pos, {x=0.4, y=0.4, z=0.4}),
|
||||||
|
minvel = {x=-0.5, y=-0.1, z=-0.5},
|
||||||
|
maxvel = {x=0.5, y=0.2, z=0.5},
|
||||||
|
minacc = {x=0, y=-9.81, z=0},
|
||||||
|
maxacc = {x=0, y=-9.81, z=0},
|
||||||
|
minexptime = 0.2,
|
||||||
|
maxexptime = 0.65,
|
||||||
|
minsize = 0.8,
|
||||||
|
maxsize = 1.2,
|
||||||
|
collisiondetection = true,
|
||||||
|
vertical = false,
|
||||||
|
node = node,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
-- Damage the anvil by 1 level.
|
-- Damage the anvil by 1 level.
|
||||||
-- Destroy anvil when at highest damage level.
|
-- Destroy anvil when at highest damage level.
|
||||||
-- Returns true if anvil was destroyed.
|
-- Returns true if anvil was destroyed.
|
||||||
|
@ -220,10 +260,12 @@ local function damage_anvil(pos)
|
||||||
local new
|
local new
|
||||||
if node.name == "mcl_anvils:anvil" then
|
if node.name == "mcl_anvils:anvil" then
|
||||||
minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_1", param2=node.param2})
|
minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_1", param2=node.param2})
|
||||||
|
damage_particles(pos, node)
|
||||||
minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true)
|
minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true)
|
||||||
return false
|
return false
|
||||||
elseif node.name == "mcl_anvils:anvil_damage_1" then
|
elseif node.name == "mcl_anvils:anvil_damage_1" then
|
||||||
minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_2", param2=node.param2})
|
minetest.swap_node(pos, {name="mcl_anvils:anvil_damage_2", param2=node.param2})
|
||||||
|
damage_particles(pos, node)
|
||||||
minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true)
|
minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dig, {pos=pos, max_hear_distance=16}, true)
|
||||||
return false
|
return false
|
||||||
elseif node.name == "mcl_anvils:anvil_damage_2" then
|
elseif node.name == "mcl_anvils:anvil_damage_2" then
|
||||||
|
@ -232,6 +274,7 @@ local function damage_anvil(pos)
|
||||||
drop_anvil_items(pos, meta)
|
drop_anvil_items(pos, meta)
|
||||||
minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dug, {pos=pos, max_hear_distance=16}, true)
|
minetest.sound_play(mcl_sounds.node_sound_metal_defaults().dug, {pos=pos, max_hear_distance=16}, true)
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
|
destroy_particles(pos, node)
|
||||||
minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z})
|
minetest.check_single_for_falling({x=pos.x, y=pos.y+1, z=pos.z})
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
|
@ -1092,6 +1092,64 @@ minetest.register_abm({
|
||||||
action = grow_acacia,
|
action = grow_acacia,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local function leafdecay_particles(pos, node)
|
||||||
|
minetest.add_particlespawner({
|
||||||
|
amount = math.random(10, 20),
|
||||||
|
time = 0.1,
|
||||||
|
minpos = vector.add(pos, {x=-0.4, y=-0.4, z=-0.4}),
|
||||||
|
maxpos = vector.add(pos, {x=0.4, y=0.4, z=0.4}),
|
||||||
|
minvel = {x=-0.2, y=-0.2, z=-0.2},
|
||||||
|
maxvel = {x=0.2, y=0.1, z=0.2},
|
||||||
|
minacc = {x=0, y=-9.81, z=0},
|
||||||
|
maxacc = {x=0, y=-9.81, z=0},
|
||||||
|
minexptime = 0.1,
|
||||||
|
maxexptime = 0.5,
|
||||||
|
minsize = 0.5,
|
||||||
|
maxsize = 1.5,
|
||||||
|
collisiondetection = true,
|
||||||
|
vertical = false,
|
||||||
|
node = node,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function vinedecay_particles(pos, node)
|
||||||
|
local dir = minetest.wallmounted_to_dir(node.param2)
|
||||||
|
local relpos1, relpos2
|
||||||
|
if dir.x < 0 then
|
||||||
|
relpos1 = { x = -0.45, y = -0.4, z = -0.5 }
|
||||||
|
relpos2 = { x = -0.4, y = 0.4, z = 0.5 }
|
||||||
|
elseif dir.x > 0 then
|
||||||
|
relpos1 = { x = 0.4, y = -0.4, z = -0.5 }
|
||||||
|
relpos2 = { x = 0.45, y = 0.4, z = 0.5 }
|
||||||
|
elseif dir.z < 0 then
|
||||||
|
relpos1 = { x = -0.5, y = -0.4, z = -0.45 }
|
||||||
|
relpos2 = { x = 0.5, y = 0.4, z = -0.4 }
|
||||||
|
elseif dir.z > 0 then
|
||||||
|
relpos1 = { x = -0.5, y = -0.4, z = 0.4 }
|
||||||
|
relpos2 = { x = 0.5, y = 0.4, z = 0.45 }
|
||||||
|
else
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.add_particlespawner({
|
||||||
|
amount = math.random(8, 16),
|
||||||
|
time = 0.1,
|
||||||
|
minpos = vector.add(pos, relpos1),
|
||||||
|
maxpos = vector.add(pos, relpos2),
|
||||||
|
minvel = {x=-0.2, y=-0.2, z=-0.2},
|
||||||
|
maxvel = {x=0.2, y=0.1, z=0.2},
|
||||||
|
minacc = {x=0, y=-9.81, z=0},
|
||||||
|
maxacc = {x=0, y=-9.81, z=0},
|
||||||
|
minexptime = 0.1,
|
||||||
|
maxexptime = 0.5,
|
||||||
|
minsize = 0.5,
|
||||||
|
maxsize = 1.0,
|
||||||
|
collisiondetection = true,
|
||||||
|
vertical = false,
|
||||||
|
node = node,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
---------------------
|
---------------------
|
||||||
-- Vine generating --
|
-- Vine generating --
|
||||||
---------------------
|
---------------------
|
||||||
|
@ -1105,6 +1163,7 @@ minetest.register_abm({
|
||||||
-- First of all, check if we are even supported, otherwise, let's die!
|
-- First of all, check if we are even supported, otherwise, let's die!
|
||||||
if not mcl_core.check_vines_supported(pos, node) then
|
if not mcl_core.check_vines_supported(pos, node) then
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
|
vinedecay_particles(pos, node)
|
||||||
core.check_for_falling(pos)
|
core.check_for_falling(pos)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -1267,6 +1326,7 @@ minetest.register_abm({
|
||||||
end
|
end
|
||||||
-- Remove node
|
-- Remove node
|
||||||
minetest.remove_node(p0)
|
minetest.remove_node(p0)
|
||||||
|
leafdecay_particles(p0, n0)
|
||||||
core.check_for_falling(p0)
|
core.check_for_falling(p0)
|
||||||
|
|
||||||
-- Kill depending vines immediately to skip the vines decay delay
|
-- Kill depending vines immediately to skip the vines decay delay
|
||||||
|
@ -1283,6 +1343,7 @@ minetest.register_abm({
|
||||||
local surround_inverse = vector.multiply(surround[s], -1)
|
local surround_inverse = vector.multiply(surround[s], -1)
|
||||||
if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then
|
if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then
|
||||||
minetest.remove_node(spos)
|
minetest.remove_node(spos)
|
||||||
|
vinedecay_particles(spos, maybe_vine)
|
||||||
core.check_for_falling(spos)
|
core.check_for_falling(spos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1305,6 +1366,7 @@ minetest.register_abm({
|
||||||
if not mcl_core.check_vines_supported(p0, node) then
|
if not mcl_core.check_vines_supported(p0, node) then
|
||||||
-- Vines must die!
|
-- Vines must die!
|
||||||
minetest.remove_node(p0)
|
minetest.remove_node(p0)
|
||||||
|
vinedecay_particles(p0, node)
|
||||||
-- Just in case a falling node happens to float above vines
|
-- Just in case a falling node happens to float above vines
|
||||||
core.check_for_falling(p0)
|
core.check_for_falling(p0)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue