From 4ad280a820770014a4376891e06a830945d07205 Mon Sep 17 00:00:00 2001 From: Wally Hackenslacker Date: Sun, 12 Oct 2025 01:21:42 -0400 Subject: [PATCH] Added sound manager. --- src/gstates/menu.lua | 25 +++++++-------- src/gstates/menus/options.lua | 22 ++++++++------ src/sound/sndmngr.lua | 57 +++++++++++++++++++++++++++++++++++ src/utils/asstmngr.lua | 2 +- 4 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 src/sound/sndmngr.lua diff --git a/src/gstates/menu.lua b/src/gstates/menu.lua index fdf3e94..91c245c 100644 --- a/src/gstates/menu.lua +++ b/src/gstates/menu.lua @@ -2,17 +2,18 @@ -- Imports ------------------------------------------------------------------------------ -local love = require 'love' -local assets = require 'src.utils.asstmngr' -local make_class = require 'src.utils.classes' -local constants = require 'src.gstates.menus.const' -local GameState = require 'src.gstates.gstate' -local MainMenu = require 'src.gstates.menus.mainmenu' -local OptionsMenu = require 'src.gstates.menus.options' -local Fader = require 'src.graphics.fader' -local Cursor = require 'src.ui.cursor' -local Font = require 'src.ui.font' -local SoundEffect = require 'src.sound.sfx' +local love = require 'love' +local assets = require 'src.utils.asstmngr' +local sound_manager = require 'src.sound.sndmngr' +local make_class = require 'src.utils.classes' +local constants = require 'src.gstates.menus.const' +local GameState = require 'src.gstates.gstate' +local MainMenu = require 'src.gstates.menus.mainmenu' +local OptionsMenu = require 'src.gstates.menus.options' +local Fader = require 'src.graphics.fader' +local Cursor = require 'src.ui.cursor' +local Font = require 'src.ui.font' +local SoundEffect = require 'src.sound.sfx' ------------------------------------------------------------------------------ @@ -58,7 +59,7 @@ end function Menu:update(dt) - if not self.bgm:isPlaying() then self.bgm:play() end + if not self.bgm:isPlaying() then sound_manager:play_music(self.bgm) end if self.all_loaded then self.menus[self.current_menu]:update(dt) diff --git a/src/gstates/menus/options.lua b/src/gstates/menus/options.lua index 6f1e5e3..1b15a67 100644 --- a/src/gstates/menus/options.lua +++ b/src/gstates/menus/options.lua @@ -2,16 +2,17 @@ -- Imports ------------------------------------------------------------------------------ -local make_class = require 'src.utils.classes' -local constants = require 'src.gstates.menus.const' -local settings = require 'src.utils.settings' -local BaseMenu = require 'src.gstates.menus.base' -local Color = require 'src.utils.color' -local HBox = require 'src.ui.hbox' -local Label = require 'src.ui.label' -local TextButton = require 'src.ui.textbtn' -local Checkbox = require 'src.ui.chkbox' -local Bar = require 'src.ui.bar' +local make_class = require 'src.utils.classes' +local constants = require 'src.gstates.menus.const' +local settings = require 'src.utils.settings' +local sound_manager = require 'src.sound.sndmngr' +local BaseMenu = require 'src.gstates.menus.base' +local Color = require 'src.utils.color' +local HBox = require 'src.ui.hbox' +local Label = require 'src.ui.label' +local TextButton = require 'src.ui.textbtn' +local Checkbox = require 'src.ui.chkbox' +local Bar = require 'src.ui.bar' ------------------------------------------------------------------------------ @@ -67,6 +68,7 @@ function OptionsMenu:_init(parent, title_font, button_font) box:add(Bar( function(v) settings.musicvol = math.ceil(v) + sound_manager:update_volumes() end, function() return settings.musicvol diff --git a/src/sound/sndmngr.lua b/src/sound/sndmngr.lua new file mode 100644 index 0000000..1a9898a --- /dev/null +++ b/src/sound/sndmngr.lua @@ -0,0 +1,57 @@ +------------------------------------------------------------------------------ +-- Imports +------------------------------------------------------------------------------ + +local make_class = require 'src.utils.classes' +local settings = require 'src.utils.settings' + + +------------------------------------------------------------------------------ +-- Class definitions +------------------------------------------------------------------------------ + +local SoundManager = make_class() + + +------------------------------------------------------------------------------ +-- Class methods +------------------------------------------------------------------------------ + +function SoundManager:_init() + self.active_bgm = nil +end + + +function SoundManager:play_sound(sfx) + local vol = math.max(math.min(settings.soundvol / 100, 1.0), 0.0) + sfx:setVolume(vol) + sfx:play() +end + + +function SoundManager:play_music(bgm) + local vol = math.max(math.min(settings.musicvol / 100, 1.0), 0.0) + + if self.active_bgm ~= nil then + self.active_bgm:stop() + end + + self.active_bgm = bgm + self.active_bgm:setVolume(vol) + self.active_bgm:play() +end + + +function SoundManager:update_volumes() + if self.active_bgm ~= nil then + local vol = math.max(math.min(settings.musicvol / 100, 1.0), 0.0) + self.active_bgm:setVolume(vol) + end +end + + +------------------------------------------------------------------------------ +-- Module return +------------------------------------------------------------------------------ + +return SoundManager() diff --git a/src/utils/asstmngr.lua b/src/utils/asstmngr.lua index 28ed1d3..0b9e7bc 100644 --- a/src/utils/asstmngr.lua +++ b/src/utils/asstmngr.lua @@ -5,6 +5,7 @@ local love = require 'love' local make_class = require 'src.utils.classes' local Drawable = require 'src.graphics.drawable' +local Asset = require 'src.utils.asset' local Sprite = require 'src.graphics.sprite' local Font = require 'src.ui.font' @@ -13,7 +14,6 @@ local Font = require 'src.ui.font' ------------------------------------------------------------------------------ local AssetManager = make_class(Drawable) -local Asset = require 'src.utils.asset' ------------------------------------------------------------------------------