lazarr/mods/lzr_ambience/init.lua

72 lines
2.3 KiB
Lua
Raw Normal View History

2022-02-15 07:05:38 -08:00
lzr_ambience = {}
local S = minetest.get_translator("lzr_ambience")
local ambiences = {}
local current_singleplayer_ambience = nil -- ambience sound handler. nil if no current ambience
local current_singleplayer_ambience_id = nil -- ambience type ID (e.g. "ocean", "temple"). nil if uninitialized
2022-03-15 16:54:03 -07:00
local ambience_active = true
2022-02-15 07:05:38 -08:00
2022-03-06 07:38:57 -08:00
lzr_ambience.register_ambience = function(id, soundname, gain)
2022-02-15 07:05:38 -08:00
ambiences[id] = { soundname = soundname, gain = gain }
end
function lzr_ambience.stop_ambience()
if current_singleplayer_ambience then
minetest.sound_stop(current_singleplayer_ambience)
current_singleplayer_ambience = nil
end
end
function lzr_ambience.set_ambience(id, no_play)
2022-02-15 07:05:38 -08:00
local ambience = ambiences[id]
if not ambience then
minetest.log("error", "[lzr_ambience] set_ambience called with invalid ambience ID ("..tostring(id)..")")
return false
end
2022-03-06 07:24:20 -08:00
minetest.log("info", "[lzr_ambience] Ambience set to: "..tostring(id))
-- No-op if we already have this ambience active
if current_singleplayer_ambience_id == id and current_singleplayer_ambience then
2022-03-06 07:24:20 -08:00
return true
end
2022-02-15 07:05:38 -08:00
lzr_ambience.stop_ambience()
2022-03-15 16:54:03 -07:00
if id ~= "none" and not no_play and ambience_active then
2022-03-06 07:38:57 -08:00
current_singleplayer_ambience = minetest.sound_play({name=ambience.soundname}, {gain = ambience.gain, to_player="singleplayer", loop=true})
end
2022-02-15 07:05:38 -08:00
current_singleplayer_ambience_id = id
return true
end
2022-03-06 07:38:57 -08:00
lzr_ambience.register_ambience("ocean", "lzr_ambience_ocean", 0.08)
lzr_ambience.register_ambience("temple", "lzr_ambience_temple", 1.0)
-- Special ambience that is completely silent
lzr_ambience.register_ambience("none")
2022-02-15 07:05:38 -08:00
local setting = minetest.settings:get_bool("lzr_ambience_start_with_ambience", true)
2022-02-15 07:05:38 -08:00
2021-12-21 15:35:31 -08:00
minetest.register_on_joinplayer(function(player)
2022-02-15 07:05:38 -08:00
if setting then
2022-03-15 16:54:03 -07:00
ambience_active = true
2022-02-15 07:05:38 -08:00
lzr_ambience.set_ambience("ocean")
else
2022-03-15 16:54:03 -07:00
ambience_active = false
lzr_ambience.set_ambience("ocean", true)
2022-02-15 07:05:38 -08:00
end
2021-12-21 15:35:31 -08:00
end)
2022-02-15 07:05:38 -08:00
minetest.register_chatcommand("ambience", {
description = S("Toggle ambience sounds"),
func = function()
if current_singleplayer_ambience then
2022-03-15 16:54:03 -07:00
ambience_active = false
2022-02-15 07:05:38 -08:00
lzr_ambience.stop_ambience()
return true, S("Ambience sounds disabled.")
else
2022-03-15 16:54:03 -07:00
ambience_active = true
2022-02-15 07:05:38 -08:00
lzr_ambience.set_ambience(current_singleplayer_ambience_id)
return true, S("Ambience sounds enabled.")
end
end,
})