From df190cbbd146ed91d6a146d672f0e4307f9f3841 Mon Sep 17 00:00:00 2001 From: stwf Date: Thu, 29 Aug 2013 13:20:55 +0000 Subject: [PATCH] fix issues with menu mode and playlist, harden code and clear out ambient noises at game end, fixes #2066 This was SVN commit r13784. --- binaries/data/mods/public/gui/common/music.js | 4 ++- source/ps/GameSetup/GameSetup.cpp | 2 ++ source/soundmanager/ISoundManager.h | 1 + source/soundmanager/SoundManager.cpp | 27 ++++++++++++------- source/soundmanager/SoundManager.h | 5 ++-- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/binaries/data/mods/public/gui/common/music.js b/binaries/data/mods/public/gui/common/music.js index 35971deb18..843f3aff11 100644 --- a/binaries/data/mods/public/gui/common/music.js +++ b/binaries/data/mods/public/gui/common/music.js @@ -157,7 +157,9 @@ Music.prototype.startPlayList = function(tracks, fadeInPeriod, isLooping) Music.prototype.switchMusic = function(track, fadeInPeriod, isLooping) { - Engine.PlayMusic(this.RELATIVE_MUSIC_PATH + track, isLooping); + Engine.ClearPlaylist(); + Engine.AddPlaylistItem( this.RELATIVE_MUSIC_PATH + track ); + Engine.StartPlaylist(isLooping); }; Music.prototype.isPlaying = function() diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp index d613a18d7a..d427b310cc 100644 --- a/source/ps/GameSetup/GameSetup.cpp +++ b/source/ps/GameSetup/GameSetup.cpp @@ -684,6 +684,8 @@ void EndGame() SAFE_DELETE(g_NetServer); SAFE_DELETE(g_NetClient); SAFE_DELETE(g_Game); + + ISoundManager::CloseGame(); } diff --git a/source/soundmanager/ISoundManager.h b/source/soundmanager/ISoundManager.h index f4fc86577d..2c033a967b 100644 --- a/source/soundmanager/ISoundManager.h +++ b/source/soundmanager/ISoundManager.h @@ -32,6 +32,7 @@ public: static void CreateSoundManager(); static void SetEnabled(bool doEnable); + static void CloseGame(); virtual void IdleTask() = 0; virtual void Pause(bool pauseIt) = 0; diff --git a/source/soundmanager/SoundManager.cpp b/source/soundmanager/SoundManager.cpp index 8c7a3c6884..9a3875c81c 100644 --- a/source/soundmanager/SoundManager.cpp +++ b/source/soundmanager/SoundManager.cpp @@ -222,6 +222,11 @@ void ISoundManager::SetEnabled(bool doEnable) ISoundManager::CreateSoundManager(); } } +void ISoundManager::CloseGame() +{ + if ( CSoundManager* aSndMgr = (CSoundManager*)g_SoundManager ) + aSndMgr->SetAmbientItem( NULL ); +} void CSoundManager::al_ReportError(ALenum err, const char* caller, int line) { @@ -578,17 +583,20 @@ void CSoundManager::IdleTask() { m_PlaylistGap = 0; PlayList::iterator it = find (m_PlayListItems->begin(), m_PlayListItems->end(), *(m_CurrentTune->GetName()) ); - ++it; + if ( it != m_PlayListItems->end() ) + { + ++it; - Path nextPath; - if ( it == m_PlayListItems->end() ) - nextPath = m_PlayListItems->at( 0 ); - else - nextPath = *it; + Path nextPath; + if ( it == m_PlayListItems->end() ) + nextPath = m_PlayListItems->at( 0 ); + else + nextPath = *it; - ISoundItem* aSnd = LoadItem( nextPath ); - if ( aSnd ) - SetMusicItem( aSnd ); + ISoundItem* aSnd = LoadItem( nextPath ); + if ( aSnd ) + SetMusicItem( aSnd ); + } } } } @@ -808,6 +816,7 @@ void CSoundManager::SetAmbientItem(ISoundItem* anItem) void ISoundManager::CreateSoundManager(){} void ISoundManager::SetEnabled(bool UNUSED(doEnable)){} +void ISoundManager::CloseGame(){} #endif // CONFIG2_AUDIO diff --git a/source/soundmanager/SoundManager.h b/source/soundmanager/SoundManager.h index 5ee52da210..8dfb7a86b3 100644 --- a/source/soundmanager/SoundManager.h +++ b/source/soundmanager/SoundManager.h @@ -109,7 +109,8 @@ public: static void ScriptingInit(); static void CreateSoundManager(); static void SetEnabled(bool doEnable); - + static void CloseGame(); + static void al_ReportError(ALenum err, const char* caller, int line); static void al_check(const char* caller, int line); @@ -146,12 +147,12 @@ public: void PauseMusic (bool pauseIt); void PauseAmbient (bool pauseIt); void PauseAction (bool pauseIt); + void SetAmbientItem(ISoundItem* anItem); protected: void InitListener(); Status AlcInit(); void SetMusicItem(ISoundItem* anItem); - void SetAmbientItem(ISoundItem* anItem); void SetMasterGain(float gain); void SetMusicGain(float gain); void SetAmbientGain(float gain);