1
0
forked from 0ad/0ad

fades music in and out when switching to background, also honors g_PauseOnFocusLoss

This was SVN commit r13352.
This commit is contained in:
stwf 2013-04-10 11:51:42 +00:00
parent 19ce9657bc
commit b301d5c84d
5 changed files with 32 additions and 11 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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)
{

View File

@ -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();

View File

@ -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;