From aa2475dfd61751c92b1b9ea88a5b2ee36730e10e Mon Sep 17 00:00:00 2001 From: stiffly Date: Sun, 13 Mar 2016 15:36:56 +0100 Subject: [PATCH] Stops bgm when the game is reset. --- include/Engine/Sound/SoundManager.h | 3 +++ src/Engine/Sound/SoundManager.cpp | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/Engine/Sound/SoundManager.h b/include/Engine/Sound/SoundManager.h index 9b0e9710..869a476b 100644 --- a/include/Engine/Sound/SoundManager.h +++ b/include/Engine/Sound/SoundManager.h @@ -31,6 +31,7 @@ #include "../Engine/Core/EComponentAttached.h" #include "../Core/EPlayerSpawned.h" #include "../Engine/Network/EPlayerDisconnected.h" +#include "../Game/Events/EReset.h" typedef std::pair> QueuedBuffers; @@ -142,6 +143,8 @@ private: bool OnChangeBGM(const Events::ChangeBGM &e); EventRelay m_EplayerDisconnected; bool OnPlayerDisconnected(const Events::PlayerDisconnected& e); + EventRelay m_EReset; + bool OnReset(const Events::Reset& e); }; diff --git a/src/Engine/Sound/SoundManager.cpp b/src/Engine/Sound/SoundManager.cpp index 2c238d38..a5a6cc9b 100644 --- a/src/Engine/Sound/SoundManager.cpp +++ b/src/Engine/Sound/SoundManager.cpp @@ -31,6 +31,7 @@ SoundManager::SoundManager(World* world, EventBroker* eventBroker) EVENT_SUBSCRIBE_MEMBER(m_EPlayQueueOnEntity, &SoundManager::OnPlayQueueOnEntity); EVENT_SUBSCRIBE_MEMBER(m_EChangeBGM, &SoundManager::OnChangeBGM); EVENT_SUBSCRIBE_MEMBER(m_EplayerDisconnected, &SoundManager::OnPlayerDisconnected); + EVENT_SUBSCRIBE_MEMBER(m_EReset, &SoundManager::OnReset); Events::ChangeBGM e; e.FilePath = "Audio/bgm/MenuMusic.wav"; @@ -422,6 +423,23 @@ bool SoundManager::OnPlayerDisconnected(const Events::PlayerDisconnected& e) return true; } + +bool SoundManager::OnReset(const Events::Reset& e) +{ + // The game was reset, stop playing the background music (drums) + if (m_CurrentBGMCombo != nullptr) { + if (getSourceState(m_CurrentBGMCombo->ALsource) == AL_PLAYING) { + stopSound(m_CurrentBGMCombo); + } + } + if (m_CurrentBGM != nullptr) { + if (getSourceState(m_CurrentBGM->ALsource) == AL_PLAYING) { + stopSound(m_CurrentBGM); + } + } + return true; +} + ALenum SoundManager::getSourceState(ALuint source) { ALenum state;