Rename StageStats::operator+= to AddStats. (easier to grep for)

Keep track of whether each stage in StageStats was an extra stage.
GAMESTATE->m_vPassedStageStats now holds all played songs,
including failed ones (renaming in a moment).
GameState::GetFinalEvalStatsAndSongs logic was weird.  Simplify.
This commit is contained in:
Glenn Maynard
2003-09-06 01:35:29 +00:00
parent 6862e69559
commit 5ef82e798b
5 changed files with 33 additions and 17 deletions
+20 -12
View File
@@ -446,23 +446,31 @@ void GameState::GetFinalEvalStatsAndSongs( StageStats& statsOut, vector<Song*>&
statsOut = StageStats(); statsOut = StageStats();
// Show stats only for the latest 3 normal songs + passed extra stages // Show stats only for the latest 3 normal songs + passed extra stages
int iNumPassedExtraStages = GAMESTATE->IsExtraStage() ? 1 : (GAMESTATE->IsExtraStage2() ? 2 : 0); int PassedRegularSongsLeft = 3;
int iNumPassedRegularSongs = GAMESTATE->m_vPassedStageStats.size() - iNumPassedExtraStages; for( int i = (int)GAMESTATE->m_vPassedStageStats.size()-1; i >= 0; --i )
int iNumSongsToShow = iNumPassedExtraStages + min( iNumPassedRegularSongs, 3 );
int iNumSongsToThrowAway = GAMESTATE->m_vPassedStageStats.size() - iNumSongsToShow;
ASSERT( iNumSongsToThrowAway >= 0 );
for( int i=iNumSongsToThrowAway; i<(int)GAMESTATE->m_vPassedStageStats.size(); i++ )
{ {
// weight long and marathon songs const StageStats &s = GAMESTATE->m_vPassedStageStats[i];
int iLengthMultiplier = SongManager::GetNumStagesForSong( GAMESTATE->m_vPassedStageStats[i].pSong );
statsOut += GAMESTATE->m_vPassedStageStats[i]; if( !s.OnePassed() )
continue;
if( s.StageType == StageStats::STAGE_NORMAL )
{
if( PassedRegularSongsLeft == 0 )
break;
--PassedRegularSongsLeft;
}
// weight long and marathon songs
int iLengthMultiplier = SongManager::GetNumStagesForSong( s.pSong );
statsOut.AddStats( s );
for( int p=0; p<NUM_PLAYERS; p++ ) for( int p=0; p<NUM_PLAYERS; p++ )
if( IsPlayerEnabled(p) ) if( IsPlayerEnabled(p) )
statsOut.iMeter[p] += GAMESTATE->m_vPassedStageStats[i].iMeter[p] * (iLengthMultiplier-1); statsOut.iMeter[p] += s.iMeter[p] * (iLengthMultiplier-1);
vSongsOut.push_back( GAMESTATE->m_vPassedStageStats[i].pSong ); vSongsOut.insert( vSongsOut.begin(), s.pSong );
} }
if(!vSongsOut.size()) return; if(!vSongsOut.size()) return;
+1 -2
View File
@@ -982,8 +982,7 @@ void ScreenEvaluation::MenuStart( PlayerNumber pn )
iNumStagesOfLastSong = SongManager::GetNumStagesForSong( GAMESTATE->m_pCurSong ); iNumStagesOfLastSong = SongManager::GetNumStagesForSong( GAMESTATE->m_pCurSong );
GAMESTATE->m_iCurrentStageIndex += iNumStagesOfLastSong; GAMESTATE->m_iCurrentStageIndex += iNumStagesOfLastSong;
// add current stage stats to accumulated total only if this song was passed // save current stage stats
if( GAMESTATE->m_CurStageStats.OnePassed() )
GAMESTATE->m_vPassedStageStats.push_back( GAMESTATE->m_CurStageStats ); // Save this stage's stats GAMESTATE->m_vPassedStageStats.push_back( GAMESTATE->m_CurStageStats ); // Save this stage's stats
break; break;
} }
+7
View File
@@ -189,6 +189,13 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration ) : Screen("ScreenGameplay")
GAMESTATE->m_CurStageStats.iMeter[p] = m_apNotesQueue[p][0]->GetMeter(); GAMESTATE->m_CurStageStats.iMeter[p] = m_apNotesQueue[p][0]->GetMeter();
} }
if( GAMESTATE->IsExtraStage() )
GAMESTATE->m_CurStageStats.StageType = StageStats::STAGE_EXTRA;
else if( GAMESTATE->IsExtraStage2() )
GAMESTATE->m_CurStageStats.StageType = StageStats::STAGE_EXTRA2;
else
GAMESTATE->m_CurStageStats.StageType = StageStats::STAGE_NORMAL;
// //
// Init ScoreKeepers // Init ScoreKeepers
// //
+2 -1
View File
@@ -21,9 +21,10 @@ StageStats::StageStats()
memset( this, 0, sizeof(StageStats) ); memset( this, 0, sizeof(StageStats) );
} }
void StageStats::operator+=( const StageStats& other ) void StageStats::AddStats( const StageStats& other )
{ {
pSong = NULL; // meaningless pSong = NULL; // meaningless
StageType = STAGE_INVALID; // meaningless
memset( fAliveSeconds, 0, sizeof(fAliveSeconds) ); memset( fAliveSeconds, 0, sizeof(fAliveSeconds) );
for( int p=0; p<NUM_PLAYERS; p++ ) for( int p=0; p<NUM_PLAYERS; p++ )
+2 -1
View File
@@ -21,11 +21,12 @@ class Song;
struct StageStats struct StageStats
{ {
StageStats(); StageStats();
void operator+=( const StageStats& other ); // accumulate void AddStats( const StageStats& other ); // accumulate
Grade GetGrade( PlayerNumber pn ); Grade GetGrade( PlayerNumber pn );
bool OnePassed() const; bool OnePassed() const;
Song* pSong; Song* pSong;
enum { STAGE_INVALID, STAGE_NORMAL, STAGE_EXTRA, STAGE_EXTRA2 } StageType;
int iMeter[NUM_PLAYERS]; int iMeter[NUM_PLAYERS];
float fAliveSeconds[NUM_PLAYERS]; // how far into the music did they last before failing? Updated by Gameplay. float fAliveSeconds[NUM_PLAYERS]; // how far into the music did they last before failing? Updated by Gameplay.
bool bFailed[NUM_PLAYERS]; // true if they have failed at any point during the song bool bFailed[NUM_PLAYERS]; // true if they have failed at any point during the song