added more ambient sound control
This commit is contained in:
parent
b2a18e619c
commit
f01a0051c6
|
@ -75,8 +75,11 @@ headbars_scale = 1
|
||||||
# private messages
|
# private messages
|
||||||
pm_enable_saving = true
|
pm_enable_saving = true
|
||||||
|
|
||||||
# ambience noises
|
# ambience noises (uncomment the lines below to disable specific ambient sounds)
|
||||||
flowing_water_sounds = true
|
ambiance_volume = 1.0
|
||||||
|
#ambiance_disable_birds = true
|
||||||
|
#ambiance_disable_crickets = true
|
||||||
|
#ambiance_disable_flowing_water = true
|
||||||
|
|
||||||
# server(user stuff)
|
# server(user stuff)
|
||||||
max_users = 16
|
max_users = 16
|
||||||
|
|
|
@ -72,44 +72,46 @@ local function step(dtime)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
|
|
||||||
for soundname, sound in pairs(ambiance.sounds) do
|
for soundname, sound in pairs(ambiance.sounds) do
|
||||||
if lastsound[name][soundname] then
|
if not minetest.setting_getbool("ambiance_disable_" .. soundname) then
|
||||||
lastsound[name][soundname] = lastsound[name][soundname] + dtime
|
if lastsound[name][soundname] then
|
||||||
else
|
lastsound[name][soundname] = lastsound[name][soundname] + dtime
|
||||||
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
|
|
||||||
else
|
else
|
||||||
local ok = true
|
lastsound[name][soundname] = 0
|
||||||
for _, p in pairs(player_positions) do
|
end
|
||||||
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
|
if lastsound[name][soundname] > sound.length then
|
||||||
soundspec[name][soundname] = minetest.sound_play(
|
local sourcepos = ambient_node_near(sound, pos)
|
||||||
sound.file,
|
|
||||||
{
|
if sound.can_play and sourcepos ~= nil and (not sound.can_play(sourcepos)) then
|
||||||
pos = sourcepos,
|
sourcepos = nil
|
||||||
max_hear_distance = sound.dist,
|
end
|
||||||
gain = ambiance_volume,
|
|
||||||
})
|
if sourcepos == nil then
|
||||||
|
if soundspec[name][soundname] then
|
||||||
lastsound[name][soundname] = 0
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue