diff --git a/Generals/Code/GameEngine/Include/GameLogic/GameLogic.h b/Generals/Code/GameEngine/Include/GameLogic/GameLogic.h index 0993841d0a..4611fc1883 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 03b6cfda0f..443dab9dd3 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -401,14 +401,11 @@ void GameLogic::init( void ) //ThePlayerList->setLocalPlayer(0); m_CRC = 0; - 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; for(Int i = 0; i < MAX_SLOTS; ++i) { @@ -444,14 +441,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(); @@ -3733,7 +3727,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) @@ -3749,8 +3743,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(); @@ -3771,7 +3765,7 @@ void GameLogic::pauseGameLogic(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameSound(Bool paused) +void GameLogic::pauseGameSound(Bool paused, Bool allowResumeAudio) { if(m_pauseSound == paused) return; @@ -3790,7 +3784,7 @@ void GameLogic::pauseGameSound(Bool paused) drawable = drawable->getNextDrawable(); } } - else + else if (allowResumeAudio) { TheAudio->resumeAudio((AudioAffect)(AudioAffect_All & ~AudioAffect_Music)); @@ -3806,7 +3800,7 @@ void GameLogic::pauseGameSound(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameMusic(Bool paused) +void GameLogic::pauseGameMusic(Bool paused, Bool allowResumeAudio) { if(m_pauseMusic == paused) return; @@ -3817,7 +3811,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 420142129b..aec82bc07a 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 a6001e2206..f75ad428b2 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -416,14 +416,11 @@ void GameLogic::init( void ) //ThePlayerList->setLocalPlayer(0); m_CRC = 0; - 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; for(Int i = 0; i < MAX_SLOTS; ++i) { @@ -457,14 +454,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(); @@ -4285,7 +4279,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) @@ -4301,8 +4295,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(); @@ -4323,7 +4317,7 @@ void GameLogic::pauseGameLogic(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameSound(Bool paused) +void GameLogic::pauseGameSound(Bool paused, Bool allowResumeAudio) { if(m_pauseSound == paused) return; @@ -4348,7 +4342,7 @@ void GameLogic::pauseGameSound(Bool paused) } #endif } - else + else if (allowResumeAudio) { TheAudio->resumeAudio((AudioAffect)(AudioAffect_All & ~AudioAffect_Music)); @@ -4366,7 +4360,7 @@ void GameLogic::pauseGameSound(Bool paused) // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ -void GameLogic::pauseGameMusic(Bool paused) +void GameLogic::pauseGameMusic(Bool paused, Bool allowResumeAudio) { if(m_pauseMusic == paused) return; @@ -4377,7 +4371,7 @@ void GameLogic::pauseGameMusic(Bool paused) { TheAudio->pauseAudio(AudioAffect_Music); } - else + else if (allowResumeAudio) { TheAudio->resumeAudio(AudioAffect_Music); }