Skip to content

Commit

Permalink
Merge pull request #11 from Nickito12/master
Browse files Browse the repository at this point in the history
Generalize skillsets using the new enum
  • Loading branch information
MinaciousGrace authored Dec 28, 2016
2 parents e0bbddd + c0c2910 commit a625318
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 90 deletions.
109 changes: 34 additions & 75 deletions src/Profile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2206,108 +2206,65 @@ float Profile::GetTopSSRValue(unsigned int rank, int skillset) {
//Empty HighScore Pointer = NULL then return 0
if(highScorePtr == NULL)
return 0.f;
return highScorePtr->GetSkillsetSSR(static_cast<Skillset>(skillset));

if (skillset >= 0 && skillset < NUM_Skillset)
return highScorePtr->GetSkillsetSSR(static_cast<Skillset>(skillset));

//Undefined skillset
return 0.f;
}
SongID Profile::GetTopSSRSongID(unsigned int rank, int skillset) {
if (rank == 0)
rank = 1;
if (rank > static_cast<unsigned int>(topSSRSongIdsOverall.size()))
if (rank > static_cast<unsigned int>(topSSRSongIds[skillset].size()))
if (CalcAllTopSSRs(rank) == false) {
SongID emptySongID;
return emptySongID;
}
switch (skillset) {
case 0:
return topSSRSongIdsOverall[rank - 1];
break;
case 1:
return topSSRSongIdsSpeed[rank - 1];
break;
case 2:
return topSSRSongIdsStam[rank - 1];
break;
case 3:
return topSSRSongIdsJack[rank - 1];
break;
case 4:
return topSSRSongIdsTech[rank - 1];
break;
}

if (skillset >= 0 && skillset < NUM_Skillset)
return topSSRSongIds[skillset][rank - 1];

//Undefined skillset
SongID emptysongID;
return emptysongID;
}
HighScore* Profile::GetTopSSRHighScore(unsigned int rank, int skillset) {
if (rank > static_cast<unsigned int>(topSSRHighScoresOverall.size()))
if (rank == 0)
rank = 1;
if (rank > static_cast<unsigned int>(topSSRHighScores[skillset].size()))
if (CalcAllTopSSRs(rank) == false)
return NULL;
switch (skillset) {
case 0:
return topSSRHighScoresOverall[rank - 1];
break;
case 1:
return topSSRHighScoresSpeed[rank - 1];
break;
case 2:
return topSSRHighScoresStam[rank - 1];
break;
case 3:
return topSSRHighScoresJack[rank - 1];
break;
case 4:
return topSSRHighScoresTech[rank - 1];
break;
}

if(skillset >= 0 && skillset < NUM_Skillset)
return topSSRHighScores[skillset][rank - 1];
//Undefined skillset returns an empty pointer(NULL)

return NULL;
}
// Todo: Make it only iterate once - Nick12
bool Profile::CalcAllTopSSRs(unsigned int qty) {
bool ret = true;
for(int i = 0; i < 5; i++)
for(int i = 0; i < NUM_Skillset; i++)
ret = CalcTopSSRs(qty, i) && ret;
return ret;
}
bool Profile::CalcTopSSRs(unsigned int qty, int skillset) {
vector<float> topSSRs; //Auxiliary values to sort faster
vector<HighScore*> *topSSRHighScoresPtr;
vector<StepsID> *topSSRStepIdsPtr;
vector<SongID> *topSSRSongIdsPtr;
unsigned int counter = 0;
//undefined skillset
if (skillset < 0 || skillset >= NUM_Skillset)
return false;

vector<float>::reverse_iterator pos;
vector<float> topSSRs; //Auxiliary vector to sort faster

unsigned int poscounter;
//Pointers to the skillset's vectors
vector<HighScore*> *topSSRHighScoresPtr = &topSSRHighScores[skillset];
vector<StepsID> *topSSRStepIdsPtr = &topSSRStepIds[skillset];
vector<SongID> *topSSRSongIdsPtr = &topSSRSongIds[skillset];

//We work with a pointer to the method so we dont need to have the foreach in each case or run the switch on each iteration
float (HighScore::*SSRFunction)() const = NULL;
//Make the pointers point to the right vectors/method
switch (skillset) {
case 0:
topSSRStepIdsPtr = &topSSRStepIdsOverall;
topSSRHighScoresPtr = &topSSRHighScoresOverall;
topSSRSongIdsPtr = &topSSRSongIdsOverall;
break;
case 1:
topSSRStepIdsPtr = &topSSRStepIdsSpeed;
topSSRHighScoresPtr = &topSSRHighScoresSpeed;
topSSRSongIdsPtr = &topSSRSongIdsSpeed;
break;
case 2:
topSSRStepIdsPtr = &topSSRStepIdsStam;
topSSRHighScoresPtr = &topSSRHighScoresStam;
topSSRSongIdsPtr = &topSSRSongIdsStam;
break;
case 3:
topSSRStepIdsPtr = &topSSRStepIdsJack;
topSSRHighScoresPtr = &topSSRHighScoresJack;
topSSRSongIdsPtr = &topSSRSongIdsJack;
break;
case 4:
topSSRStepIdsPtr = &topSSRStepIdsTech;
topSSRHighScoresPtr = &topSSRHighScoresTech;
topSSRSongIdsPtr = &topSSRSongIdsTech;
break;
}
//Counter to see if we meet the required ranking size
unsigned int counter = 0;
//Axi
unsigned int poscounter;

//Initialize vectors
StepsID emptySteps;
Expand Down Expand Up @@ -2355,6 +2312,7 @@ bool Profile::CalcTopSSRs(unsigned int qty, int skillset) {
poscounter--;
}
counter++;

//insert in the proper place
(*topSSRStepIdsPtr).insert((*topSSRStepIdsPtr).begin() + poscounter, stepsid);
topSSRs.insert(topSSRs.begin() + poscounter, ssr);
Expand All @@ -2370,6 +2328,7 @@ bool Profile::CalcTopSSRs(unsigned int qty, int skillset) {
}
}
}

