From 4a07b0607f0752a7b6906cfbade9409ad6243cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20=C3=85str=C3=B6m?= Date: Tue, 26 Jan 2021 16:02:56 +0100 Subject: [PATCH] Improve API of mcl_explosions.explode Replace the 'no_sound' and 'no_particle' options in the 'info' parameter with 'sound' and 'particles'. But also has backwards compatability for the old parameter names. --- mods/CORE/mcl_explosions/init.lua | 33 +++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua index 723ebd24..24e8d778 100644 --- a/mods/CORE/mcl_explosions/init.lua +++ b/mods/CORE/mcl_explosions/init.lua @@ -384,16 +384,20 @@ end -- Parameters: -- pos - The position where the explosion originates from -- strength - The blast strength of the explosion (a TNT explosion uses 4) --- info - Table containing information about explosion. +-- info - Table containing information about explosion -- puncher - object that is reported as source of punches/damage (optional) -- -- Values in info: -- drop_chance - If specified becomes the drop chance of all nodes in the --- explosion (defaults to 1.0 / strength) --- no_sound - If true then the explosion will not play a sound --- no_particle - If true then the explosion will not create particles +-- explosion (default: 1.0 / strength) +-- sound - If true, the explosion will play a sound (default: true) +-- particles - If true, the explosion will create particles (default: true) -- fire - If true, 1/3 nodes become fire (default: false) function mcl_explosions.explode(pos, strength, info, puncher) + if info == nil then + info = {} + end + -- The maximum blast radius (in the air) local radius = math.ceil(1.3 * strength / (0.3 * 0.75) * 0.3) @@ -402,13 +406,26 @@ function mcl_explosions.explode(pos, strength, info, puncher) end local shape = sphere_shapes[radius] - local creative_enabled = minetest.is_creative_enabled("") - trace_explode(pos, strength, shape, radius, (info and info.drop_chance) or 1 / strength, info.fire, puncher, creative_enabled) + local drop_chance = info.drop_change ~= nil and info.drop_change or 1 / strength + local particles = info.particles ~= nil and info.particles or true + local sound = info.sound ~= nil and info.sound or true + local fire = info.fire ~= nil and info.fire or false - if not (info and info.no_particle) then + -- For backwards compatability + if info.no_particle then + particles = false + end + if info.no_sound then + sound = false + end + + local creative_enabled = minetest.is_creative_enabled("") + trace_explode(pos, strength, shape, radius, drop_chance, fire, puncher, creative_enabled) + + if particles then add_particles(pos, radius) end - if not (info and info.no_sound) then + if sound then minetest.sound_play("tnt_explode", { pos = pos, gain = 1.0, max_hear_distance = strength * 16