diff --git a/stepmania/src/Course.cpp b/stepmania/src/Course.cpp index 683f059bac..3e31e76a47 100644 --- a/stepmania/src/Course.cpp +++ b/stepmania/src/Course.cpp @@ -1016,3 +1016,27 @@ void Course::AddHighScore( StepsType st, PlayerNumber pn, MemCardData::HighScore iPersonalIndexOut = -1; m_MemCardDatas[st][MEMORY_CARD_MACHINE].AddHighScore( hs, iMachineIndexOut ); } + +int Course::GetNumTimesPlayed( MemoryCard card ) const +{ + int iTotalNumTimesPlayed = 0; + for( unsigned i = 0; i < NUM_STEPS_TYPES; ++i ) + iTotalNumTimesPlayed += GetNumTimesPlayed( (StepsType) i, card ); + return iTotalNumTimesPlayed; +} + +static map course_sort_val; + +bool CompareCoursePointersBySortVal(const Course *pSong1, const Course *pSong2) +{ + return course_sort_val[pSong1] < course_sort_val[pSong2]; +} + +void SortCoursePointerArrayByMostPlayed( vector &arrayCoursePointers, MemoryCard card ) +{ + for(unsigned i = 0; i < arrayCoursePointers.size(); ++i) + course_sort_val[arrayCoursePointers[i]] = arrayCoursePointers[i]->GetNumTimesPlayed( card ); + stable_sort( arrayCoursePointers.begin(), arrayCoursePointers.end(), CompareCoursePointersBySortVal ); + reverse( arrayCoursePointers.begin(), arrayCoursePointers.end() ); + course_sort_val.clear(); +} diff --git a/stepmania/src/Course.h b/stepmania/src/Course.h index b55d5157b3..1327d5ec1b 100644 --- a/stepmania/src/Course.h +++ b/stepmania/src/Course.h @@ -183,11 +183,13 @@ public: return m_MemCardDatas[st][card].GetTopScore(); } - int GetNumTimesPlayed( StepsType st, MemoryCard card ) + int GetNumTimesPlayed( StepsType st, MemoryCard card ) const { return m_MemCardDatas[st][card].iNumTimesPlayed; } + int GetNumTimesPlayed( MemoryCard card ) const; + // sorting values int SortOrder_TotalDifficulty; int SortOrder_Ranking; @@ -205,6 +207,7 @@ void SortCoursePointerArrayByType( vector &apCourses ); void SortCoursePointerArrayByAvgDifficulty( vector &apCourses ); void SortCoursePointerArrayByTotalDifficulty( vector &apCourses ); void SortCoursePointerArrayByRanking( vector &apCourses ); +void SortCoursePointerArrayByMostPlayed( vector &arrayCoursePointers, MemoryCard card ); void MoveRandomToEnd( vector &apCourses );