//If we didnt find enough ssr's to fill qty elements return false
if (counter >= qty)
return true;
Expand Down
19 changes: 4 additions & 15 deletions src/Profile.h
Original file line number Diff line number Diff line change
Expand Up @@ -457,21 +457,10 @@ class Profile
SongID GetTopSSRSongID(unsigned int rank, int skillset);
float GetTopSSRValue(unsigned int rank, int skillset);
RString GetTopSSRSongName(unsigned int rank, int skillset);
vector<SongID> topSSRSongIdsOverall;
vector<HighScore*> topSSRHighScoresOverall;
vector<StepsID> topSSRStepIdsOverall;
vector<SongID> topSSRSongIdsJack;
vector<HighScore*> topSSRHighScoresJack;
vector<StepsID> topSSRStepIdsJack;
vector<SongID> topSSRSongIdsStam;
vector<HighScore*> topSSRHighScoresStam;
vector<StepsID> topSSRStepIdsStam;
vector<SongID> topSSRSongIdsSpeed;
vector<HighScore*> topSSRHighScoresSpeed;
vector<StepsID> topSSRStepIdsSpeed;
vector<SongID> topSSRSongIdsTech;
vector<HighScore*> topSSRHighScoresTech;
vector<StepsID> topSSRStepIdsTech;
//Vector array instead of a bunch of vectors
vector<SongID> topSSRSongIds[(int)NUM_Skillset];
vector<HighScore*> topSSRHighScores[(int)NUM_Skillset];
vector<StepsID> topSSRStepIds[(int)NUM_Skillset];

private:
const HighScoresForASong *GetHighScoresForASong( const SongID& songID ) const;
Expand Down

0 comments on commit a625318

Please sign in to comment.