112 auto GetAllPBPtrs(
const std::string& profileID =
113 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
114 ->
const std::vector<vector<HighScore*>>;
115 auto GetAllPBsPreferringReplays(
116 const std::string& profileID =
117 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
118 -> std::vector<HighScore*>;
120 auto GetChartPBAt(
const std::string& ck,
122 const std::string& profileID =
123 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
128 auto GetChartPBUpTo(
const std::string& ck,
130 const std::string& profileID =
131 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
134 [[nodiscard]]
auto GetBestGradeFor(
135 const std::string& ck,
136 const std::string& profileID =
137 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
const -> Grade
139 if (KeyHasScores(ck, profileID)) {
140 return pscores.at(profileID).at(ck).bestGrade;
143 return Grade_Invalid;
146 [[nodiscard]]
auto GetBestWifeScoreFor(
147 const std::string& ck,
148 const std::string& profileID =
149 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
const ->
float
151 if (KeyHasScores(ck, profileID)) {
152 return pscores.at(profileID).at(ck).bestWifeScore;
161 const std::string& profileID =
162 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID) ->
int
165 HighScore* h = pscores[profileID][hs.GetChartKey()].AddScore(hs);
166 RegisterScoreThisSession(h);
167 RegisterScoreInProfile(h, profileID);
168 return hs.GetTopScore();
172 const std::string& profileID =
173 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
176 const float minpercent = PREFSMAN->m_fMinPercentToSaveScores;
179 std::vector<float> SortTopSSRPtrs(
181 const std::string& profileID =
182 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID,
183 bool getSSRs =
false);
184 std::map<DateTime, std::vector<float>> GetPlayerRatingOverTime(
185 const std::string& profileID =
186 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
187 void SortTopSSRPtrsForGame(
189 const std::string& profileID =
190 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
192 void RecalculateSSRs(
const std::string& profileID);
193 void UnInvalidateAllScores(
const std::string& profileID);
194 void CalcPlayerRating(
float& prating,
196 const std::string& profileID);
198 auto GetTopSSRValue(
unsigned int rank,
int ss) -> float;
200 void SortTopSSRPtrsByPercent(
201 const std::string& profileID =
202 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
203 void SortTopSSRPtrsByPercentForGame(
204 const std::string& profileID =
205 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
206 auto GetTopSSRHighScore(
unsigned int rank,
int ss) ->
HighScore*;
207 auto GetTopSSRHighScoreForGame(
unsigned int rank,
int ss) ->
HighScore*;
208 auto GetRecentScore(
int rank) ->
HighScore*;
209 auto GetRecentScoreForGame(
int rank) ->
HighScore*;
210 void SortRecentScores(
const std::string& profileID =
211 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
212 void SortRecentScoresForGame(
213 const std::string& profileID =
214 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
216 [[nodiscard]]
auto KeyHasScores(
217 const std::string& ck,
218 const std::string& profileID =
219 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
const ->
bool
221 return pscores.count(profileID) == 1 && pscores.at(profileID).count(ck) == 1;
223 [[nodiscard]]
auto HasAnyScores()
const ->
bool
225 return !AllScores.empty();
228 [[nodiscard]]
auto CreateNode(
229 const std::string& profileID =
230 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
const ->
XNode*;
231 void LoadFromNode(
const XNode* node,
232 const std::string& profileID =
233 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
235 auto GetScoresForChart(
const std::string& ck,
236 const std::string& profileID =
237 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
239 auto GetSortedKeys() ->
const std::vector<std::string>;
241 void PushSelf(lua_State* L);
244 if (camefromreplay) {
245 ASSERT_M(tempscoreforonlinereplayviewing !=
nullptr,
246 "Temp score for Replay & Practice viewing was empty.");
247 return tempscoreforonlinereplayviewing;
250 if (AllScores.empty())
252 return AllScores.back();
254 void PutScoreAtTheTop(
const std::string& scorekey)
256 auto score = ScoresByKey[scorekey];
257 std::swap(score, AllScores.back());
259 auto GetAllScores() ->
const std::vector<HighScore*>& {
return AllScores; }
260 auto GetScoresByKey() ->
const std::unordered_map<std::string, HighScore*>&
264 auto GetAllProfileScores(
const std::string& profileID =
265 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
266 ->
const std::vector<HighScore*>&
268 return AllProfileScores[profileID];
270 void RegisterScore(
HighScore* hs) { AllScores.emplace_back(hs); }
273 ScoresByKey.emplace(hs->GetScoreKey(), hs);
275 void RegisterScoreInProfile(
HighScore* hs_,
const std::string& profileID);
278 std::vector<Skillset> GetTopPlayedSkillsets(
279 const std::string& profileID = PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
281 std::vector<int> GetPlaycountPerSkillset(
282 const std::string& profileID = PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
284 void SetAllTopScores(
const std::string& profileID =
285 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
287 auto GetProfileScores(
const std::string& profileID =
288 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID)
289 -> std::unordered_map<std::string, ScoresForChart>*
291 return &(pscores[profileID]);
294 void PurgeProfileScores(
const std::string& profileID =
295 PROFILEMAN->GetProfile(PLAYER_1)->m_sProfileID);
296 void UnloadAllReplayData()
298 for (
auto& s : AllScores) {
299 if (s->replay !=
nullptr &&
300 s->replay->GetReplayType() != ReplayType_Invalid)
301 s->UnloadReplayData();
304 bool camefromreplay =
false;
305 HighScore* tempscoreforonlinereplayviewing;
306 std::vector<HighScore*> scorestorecalc;
309 std::set<HighScore*> rescores;
311 auto GetNumScoresThisSession() ->
int
313 return scoresThisSession.size();
315 auto GetScoresThisSession() -> std::vector<HighScore*>
317 return scoresThisSession;
319 void RegisterScoreThisSession(
HighScore* hs)
321 scoresThisSession.push_back(hs);
325 std::unordered_map<std::string,
326 std::unordered_map<std::string, ScoresForChart>>
331 std::vector<HighScore*> TopSSRs;
332 std::vector<HighScore*> TopSSRsForGame;
333 std::vector<HighScore*> AllScores;
334 std::unordered_map<std::string, std::vector<HighScore*>> AllProfileScores;
338 std::unordered_map<std::string, HighScore*> ScoresByKey;
343 std::vector<HighScore*> scoresThisSession;