From 8f1f39a675507733bcbaf41f25846fd53cfb7347 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 15 Aug 2004 01:36:33 +0000 Subject: [PATCH] show overall PercentComplete on ScreenEnding --- stepmania/src/Profile.cpp | 28 ++++++++++++++---- stepmania/src/Profile.h | 4 +++ stepmania/src/ScreenEnding.cpp | 53 +++++++++++++++++++++++++++------- stepmania/src/ScreenEnding.h | 1 + 4 files changed, 71 insertions(+), 15 deletions(-) diff --git a/stepmania/src/Profile.cpp b/stepmania/src/Profile.cpp index 7396e13f07..30486c54d2 100644 --- a/stepmania/src/Profile.cpp +++ b/stepmania/src/Profile.cpp @@ -195,7 +195,7 @@ int Profile::GetTotalNumSongsPassed() const return iTotal; } -float Profile::GetSongsPercentComplete( StepsType st, Difficulty dc ) const +float Profile::GetSongsPossible( StepsType st, Difficulty dc ) const { int iTotalSteps = 0; @@ -223,7 +223,11 @@ float Profile::GetSongsPercentComplete( StepsType st, Difficulty dc ) const } } + return iTotalSteps; +} +float Profile::GetSongsActual( StepsType st, Difficulty dc ) const +{ float fTotalPercents = 0; // add steps high scores @@ -269,10 +273,15 @@ float Profile::GetSongsPercentComplete( StepsType st, Difficulty dc ) const } } - return fTotalPercents / iTotalSteps; + return fTotalPercents; } -float Profile::GetCoursesPercentComplete( StepsType st, CourseDifficulty cd ) const +float Profile::GetSongsPercentComplete( StepsType st, Difficulty dc ) const +{ + return GetSongsActual(st,dc) / GetSongsPossible(st,dc); +} + +float Profile::GetCoursesPossible( StepsType st, CourseDifficulty cd ) const { int iTotalTrails = 0; @@ -293,8 +302,12 @@ float Profile::GetCoursesPercentComplete( StepsType st, CourseDifficulty cd ) co iTotalTrails++; } - + return iTotalTrails; +} + +float Profile::GetCoursesActual( StepsType st, CourseDifficulty cd ) const +{ float fTotalPercents = 0; // add course high scores @@ -341,7 +354,12 @@ float Profile::GetCoursesPercentComplete( StepsType st, CourseDifficulty cd ) co } } - return fTotalPercents / iTotalTrails; + return fTotalPercents; +} + +float Profile::GetCoursesPercentComplete( StepsType st, CourseDifficulty cd ) const +{ + return GetCoursesActual(st,cd) / GetCoursesPossible(st,cd); } CString Profile::GetProfileDisplayNameFromDir( CString sDir ) diff --git a/stepmania/src/Profile.h b/stepmania/src/Profile.h index 588f13a7f9..908bb57618 100644 --- a/stepmania/src/Profile.h +++ b/stepmania/src/Profile.h @@ -63,6 +63,10 @@ public: CString GetDisplayTotalCaloriesBurnedToday() const; int GetTotalNumSongsPlayed() const; int GetTotalNumSongsPassed() const; + float GetSongsPossible( StepsType st, Difficulty dc ) const; + float GetCoursesPossible( StepsType st, CourseDifficulty cd ) const; + float GetSongsActual( StepsType st, Difficulty dc ) const; + float GetCoursesActual( StepsType st, CourseDifficulty cd ) const; float GetSongsPercentComplete( StepsType st, Difficulty dc ) const; float GetCoursesPercentComplete( StepsType st, CourseDifficulty cd ) const; static CString GetProfileDisplayNameFromDir( CString sDir ); diff --git a/stepmania/src/ScreenEnding.cpp b/stepmania/src/ScreenEnding.cpp index 8177ac50b3..873cc64da4 100644 --- a/stepmania/src/ScreenEnding.cpp +++ b/stepmania/src/ScreenEnding.cpp @@ -30,29 +30,30 @@ CString GetStatsLineTitle( PlayerNumber pn, EndingStatsLine line ) { case CALORIES_TODAY: return "Calories Today"; case CURRENT_COMBO: return "Current Combo"; + case PERCENT_COMPLETE: + { + StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; + CString sStepsType = GAMEMAN->StepsTypeToThemedString(st); + return ssprintf( "%s %% Complete", sStepsType.c_str() ); + } case PERCENT_COMPLETE_EASY: case PERCENT_COMPLETE_MEDIUM: case PERCENT_COMPLETE_HARD: case PERCENT_COMPLETE_CHALLENGE: - // Ugly... { - StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; - CString sStepsType = GAMEMAN->StepsTypeToThemedString(st); if( GAMESTATE->IsCourseMode() ) { CourseDifficulty cd = (CourseDifficulty)(DIFFICULTY_EASY+line-PERCENT_COMPLETE_EASY); ASSERT( cd >= 0 && cd < NUM_COURSE_DIFFICULTIES ); if( !GAMESTATE->IsCourseDifficultyShown(cd) ) return ""; - CString sDifficulty = CourseDifficultyToThemedString(cd); - return ssprintf( "%s %% Complete", sStepsType.c_str() ); + return CourseDifficultyToThemedString(cd); } else { Difficulty dc = (Difficulty)(DIFFICULTY_EASY+line-PERCENT_COMPLETE_EASY); ASSERT( dc >= 0 && dc < NUM_DIFFICULTIES ); - CString sDifficulty = DifficultyToThemedString(dc); - return ssprintf( "%s %% Complete", sStepsType.c_str() ); + return DifficultyToThemedString(dc); } } default: ASSERT(0); return ""; @@ -64,18 +65,49 @@ CString GetStatsLineValue( PlayerNumber pn, EndingStatsLine line ) Profile* pProfile = PROFILEMAN->GetProfile( pn ); ASSERT( pProfile ); + StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; + switch( line ) { case CALORIES_TODAY: return pProfile->GetDisplayTotalCaloriesBurned(); case CURRENT_COMBO: return Commify( pProfile->m_iCurrentCombo ); + case PERCENT_COMPLETE: + { + float fActual = 0; + float fPossible = 0; + + if( GAMESTATE->IsCourseMode() ) + { + set vDiffs; + GAMESTATE->GetCourseDifficultiesToShow( vDiffs ); + for( set::iterator iter = vDiffs.begin(); iter != vDiffs.end(); iter++ ) + { + fActual += pProfile->GetCoursesActual(st,*iter); + fPossible += pProfile->GetCoursesPossible(st,*iter); + } + } + else + { + set vDiffs; + GAMESTATE->GetDifficultiesToShow( vDiffs ); + for( set::iterator iter = vDiffs.begin(); iter != vDiffs.end(); iter++ ) + { + fActual += pProfile->GetSongsActual(st,*iter); + fPossible += pProfile->GetSongsPossible(st,*iter); + } + } + + return ssprintf( "%05.2f%%", fActual/fPossible*100 ); + } case PERCENT_COMPLETE_EASY: case PERCENT_COMPLETE_MEDIUM: case PERCENT_COMPLETE_HARD: case PERCENT_COMPLETE_CHALLENGE: // Ugly... { - StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; CString sStepsType = GAMEMAN->StepsTypeToThemedString(st); + float fPercent = 0; + float fPossible = 0; if( GAMESTATE->IsCourseMode() ) { CourseDifficulty cd = (CourseDifficulty)(DIFFICULTY_EASY+line-PERCENT_COMPLETE_EASY); @@ -83,15 +115,16 @@ CString GetStatsLineValue( PlayerNumber pn, EndingStatsLine line ) if( !GAMESTATE->IsCourseDifficultyShown(cd) ) return ""; CString sDifficulty = CourseDifficultyToThemedString(cd); - return ssprintf( "%06.3f%%", pProfile->GetCoursesPercentComplete(st,cd)*100 ); + fPercent = pProfile->GetCoursesPercentComplete(st,cd); } else { Difficulty dc = (Difficulty)(DIFFICULTY_EASY+line-PERCENT_COMPLETE_EASY); ASSERT( dc >= 0 && dc < NUM_DIFFICULTIES ); CString sDifficulty = DifficultyToThemedString(dc); - return ssprintf( "%06.3f%%", pProfile->GetSongsPercentComplete(st,dc)*100 ); + fPercent = pProfile->GetSongsPercentComplete(st,dc); } + return ssprintf( "%05.2f%%", fPercent*100 ); } default: ASSERT(0); return ""; } diff --git a/stepmania/src/ScreenEnding.h b/stepmania/src/ScreenEnding.h index ca013b114c..48229f7f01 100644 --- a/stepmania/src/ScreenEnding.h +++ b/stepmania/src/ScreenEnding.h @@ -10,6 +10,7 @@ enum EndingStatsLine { CALORIES_TODAY, CURRENT_COMBO, + PERCENT_COMPLETE, PERCENT_COMPLETE_EASY, PERCENT_COMPLETE_MEDIUM, PERCENT_COMPLETE_HARD,