Steps *StepsID::ToSteps( const Song *p, bool bAllowNull ) const { if( st == StepsType_Invalid || dc == Difficulty_Invalid ) return NULL; SongID songID; songID.FromSong( p ); Steps *pRet = NULL; if( dc == Difficulty_Edit ) { pRet = SongUtil::GetOneSteps( p, st, dc, -1, -1, sDescription, "", uHash, true ); } else { pRet = SongUtil::GetOneSteps( p, st, dc, -1, -1, "", "", 0, true ); } if( !bAllowNull && pRet == NULL ) FAIL_M( ssprintf("%i, %i, \"%s\"", st, dc, sDescription.c_str()) ); m_Cache.Set( pRet ); return pRet; }
void Profile::GetGrades( const Song* pSong, StepsType st, int iCounts[NUM_GRADES] ) const { SongID songID; songID.FromSong( pSong ); memset( iCounts, 0, sizeof(int)*NUM_GRADES ); const HighScoresForASong *hsSong = GetHighScoresForASong( songID ); if( hsSong == NULL ) return; FOREACH_Grade(g) { std::map<StepsID,HighScoresForASteps>::const_iterator it; for( it = hsSong->m_StepsHighScores.begin(); it != hsSong->m_StepsHighScores.end(); ++it ) { const StepsID &id = it->first; if( !id.MatchesStepsType(st) ) continue; const HighScoresForASteps &hsSteps = it->second; if( hsSteps.hs.GetTopScore().grade == g ) iCounts[g]++; } } }
HighScoreList& Profile::GetStepsHighScoreList( const Song* pSong, const Steps* pSteps ) { SongID songID; songID.FromSong( pSong ); StepsID stepsID; stepsID.FromSteps( pSteps ); HighScoresForASong &hsSong = m_SongHighScores[songID]; // operator[] inserts into map HighScoresForASteps &hsSteps = hsSong.m_StepsHighScores[stepsID]; // operator[] inserts into map return hsSteps.hs; }
XNode* MakeRecentScoreNode( const StageStats &ss, Trail *pTrail, const PlayerStageStats &pss, MultiPlayer mp ) { XNode* pNode = nullptr; if( GAMESTATE->IsCourseMode() ) { pNode = new XNode( "HighScoreForACourseAndTrail" ); CourseID courseID; courseID.FromCourse(GAMESTATE->m_pCurCourse ); pNode->AppendChild( courseID.CreateNode() ); TrailID trailID; trailID.FromTrail( pTrail ); pNode->AppendChild( trailID.CreateNode() ); } else { pNode = new XNode( "HighScoreForASongAndSteps" ); SongID songID; songID.FromSong( ss.m_vpPossibleSongs[0] ); pNode->AppendChild( songID.CreateNode() ); StepsID stepsID; stepsID.FromSteps( pss.m_vpPossibleSteps[0] ); pNode->AppendChild( stepsID.CreateNode() ); } XNode* pHighScore = pss.m_HighScore.CreateNode(); pHighScore->AppendChild("Pad", mp); pHighScore->AppendChild("StageGuid", GAMESTATE->m_sStageGUID); pHighScore->AppendChild("Guid", CryptManager::GenerateRandomUUID()); pNode->AppendChild( pHighScore ); return pNode; }
int Profile::GetSongNumTimesPlayed( const Song* pSong ) const { SongID songID; songID.FromSong( pSong ); return GetSongNumTimesPlayed( songID ); }