diff --git a/Generals/Code/GameEngine/Include/GameLogic/GameLogic.h b/Generals/Code/GameEngine/Include/GameLogic/GameLogic.h index 5a138b5c19..4ab0dbb42d 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/GameLogic.h +++ b/Generals/Code/GameEngine/Include/GameLogic/GameLogic.h @@ -206,7 +206,7 @@ class GameLogic : public SubsystemInterface, public Snapshot void setGamePausedInFrame( UnsignedInt frame, Bool disableLogicTimeScale ); UnsignedInt getGamePauseFrame() const { return m_pauseFrame; } - void setGamePaused( Bool paused, Bool pauseMusic = TRUE, Bool pauseInput = TRUE ); + void setGamePaused( Bool paused, Bool pauseMusic = TRUE, Bool pauseInput = TRUE, Bool allowResumeAudio = TRUE ); Bool isGamePaused( void ); Bool getInputEnabledMemory( void ) const { return m_inputEnabledMemory; } @@ -255,8 +255,8 @@ class GameLogic : public SubsystemInterface, public Snapshot void updateDisplayBusyState(); void pauseGameLogic(Bool paused); - void pauseGameSound(Bool paused); - void pauseGameMusic(Bool paused); + void pauseGameSound(Bool paused, Bool allowResumeAudio); + void pauseGameMusic(Bool paused, Bool allowResumeAudio); void pauseGameInput(Bool paused); void pushSleepyUpdate(UpdateModulePtr u); diff --git a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 1b2fa9b864..f0889db784 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -387,14 +387,11 @@ void GameLogic::reset( void ) m_objHash.reserve(OBJ_HASH_SIZE); #endif - m_pauseFrame = 0; - m_gamePaused = FALSE; - m_pauseSound = FALSE; - m_pauseMusic = FALSE; - m_pauseInput = FALSE; + m_logicTimeScaleEnabledMemory = FALSE; m_inputEnabledMemory = TRUE; m_mouseVisibleMemory = TRUE; - m_logicTimeScaleEnabledMemory = FALSE; + setGamePaused(FALSE, FALSE, FALSE, FALSE); + m_pauseFrame = 0; setFPMode(); @@ -3690,7 +3687,7 @@ void GameLogic::setGamePausedInFrame( UnsignedInt frame, Bool disableLogicTimeSc // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::setGamePaused( Bool paused, Bool pauseMusic, Bool pauseInput ) +void GameLogic::setGamePaused( Bool paused, Bool pauseMusic, Bool pauseInput, Bool allowResumeAudio ) { // We need to ignore an unpause called when we are unpaused or else: // Mouse is hidden for some reason (script or something) @@ -3706,8 +3703,8 @@ void GameLogic::setGamePaused( Bool paused, Bool pauseMusic, Bool pauseInput ) // Set mouse the way it "was" <--- Was counting on right answer being set in Pause. pauseGameLogic(paused); - pauseGameSound(paused); - pauseGameMusic(paused && pauseMusic); + pauseGameSound(paused, allowResumeAudio); + pauseGameMusic(paused && pauseMusic, allowResumeAudio); pauseGameInput(paused && pauseInput); updateDisplayBusyState(); @@ -3728,7 +3725,7 @@ void GameLogic::pauseGameLogic(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameSound(Bool paused) +void GameLogic::pauseGameSound(Bool paused, Bool allowResumeAudio) { if(m_pauseSound == paused) return; @@ -3747,7 +3744,7 @@ void GameLogic::pauseGameSound(Bool paused) drawable = drawable->getNextDrawable(); } } - else + else if (allowResumeAudio) { TheAudio->resumeAudio((AudioAffect)(AudioAffect_All & ~AudioAffect_Music)); @@ -3763,7 +3760,7 @@ void GameLogic::pauseGameSound(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameMusic(Bool paused) +void GameLogic::pauseGameMusic(Bool paused, Bool allowResumeAudio) { if(m_pauseMusic == paused) return; @@ -3774,7 +3771,7 @@ void GameLogic::pauseGameMusic(Bool paused) { TheAudio->pauseAudio(AudioAffect_Music); } - else + else if (allowResumeAudio) { TheAudio->resumeAudio(AudioAffect_Music); } diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/GameLogic.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/GameLogic.h index c4f7e13073..64bf800d3f 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/GameLogic.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/GameLogic.h @@ -221,7 +221,7 @@ class GameLogic : public SubsystemInterface, public Snapshot void setGamePausedInFrame( UnsignedInt frame, Bool disableLogicTimeScale ); UnsignedInt getGamePauseFrame() const { return m_pauseFrame; } - void setGamePaused( Bool paused, Bool pauseMusic = TRUE, Bool pauseInput = TRUE ); + void setGamePaused( Bool paused, Bool pauseMusic = TRUE, Bool pauseInput = TRUE, Bool allowResumeAudio = TRUE); Bool isGamePaused( void ); Bool getInputEnabledMemory( void ) const { return m_inputEnabledMemory; } @@ -273,8 +273,8 @@ class GameLogic : public SubsystemInterface, public Snapshot void updateDisplayBusyState(); void pauseGameLogic(Bool paused); - void pauseGameSound(Bool paused); - void pauseGameMusic(Bool paused); + void pauseGameSound(Bool paused, Bool allowResumeAudio); + void pauseGameMusic(Bool paused, Bool allowResumeAudio); void pauseGameInput(Bool paused); void pushSleepyUpdate(UpdateModulePtr u); diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 67a23d92c0..03cc9f6d59 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -399,14 +399,11 @@ void GameLogic::reset( void ) m_objVector.clear(); m_objVector.resize(OBJ_HASH_SIZE, NULL); - m_pauseFrame = 0; - m_gamePaused = FALSE; - m_pauseSound = FALSE; - m_pauseMusic = FALSE; - m_pauseInput = FALSE; + m_logicTimeScaleEnabledMemory = FALSE; m_inputEnabledMemory = TRUE; m_mouseVisibleMemory = TRUE; - m_logicTimeScaleEnabledMemory = FALSE; + setGamePaused(FALSE, FALSE, FALSE, FALSE); + m_pauseFrame = 0; setFPMode(); @@ -4241,7 +4238,7 @@ void GameLogic::setGamePausedInFrame( UnsignedInt frame, Bool disableLogicTimeSc // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::setGamePaused( Bool paused, Bool pauseMusic, Bool pauseInput ) +void GameLogic::setGamePaused( Bool paused, Bool pauseMusic, Bool pauseInput, Bool allowResumeAudio) { // We need to ignore an unpause called when we are unpaused or else: // Mouse is hidden for some reason (script or something) @@ -4257,8 +4254,8 @@ void GameLogic::setGamePaused( Bool paused, Bool pauseMusic, Bool pauseInput ) // Set mouse the way it "was" <--- Was counting on right answer being set in Pause. pauseGameLogic(paused); - pauseGameSound(paused); - pauseGameMusic(paused && pauseMusic); + pauseGameSound(paused, allowResumeAudio); + pauseGameMusic(paused && pauseMusic, allowResumeAudio); pauseGameInput(paused && pauseInput); updateDisplayBusyState(); @@ -4279,7 +4276,7 @@ void GameLogic::pauseGameLogic(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameSound(Bool paused) +void GameLogic::pauseGameSound(Bool paused, Bool allowResumeAudio) { if(m_pauseSound == paused) return; @@ -4304,7 +4301,7 @@ void GameLogic::pauseGameSound(Bool paused) } #endif } - else + else if (allowResumeAudio) { TheAudio->resumeAudio((AudioAffect)(AudioAffect_All & ~AudioAffect_Music)); @@ -4322,7 +4319,7 @@ void GameLogic::pauseGameSound(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameMusic(Bool paused) +void GameLogic::pauseGameMusic(Bool paused, Bool allowResumeAudio) { if(m_pauseMusic == paused) return; @@ -4333,7 +4330,7 @@ void GameLogic::pauseGameMusic(Bool paused) { TheAudio->pauseAudio(AudioAffect_Music); } - else + else if (allowResumeAudio) { TheAudio->resumeAudio(AudioAffect_Music); }