From 720ab62c7324e6eba2f2cb4cba31aad2d5e3ed7d Mon Sep 17 00:00:00 2001 From: MinaciousGrace Date: Sun, 29 Jan 2017 16:12:37 -0500 Subject: [PATCH] use new chartkey functions in recalculate ssrs and implement efficiency increases --- src/Profile.cpp | 52 +++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/src/Profile.cpp b/src/Profile.cpp index cde87f7c60..dfbea13f88 100644 --- a/src/Profile.cpp +++ b/src/Profile.cpp @@ -2173,8 +2173,32 @@ void Profile::RecalculateSSRs(bool OnlyOld) { HighScoresForASteps& zz = j->second; vector& hsv = zz.hsl.vHighScores; + const StepsID& sid = j->first; + RString ck = sid.GetKey(); + Steps* pSteps = SONGMAN->GetStepsByChartkey(ck); + + if (!pSteps) + continue; + + auto nd = pSteps->GetNoteData(); + + if (!pSteps->IsRecalcValid()) { + for (size_t i = 0; i < hsv.size(); i++) { + FOREACH_ENUM(Skillset, ss) + hsv[i].SetSkillsetSSR(ss, 0.f); + } + } + + TimingData* td = pSteps->GetTimingData(); + vector& nerv = nd.GetNonEmptyRowVector(); + vector etaner; + + for (size_t i = 0; i < nerv.size(); i++) + etaner.emplace_back(td->GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(nerv[i]))); + for (size_t i = 0; i < hsv.size(); i++) { float wifescore = hsv[i].GetWifeScore(); + float musicrate = hsv[i].GetMusicRate(); if (wifescore == 0.f || hsv[i].GetGrade() == Grade_Failed) FOREACH_ENUM(Skillset, ss) hsv[i].SetSkillsetSSR(ss, 0.f); @@ -2182,34 +2206,6 @@ void Profile::RecalculateSSRs(bool OnlyOld) { if (OnlyOld && hsv[i].GetSSRCalcVersion() == GetCalcVersion()) continue; - const StepsID& sid = j->first; - Steps* psteps; - - if (!sid.IsValid() || sid.GetStepsType() != StepsType_dance_single) - continue; - - RString ck = sid.GetKey(); - - // look for a steps object with the same chartkey as the current steps object - auto it = SONGMAN->StepsByChartkey.find(ck); - - // if we still don't find anything, skip this score - if (it == SONGMAN->StepsByChartkey.end()) - continue; - - // grab the steps object via chartkey - psteps = SONGMAN->StepsByChartkey[ck][0]; - - auto nd = psteps->GetNoteData(); - TimingData* td = psteps->GetTimingData(); - float musicrate = hsv[i].GetMusicRate(); - - vector& nerv = nd.GetNonEmptyRowVector(); - vector etaner; - - for (size_t i = 0; i < nerv.size(); i++) - etaner.emplace_back(td->GetElapsedTimeFromBeatNoOffset(NoteRowToBeat(nerv[i]))); - vector recalcSSR = MinaSDCalc(nd, etaner, musicrate, wifescore, 1.f, td->HasWarps()); FOREACH_ENUM(Skillset, ss) hsv[i].SetSkillsetSSR(ss, recalcSSR[ss]);