From b301d5c84d46ef4b3f5a1c3c8ee8569869fdadd3 Mon Sep 17 00:00:00 2001 From: stwf Date: Wed, 10 Apr 2013 11:51:42 +0000 Subject: [PATCH] fades music in and out when switching to background, also honors g_PauseOnFocusLoss This was SVN commit r13352. --- source/ps/Globals.cpp | 6 ++++-- source/soundmanager/SoundManager.cpp | 19 ++++++++++++------- source/soundmanager/items/CSoundBase.cpp | 13 ++++++++++++- source/soundmanager/items/CSoundBase.h | 4 +++- source/soundmanager/items/ISoundItem.h | 1 + 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/source/ps/Globals.cpp b/source/ps/Globals.cpp index 9fdbf0ea2e..329fd89528 100644 --- a/source/ps/Globals.cpp +++ b/source/ps/Globals.cpp @@ -19,6 +19,8 @@ #include "Globals.h" #include "lib/external_libraries/libsdl.h" +#include "network/NetClient.h" +#include "ps/GameSetup/Config.h" #include "soundmanager/SoundManager.h" bool g_app_minimized = false; @@ -70,12 +72,12 @@ InReaction GlobalsInputHandler(const SDL_Event_* ev) if(ev->ev.active.state & SDL_APPACTIVE) { g_app_minimized = (ev->ev.active.gain == 0); // negated - g_SoundManager->Pause( g_app_minimized ); + g_SoundManager->Pause( g_app_minimized && g_PauseOnFocusLoss && !g_NetClient ); } if(ev->ev.active.state & SDL_APPINPUTFOCUS) { g_app_has_focus = (ev->ev.active.gain != 0); - g_SoundManager->Pause( !g_app_has_focus ); + g_SoundManager->Pause( !g_app_has_focus && g_PauseOnFocusLoss && !g_NetClient ); } if(ev->ev.active.state & SDL_APPMOUSEFOCUS) g_mouse_active = (ev->ev.active.gain != 0); diff --git a/source/soundmanager/SoundManager.cpp b/source/soundmanager/SoundManager.cpp index ff23fb001f..6800fd4cf4 100644 --- a/source/soundmanager/SoundManager.cpp +++ b/source/soundmanager/SoundManager.cpp @@ -146,7 +146,7 @@ private: if (!GetEnabled()) continue; - int pauseTime = 1000; + int pauseTime = 500; if ( g_SoundManager->InDistress() ) pauseTime = 50; @@ -663,12 +663,17 @@ void CSoundManager::Pause(bool pauseIt) void CSoundManager::PauseMusic (bool pauseIt) { - if (m_CurrentTune && pauseIt) - m_CurrentTune->Pause(); - else if ( m_CurrentTune ) - m_CurrentTune->Resume(); - - m_MusicPaused = pauseIt; + if (m_CurrentTune && pauseIt && !m_MusicPaused ) + { + m_CurrentTune->FadeAndPause( 1.0 ); + } + else if ( m_CurrentTune && m_MusicPaused && !pauseIt ) + { + m_CurrentTune->SetGain(0); + m_CurrentTune->Resume(); + m_CurrentTune->FadeToIn( m_MusicGain, 1.0); + } + m_MusicPaused = pauseIt; } void CSoundManager::PauseAmbient (bool pauseIt) diff --git a/source/soundmanager/items/CSoundBase.cpp b/source/soundmanager/items/CSoundBase.cpp index 304d6ffd4c..ae7c44a60f 100644 --- a/source/soundmanager/items/CSoundBase.cpp +++ b/source/soundmanager/items/CSoundBase.cpp @@ -86,6 +86,7 @@ void CSoundBase::ResetFade() m_StartVolume = 0; m_EndVolume = 0; m_ShouldBePlaying = false; + m_PauseAfterFade = false; } @@ -238,7 +239,12 @@ bool CSoundBase::HandleFade() ALfloat curGain = ((m_EndVolume - m_StartVolume) * pctDone) + m_StartVolume; if (curGain == 0) - Stop(); + { + if ( m_PauseAfterFade ) + Pause(); + else + Stop(); + } else if (curGain == m_EndVolume) { if (m_ALSource != 0) @@ -306,6 +312,11 @@ void CSoundBase::PlayAndDelete() Play(); } +void CSoundBase::FadeAndPause(double fadeTime) +{ + m_PauseAfterFade = true; + FadeToIn(0, fadeTime); +} void CSoundBase::FadeAndDelete(double fadeTime) { diff --git a/source/soundmanager/items/CSoundBase.h b/source/soundmanager/items/CSoundBase.h index aac6d6cc84..d4c3df657d 100644 --- a/source/soundmanager/items/CSoundBase.h +++ b/source/soundmanager/items/CSoundBase.h @@ -38,7 +38,8 @@ protected: bool m_LastPlay; bool m_Looping; bool m_ShouldBePlaying; - + bool m_PauseAfterFade; + double m_StartFadeTime; double m_EndFadeTime; double m_TouchTime; @@ -87,6 +88,7 @@ public: virtual bool IsPlaying(); virtual void SetLocation(const CVector3D& position); virtual void FadeAndDelete(double fadeTime); + virtual void FadeAndPause(double fadeTime); virtual bool SoundStale(); void Pause(); diff --git a/source/soundmanager/items/ISoundItem.h b/source/soundmanager/items/ISoundItem.h index a246f46f32..6a68b2cb3c 100644 --- a/source/soundmanager/items/ISoundItem.h +++ b/source/soundmanager/items/ISoundItem.h @@ -57,6 +57,7 @@ public: virtual void StopAndDelete() = 0; virtual void FadeToIn(ALfloat newVolume, double fadeDuration) = 0; virtual void FadeAndDelete(double fadeTime) = 0; + virtual void FadeAndPause(double fadeTime) = 0; virtual void PlayLoop() = 0; virtual void SetCone(ALfloat innerCone, ALfloat outerCone, ALfloat coneGain) = 0;