From f01a0051c63bddae45d1b0ae7289a153a10c5f69 Mon Sep 17 00:00:00 2001 From: kaadmy Date: Fri, 2 Sep 2016 15:52:00 -0700 Subject: [PATCH] added more ambient sound control --- minetest.conf | 7 ++-- mods/ambiance/init.lua | 74 ++++++++++++++++++++++-------------------- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/minetest.conf b/minetest.conf index c30dfe5..c9af71f 100644 --- a/minetest.conf +++ b/minetest.conf @@ -75,8 +75,11 @@ headbars_scale = 1 # private messages pm_enable_saving = true -# ambience noises -flowing_water_sounds = true +# ambience noises (uncomment the lines below to disable specific ambient sounds) +ambiance_volume = 1.0 +#ambiance_disable_birds = true +#ambiance_disable_crickets = true +#ambiance_disable_flowing_water = true # server(user stuff) max_users = 16 diff --git a/mods/ambiance/init.lua b/mods/ambiance/init.lua index 15599ec..334465f 100644 --- a/mods/ambiance/init.lua +++ b/mods/ambiance/init.lua @@ -72,44 +72,46 @@ local function step(dtime) local name = player:get_player_name() for soundname, sound in pairs(ambiance.sounds) do - if lastsound[name][soundname] then - lastsound[name][soundname] = lastsound[name][soundname] + dtime - else - lastsound[name][soundname] = 0 - end - - if lastsound[name][soundname] > sound.length then - local sourcepos = ambient_node_near(sound, pos) - - if sound.can_play and sourcepos ~= nil and (not sound.can_play(sourcepos)) then - sourcepos = nil - end - - if sourcepos == nil then - if soundspec[name][soundname] then - minetest.sound_stop(soundspec[name][soundname]) - - soundspec[name][soundname] = nil - lastsound[name][soundname] = 0 - end + if not minetest.setting_getbool("ambiance_disable_" .. soundname) then + if lastsound[name][soundname] then + lastsound[name][soundname] = lastsound[name][soundname] + dtime else - local ok = true - for _, p in pairs(player_positions) do - if (p.x * pos.x) + (p.y * pos.y) + (p.z * pos.z) < sound.dist * sound.dist then - ok = false - end - end + lastsound[name][soundname] = 0 + end - if ok then - soundspec[name][soundname] = minetest.sound_play( - sound.file, - { - pos = sourcepos, - max_hear_distance = sound.dist, - gain = ambiance_volume, - }) - - lastsound[name][soundname] = 0 + if lastsound[name][soundname] > sound.length then + local sourcepos = ambient_node_near(sound, pos) + + if sound.can_play and sourcepos ~= nil and (not sound.can_play(sourcepos)) then + sourcepos = nil + end + + if sourcepos == nil then + if soundspec[name][soundname] then + minetest.sound_stop(soundspec[name][soundname]) + + soundspec[name][soundname] = nil + lastsound[name][soundname] = 0 + end + else + local ok = true + for _, p in pairs(player_positions) do + if (p.x * pos.x) + (p.y * pos.y) + (p.z * pos.z) < sound.dist * sound.dist then + ok = false + end + end + + if ok then + soundspec[name][soundname] = minetest.sound_play( + sound.file, + { + pos = sourcepos, + max_hear_distance = sound.dist, + gain = ambiance_volume, + }) + + lastsound[name][soundname] = 0 + end end end end