diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 4458f3ab69..84f43660c6 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -51,7 +51,7 @@ GameState::GameState() m_CurGame = GAME_DANCE; m_iCoins = 0; - m_timeGameStarted = 0; + m_timeGameStarted.SetZero(); m_bIsOnSystemMenu = false; ReloadCharacters(); @@ -72,7 +72,7 @@ GameState::~GameState() void GameState::Reset() { - if( m_timeGameStarted != 0 && g_vPlayedStageStats.size() ) // we were in the middle of a game and played at least one song + if( !m_timeGameStarted.IsZero() && g_vPlayedStageStats.size() ) // we were in the middle of a game and played at least one song EndGame(); @@ -80,7 +80,7 @@ void GameState::Reset() int p; - m_timeGameStarted = 0; + m_timeGameStarted.SetZero(); m_CurStyle = STYLE_INVALID; for( p=0; pLoadAllFromProfiles(); } +/* This data is added to each player profile, and to the machine profile per-player. */ +void AddPlayerStatsToProfile( Profile *pProfile, const StageStats &ss, PlayerNumber p ) +{ + CheckStageStats( ss, p ); + CHECKPOINT; + const int iMeter = clamp( ss.iMeter[p], 0, MAX_METER ); + + pProfile->m_iNumSongsPlayedByPlayMode[ss.playMode]++; + pProfile->m_iNumSongsPlayedByStyle[ss.style]++; + pProfile->m_iNumSongsPlayedByDifficulty[ss.pSteps[p]->GetDifficulty()]++; + pProfile->m_iNumSongsPlayedByMeter[iMeter]++; + pProfile->m_iTotalDancePoints += ss.iActualDancePoints[p]; + + if( ss.StageType == StageStats::STAGE_EXTRA || ss.StageType == StageStats::STAGE_EXTRA2 ) + { + if( ss.bFailed[p] ) + ++pProfile->m_iNumExtraStagesFailed; + else + ++pProfile->m_iNumExtraStagesPassed; + } + + if( !ss.bFailed[p] ) + { + pProfile->m_iNumSongsPassedByPlayMode[ss.playMode]++; + pProfile->m_iNumSongsPassedByGrade[ss.GetGrade((PlayerNumber)p)]++; + } +} + void GameState::EndGame() { // Update profile stats - time_t now = time(NULL); - int iPlaySeconds = now - m_timeGameStarted; - if( iPlaySeconds < 0 ) - iPlaySeconds = 0; + int iPlaySeconds = max( 0, (int) m_timeGameStarted.PeekDeltaTime() ); Profile* pMachineProfile = PROFILEMAN->GetMachineProfile(); @@ -237,48 +262,10 @@ void GameState::EndGame() for( unsigned i=0; im_iNumSongsPlayedByPlayMode[ss.playMode]++; - pMachineProfile->m_iNumSongsPlayedByStyle[ss.style]++; - pMachineProfile->m_iNumSongsPlayedByDifficulty[ss.pSteps[p]->GetDifficulty()]++; - pMachineProfile->m_iNumSongsPlayedByMeter[iMeter]++; - pMachineProfile->m_iTotalDancePoints += ss.iActualDancePoints[p]; - if( ss.StageType == StageStats::STAGE_EXTRA || ss.StageType == StageStats::STAGE_EXTRA2 ) - { - if( ss.bFailed[p] ) - ++pMachineProfile->m_iNumExtraStagesFailed; - else - ++pMachineProfile->m_iNumExtraStagesPassed; - } - if( !ss.bFailed[p] ) - { - pMachineProfile->m_iNumSongsPassedByPlayMode[ss.playMode]++; - pMachineProfile->m_iNumSongsPassedByGrade[ss.GetGrade((PlayerNumber)p)]++; - } + AddPlayerStatsToProfile( pMachineProfile, ss, (PlayerNumber) p ); if( pPlayerProfile ) - { - pPlayerProfile->m_iNumSongsPlayedByPlayMode[ss.playMode]++; - pPlayerProfile->m_iNumSongsPlayedByStyle[ss.style]++; - pPlayerProfile->m_iNumSongsPlayedByDifficulty[ss.pSteps[p]->GetDifficulty()]++; - pPlayerProfile->m_iNumSongsPlayedByMeter[iMeter]++; - pPlayerProfile->m_iTotalDancePoints += ss.iActualDancePoints[p]; - if( ss.StageType == StageStats::STAGE_EXTRA || ss.StageType == StageStats::STAGE_EXTRA2 ) - { - if( ss.bFailed[p] ) - ++pPlayerProfile->m_iNumExtraStagesFailed; - else - ++pPlayerProfile->m_iNumExtraStagesPassed; - } - if( !ss.bFailed[p] ) - { - pPlayerProfile->m_iNumSongsPassedByPlayMode[ss.playMode]++; - pPlayerProfile->m_iNumSongsPassedByGrade[ss.GetGrade((PlayerNumber)p)]++; - } - } + AddPlayerStatsToProfile( pPlayerProfile, ss, (PlayerNumber) p ); } CHECKPOINT; diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 1b151d4474..7d190ab4d9 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -57,7 +57,7 @@ public: bool m_bIsOnSystemMenu; // system screens will not be effected by the operator key -- Miryokuteki CourseDifficulty m_CourseDifficulty[NUM_PLAYERS]; // used in nonstop bool ChangeCourseDifficulty( PlayerNumber pn, int dir ); - time_t m_timeGameStarted; // from the moment the first player pressed Start + RageTimer m_timeGameStarted; // from the moment the first player pressed Start /* This is set to a random number per-game/round; it can be used for a random seed. */ int m_iGameSeed, m_iRoundSeed;