From 2e519f7fcc4519a83fea797a92c5f63d24d29d0a Mon Sep 17 00:00:00 2001 From: Daniel Stevens Date: Mon, 3 Mar 2025 09:44:05 -0700 Subject: [PATCH] Use `Delegate` for global `musicFinished` handler The way the `MixerSDL` constructor and destructor use this field, there can only ever reliably be a single listener. --- NAS2D/Mixer/MixerSDL.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/NAS2D/Mixer/MixerSDL.cpp b/NAS2D/Mixer/MixerSDL.cpp index d1280bb7..2cd3b54d 100644 --- a/NAS2D/Mixer/MixerSDL.cpp +++ b/NAS2D/Mixer/MixerSDL.cpp @@ -52,12 +52,15 @@ namespace constexpr int AudioBufferSizeMax = 4096; // Global so it can be accessed without capturing `this` - Signal<> musicFinished; + Delegate musicFinished; void onMusicFinished() { - musicFinished(); + if (musicFinished) + { + musicFinished(); + } } } @@ -119,7 +122,7 @@ MixerSDL::MixerSDL(const Options& options) soundVolume(options.sfxVolume); musicVolume(options.musicVolume); - musicFinished.connect({this, &MixerSDL::onMusicFinished}); + musicFinished = Delegate{this, &MixerSDL::onMusicFinished}; Mix_HookMusicFinished(&::onMusicFinished); } @@ -145,7 +148,7 @@ MixerSDL::~MixerSDL() Mix_CloseAudio(); Mix_HookMusicFinished(nullptr); - musicFinished.disconnect({this, &MixerSDL::onMusicFinished}); + musicFinished.clear(); SDL_QuitSubSystem(SDL_INIT_AUDIO); }