Fixed pausing on ScreenGameplay by making GameState have a pause variable and not force the song position forward if the game is paused. Implementing a working pause button that the player can press is left as an exercise for the reader.

This commit is contained in:
Kyzentun Keeslala
2015-09-03 14:39:57 -06:00
parent 60b69ab6b6
commit f182a04780
4 changed files with 18 additions and 4 deletions
+2 -1
View File
@@ -331,6 +331,7 @@ void GameState::Reset()
m_SongOptions.Init();
m_paused= false;
ResetMusicStatistics();
ResetStageStatistics();
AdjustSync::ResetOriginalSyncData();
@@ -1251,7 +1252,7 @@ void GameState::UpdateSongPosition( float fPositionSeconds, const TimingData &ti
* driver, like so: 13.120953,13.130975,13.130975,13.130975,13.140998,...
* This causes visual stuttering of the arrows. To compensate, keep a
* RageTimer since the last change. */
if (fPositionSeconds == m_LastPositionSeconds)
if(fPositionSeconds == m_LastPositionSeconds && !m_paused)
fPositionSeconds += m_LastPositionTimer.Ago();
else
{
+3
View File
@@ -269,6 +269,8 @@ public:
static const float MUSIC_SECONDS_INVALID;
void ResetMusicStatistics(); // Call this when it's time to play a new song. Clears the values above.
void SetPaused(bool p) { m_paused= p; }
bool GetPaused() { return m_paused; }
void UpdateSongPosition( float fPositionSeconds, const TimingData &timing, const RageTimer &timestamp = RageZeroTimer );
float GetSongPercent( float beat ) const;
@@ -426,6 +428,7 @@ private:
// Timing position corrections
RageTimer m_LastPositionTimer;
float m_LastPositionSeconds;
bool m_paused;
GameState(const GameState& rhs);
GameState& operator=(const GameState& rhs);
+7 -2
View File
@@ -398,7 +398,7 @@ void ScreenGameplay::Init()
MEMCARDMAN->PauseMountingThread();
m_pSoundMusic = NULL;
m_bPaused = false;
set_paused_internal(false);
m_pCombinedLifeMeter = NULL;
@@ -1499,6 +1499,11 @@ void ScreenGameplay::StartPlayingSong( float fMinTimeToNotes, float fMinTimeToMu
}
}
void ScreenGameplay::set_paused_internal(bool p)
{
m_bPaused= p;
GAMESTATE->SetPaused(p);
}
void ScreenGameplay::PauseGame( bool bPause, GameController gc )
{
@@ -1514,7 +1519,7 @@ void ScreenGameplay::PauseGame( bool bPause, GameController gc )
ResetGiveUpTimers(false);
m_bPaused = bPause;
set_paused_internal(bPause);
m_PauseController = gc;
m_pSoundMusic->Pause( bPause );
+6 -1
View File
@@ -249,9 +249,14 @@ protected:
STATE_DANCING, /**< The main state where notes have to be pressed. */
STATE_OUTRO, /**< The ending state, pressing Back isn't allowed here. */
NUM_DANCING_STATES
}
}
/** @brief The specific point within ScreenGameplay. */ m_DancingState;
private:
bool m_bPaused;
// set_paused_internal exists because GameState's pause variable needs to
// be kept in sync with ScreenGameplay's.
void set_paused_internal(bool p);
protected:
GameController m_PauseController;
/**