From 42296ef8f8c40c3e593050c10bf01749a4ccf19f Mon Sep 17 00:00:00 2001 From: MinaciousGrace Date: Sat, 14 Jan 2017 13:48:56 -0500 Subject: [PATCH] add sort skillset sorting function in c++ --- src/Steps.cpp | 40 ++++++++++++++++++++++++++++++++++++---- src/Steps.h | 1 + 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/Steps.cpp b/src/Steps.cpp index ad4a3214a3..12dcb8658b 100644 --- a/src/Steps.cpp +++ b/src/Steps.cpp @@ -466,6 +466,16 @@ float Steps::GetMSD(float x, int i) const { return lerp(prop, stuffnthings[idx][i], stuffnthings[idx + 1][i]); } +map Steps::SortSkillsetsAtRate(float x, bool includeoverall) { + int idx = static_cast(x * 10) - 7; + map why; + SDiffs tmp = stuffnthings[idx]; + FOREACH_ENUM(Skillset, ss) + if(ss != Skill_Overall || includeoverall) + why.emplace(tmp[ss], ss); + return why; +} + RString Steps::GenerateChartKey(NoteData& nd, TimingData *td) { RString k = ""; @@ -852,20 +862,41 @@ class LunaSteps: public Luna return 1; } - static int GetChartKey(T* p, lua_State *L) - { + static int GetChartKey(T* p, lua_State *L) { lua_pushstring(L, p->GetChartKey()); return 1; } - static int GetMSD(T* p, lua_State *L) - { + static int GetMSD(T* p, lua_State *L) { float rate = FArg(1); int index = IArg(2)-1; CLAMP(rate, 0.7f, 2.f); lua_pushnumber(L, p->GetMSD(rate, index)); return 1; } + // ok really is this how i have to do this - mina + static int GetRelevantSkillsetsByMSDRank(T* p, lua_State *L) { + auto sortedskillsets = p->SortSkillsetsAtRate(FArg(1), false); + int rank = IArg(2); + int i = NUM_Skillset - 1; // exclude Overall from this... need to handle overall better - mina + Skillset o; + float rval = 0.f; + float highval = 0.f; + FOREACHM(float, Skillset, sortedskillsets, thingy) { + if (i == rank) { + rval = thingy->first; + o = thingy->second; + } + if (i == 1) + highval = thingy->first; + --i; + } + if(rval > highval * 0.9f) + lua_pushstring(L, SkillsetToString(o) ); + else + lua_pushstring(L, ""); + return 1; + } LunaSteps() { @@ -895,6 +926,7 @@ class LunaSteps: public Luna ADD_METHOD( IsDisplayBpmRandom ); ADD_METHOD( PredictMeter ); ADD_METHOD( GetDisplayBPMType ); + ADD_METHOD( GetRelevantSkillsetsByMSDRank ); } }; diff --git a/src/Steps.h b/src/Steps.h index ffbf65c130..dfad07b12f 100644 --- a/src/Steps.h +++ b/src/Steps.h @@ -179,6 +179,7 @@ class Steps void SetChartKey(const RString &k) { ChartKey = k; } void SetAllMSD(const MinaSD &msd) { stuffnthings = msd; } MinaSD GetAllMSD() const { return stuffnthings; } + map SortSkillsetsAtRate(float x, bool includeoverall); // prolly needs an enum or something idk - mina float GetMSD(float x, int i) const;