Prohibit Channel Configuration changes during gameplay (#1432)

This commit is contained in:
Hyper 2025-03-24 18:26:21 +00:00 committed by GitHub
parent 2322b75e54
commit b76a44923d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 4 additions and 21 deletions

View file

@ -10,7 +10,6 @@
void XAudioInitializeSystem(); void XAudioInitializeSystem();
void XAudioRegisterClient(PPCFunc* callback, uint32_t param); void XAudioRegisterClient(PPCFunc* callback, uint32_t param);
void XAudioSubmitFrame(void* samples); void XAudioSubmitFrame(void* samples);
void XAudioConfigValueChangedCallback(class IConfigDef* configDef);
uint32_t XAudioRegisterRenderDriverClient(be<uint32_t>* callback, be<uint32_t>* driver); uint32_t XAudioRegisterRenderDriverClient(be<uint32_t>* callback, be<uint32_t>* driver);
uint32_t XAudioUnregisterRenderDriverClient(uint32_t driver); uint32_t XAudioUnregisterRenderDriverClient(uint32_t driver);

View file

@ -150,18 +150,3 @@ void XAudioSubmitFrame(void* samples)
SDL_QueueAudio(g_audioDevice, &audioFrames, sizeof(audioFrames)); SDL_QueueAudio(g_audioDevice, &audioFrames, sizeof(audioFrames));
} }
} }
void XAudioConfigValueChangedCallback(IConfigDef* configDef)
{
if (configDef == &Config::ChannelConfiguration)
{
if (g_audioThread->joinable())
{
g_audioThreadShouldExit = true;
g_audioThread->join();
}
CreateAudioDevice();
CreateAudioThread();
}
}

View file

@ -99,6 +99,7 @@ static bool g_isEnterKeyBuffered = false;
static bool g_canReset = false; static bool g_canReset = false;
static bool g_isLanguageOptionChanged = false; static bool g_isLanguageOptionChanged = false;
static bool g_titleAnimBegin = true; static bool g_titleAnimBegin = true;
static EChannelConfiguration g_currentChannelConfig;
static double g_appearTime = 0.0; static double g_appearTime = 0.0;
@ -803,7 +804,6 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* conf
config->Callback(config); config->Callback(config);
VideoConfigValueChangedCallback(config); VideoConfigValueChangedCallback(config);
XAudioConfigValueChangedCallback(config);
Game_PlaySound("sys_worldmap_finaldecide"); Game_PlaySound("sys_worldmap_finaldecide");
} }
@ -836,7 +836,6 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* conf
if (config->Value != s_oldValue) if (config->Value != s_oldValue)
{ {
VideoConfigValueChangedCallback(config); VideoConfigValueChangedCallback(config);
XAudioConfigValueChangedCallback(config);
if (config->ApplyCallback) if (config->ApplyCallback)
config->ApplyCallback(config); config->ApplyCallback(config);
@ -865,7 +864,6 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* conf
config->MakeDefault(); config->MakeDefault();
VideoConfigValueChangedCallback(config); VideoConfigValueChangedCallback(config);
XAudioConfigValueChangedCallback(config);
if (config->Callback) if (config->Callback)
config->Callback(config); config->Callback(config);
@ -1250,7 +1248,7 @@ static void DrawConfigOptions()
DrawConfigOption(rowCount++, yOffset, &Config::MasterVolume, true); DrawConfigOption(rowCount++, yOffset, &Config::MasterVolume, true);
DrawConfigOption(rowCount++, yOffset, &Config::MusicVolume, true); DrawConfigOption(rowCount++, yOffset, &Config::MusicVolume, true);
DrawConfigOption(rowCount++, yOffset, &Config::EffectsVolume, true); DrawConfigOption(rowCount++, yOffset, &Config::EffectsVolume, true);
DrawConfigOption(rowCount++, yOffset, &Config::ChannelConfiguration, true); DrawConfigOption(rowCount++, yOffset, &Config::ChannelConfiguration, !OptionsMenu::s_isPause, cmnReason);
DrawConfigOption(rowCount++, yOffset, &Config::MusicAttenuation, AudioPatches::CanAttenuate(), &Localise("Options_Desc_OSNotSupported")); DrawConfigOption(rowCount++, yOffset, &Config::MusicAttenuation, AudioPatches::CanAttenuate(), &Localise("Options_Desc_OSNotSupported"));
DrawConfigOption(rowCount++, yOffset, &Config::BattleTheme, true); DrawConfigOption(rowCount++, yOffset, &Config::BattleTheme, true);
break; break;
@ -1791,7 +1789,7 @@ void OptionsMenu::Draw()
DrawFadeTransition(); DrawFadeTransition();
} }
s_isRestartRequired = Config::Language != App::s_language; s_isRestartRequired = Config::Language != App::s_language || Config::ChannelConfiguration != g_currentChannelConfig;
} }
void OptionsMenu::Open(bool isPause, SWA::EMenuType pauseMenuType) void OptionsMenu::Open(bool isPause, SWA::EMenuType pauseMenuType)
@ -1807,6 +1805,7 @@ void OptionsMenu::Open(bool isPause, SWA::EMenuType pauseMenuType)
g_categoryAnimMax = { 0.0f, 0.0f }; g_categoryAnimMax = { 0.0f, 0.0f };
g_selectedItem = nullptr; g_selectedItem = nullptr;
g_titleAnimBegin = true; g_titleAnimBegin = true;
g_currentChannelConfig = Config::ChannelConfiguration;
/* Store button state so we can track it later /* Store button state so we can track it later
and prevent the first item being selected. */ and prevent the first item being selected. */