From 2d450b05f810af0fbb03e17a7233083674f8720b Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 23 Dec 2023 01:12:03 -0800 Subject: [PATCH] TuneManager: clear current song if music is disabled, so music can resume later --- src/music.cpp | 5 +++++ src/music.h | 5 +++++ src/music_manager.hpp | 2 ++ src/s_sound.c | 1 + 4 files changed, 13 insertions(+) diff --git a/src/music.cpp b/src/music.cpp index 00b200a21..95ee9f12c 100644 --- a/src/music.cpp +++ b/src/music.cpp @@ -183,6 +183,11 @@ void Music_Tick(void) g_tunes.tick(); } +void Music_Flip(void) +{ + g_tunes.flip(); +} + void Music_Play(const char* id) { Tune* tune = g_tunes.find(id); diff --git a/src/music.h b/src/music.h index a85b1913f..5b53b4ba1 100644 --- a/src/music.h +++ b/src/music.h @@ -144,6 +144,11 @@ void Music_Init(void); // Call this every tic to update the music. void Music_Tick(void); +// Flips the internal state so music is reloaded next tick. +// This is required when disabling music during runtime so +// the music plays again when re-enabled. +void Music_Flip(void); + #ifdef __cplusplus } // extern "C" diff --git a/src/music_manager.hpp b/src/music_manager.hpp index 38110d46c..c3e742e00 100644 --- a/src/music_manager.hpp +++ b/src/music_manager.hpp @@ -53,6 +53,8 @@ public: return res.first->second; } + void flip() { current_song_ = {}; } + void tick(); void pause_unpause() const; diff --git a/src/s_sound.c b/src/s_sound.c index 2757b913f..bee22e443 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -2515,6 +2515,7 @@ void GameDigiMusic_OnChange(void) { digital_disabled = true; I_UnloadSong(); + Music_Flip(); } }