add top5 high score saving of Courses and Steps for memory cards/ranking screen

This commit is contained in:
Chris Danford
2003-10-14 17:06:30 +00:00
parent 278e7cd57d
commit 668d1974f3
22 changed files with 703 additions and 640 deletions
+130 -23
View File
@@ -16,6 +16,7 @@
#include "GameState.h"
#include "GameManager.h"
#include "Course.h"
#include "Song.h"
#include "PrefsManager.h"
#define CATEGORY_X THEME->GetMetricF("ScreenRanking","CategoryX")
@@ -37,9 +38,19 @@
#define POINTS_START_Y THEME->GetMetricF("ScreenRanking","PointsStartY")
#define TIME_START_X THEME->GetMetricF("ScreenRanking","TimeStartX")
#define TIME_START_Y THEME->GetMetricF("ScreenRanking","TimeStartY")
#define PERCENT_START_X THEME->GetMetricF("ScreenRanking","PercentStartX")
#define PERCENT_START_Y THEME->GetMetricF("ScreenRanking","PercentStartY")
#define PERCENT_COL_SPACING_X THEME->GetMetricF("ScreenRanking","PercentColSpacingX")
#define PERCENT_COL_SPACING_Y THEME->GetMetricF("ScreenRanking","PercentColSpacingY")
#define SECONDS_PER_PAGE THEME->GetMetricF("ScreenRanking","SecondsPerPage")
#define SHOW_CATEGORIES THEME->GetMetricB("ScreenRanking","ShowCategories")
#define SHOW_ALL_SONGS THEME->GetMetricB("ScreenRanking","ShowAllSongs")
#define NOTES_TYPES_TO_HIDE THEME->GetMetric ("ScreenRanking","NotesTypesToHide")
#define EMPTY_SCORE_NAME THEME->GetMetric ("ScreenRanking","EmptyScoreName")
#define EMPTY_CATEGORY_SCORE THEME->GetMetricI("ScreenRanking","EmptyCategoryScore")
#define EMPTY_COURSE_SCORE THEME->GetMetricI("ScreenRanking","EmptyCourseScore")
#define EMPTY_COURSE_TIME THEME->GetMetricF("ScreenRanking","EmptyCourseTime")
#define EMPTY_SONG_PERCENT THEME->GetMetricF("ScreenRanking","EmptySongPercent")
#define COURSES_TO_SHOW PREFSMAN->m_sCoursesToShowRanking
@@ -97,6 +108,17 @@ ScreenRanking::ScreenRanking( CString sClassName ) : ScreenAttract( sClassName )
m_textTime[i].SetHorizAlign( Actor::align_right );
this->AddChild( &m_textTime[i] );
for( int j=0; j<NUM_DIFFICULTIES; j++ )
{
m_textPercent[i][j].LoadFromFont( THEME->GetPathToF("ScreenRanking letters") );
m_textPercent[i][j].EnableShadow( false );
m_textPercent[i][j].SetX( PERCENT_START_X+LINE_SPACING_X*i+PERCENT_COL_SPACING_X*j );
m_textPercent[i][j].SetY( PERCENT_START_Y+LINE_SPACING_Y*i+PERCENT_COL_SPACING_Y*j );
m_textPercent[i][j].SetZoom( TEXT_ZOOM );
m_textPercent[i][j].SetHorizAlign( Actor::align_right );
this->AddChild( &m_textPercent[i][j] );
}
if( PREFSMAN->m_sCoursesToShowRanking == "" )
PREFSMAN->m_sCoursesToShowRanking = THEME->GetMetric("ScreenRanking","CoursesToShow");
}
@@ -157,6 +179,23 @@ ScreenRanking::ScreenRanking( CString sClassName ) : ScreenAttract( sClassName )
}
}
if( SHOW_ALL_SONGS )
{
vector<Song*> vpSongs = SONGMAN->GetAllSongs();
for( unsigned i=0; i<aNotesTypesToShow.size(); i++ )
{
for( int j=0; j<vpSongs.size(); j++ )
{
PageToShow pts;
pts.type = PageToShow::TYPE_SONG;
pts.colorIndex = i;
pts.pSong = vpSongs[j];
pts.nt = aNotesTypesToShow[i];
m_vPagesToShow.push_back( pts );
}
}
}
this->MoveToTail( &m_In ); // put it in the back so it covers up the stuff we just added
this->MoveToTail( &m_Out ); // put it in the back so it covers up the stuff we just added
@@ -197,6 +236,16 @@ void ScreenRanking::HandleScreenMessage( const ScreenMessage SM )
void ScreenRanking::SetPage( PageToShow pts )
{
// Clear all text
for( int l=0; l<NUM_RANKING_LINES; l++ )
{
m_textScores[l].SetText( "" );
m_textPoints[l].SetText( "" );
m_textTime[l].SetText( "" );
for( int j=0; j<NUM_DIFFICULTIES; j++ )
m_textPercent[l][j].SetText( "" );
}
switch( pts.type )
{
case PageToShow::TYPE_CATEGORY:
@@ -208,24 +257,32 @@ void ScreenRanking::SetPage( PageToShow pts )
m_sprType.Load( THEME->GetPathToG("ScreenRanking type "+GameManager::NotesTypeToString(pts.nt)) );
for( int l=0; l<NUM_RANKING_LINES; l++ )
{
SongManager::CategoryData::HighScore hs;
if( l < SONGMAN->m_CategoryDatas[pts.nt][pts.category].vHighScores.size() )
{
hs = SONGMAN->m_CategoryDatas[pts.nt][pts.category].vHighScores[l];
}
else
{
hs.sName = EMPTY_SCORE_NAME;
hs.iScore = EMPTY_CATEGORY_SCORE;
}
m_sprBullets[l].SetDiffuse( RageColor(1,1,1,1) );
CString sName = SONGMAN->m_MachineScores[pts.nt][pts.category][l].sName;
int iScore = SONGMAN->m_MachineScores[pts.nt][pts.category][l].iScore;
m_textNames[l].SetText( sName );
m_textScores[l].SetText( ssprintf("%09i",iScore) );
m_textPoints[l].SetText( "" );
m_textTime[l].SetText( "" );
m_textNames[l].SetText( hs.sName );
m_textScores[l].SetText( ssprintf("%09i",hs.iScore) );
m_textNames[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) );
m_textScores[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) );
bool bRecentHighScore = false;
for( int p=0; p<NUM_PLAYERS; p++ )
{
bRecentHighScore |=
pts.nt == GAMESTATE->m_RankingNotesType &&
GAMESTATE->m_RankingCategory[p] == pts.category &&
GAMESTATE->m_iRankingIndex[p] == l;
}
// FIXME
// for( int p=0; p<NUM_PLAYERS; p++ )
// {
// bRecentHighScore |=
// pts.nt == GAMESTATE->m_RankingNotesType &&
// GAMESTATE->m_RankingCategory[p] == pts.category &&
// GAMESTATE->m_iRankingIndex[p] == l;
// }
if( bRecentHighScore )
{
@@ -259,20 +316,29 @@ void ScreenRanking::SetPage( PageToShow pts )
m_sprType.Load( THEME->GetPathToG("ScreenRanking type "+GameManager::NotesTypeToString(pts.nt)) );
for( int l=0; l<NUM_RANKING_LINES; l++ )
{
Course::MemCardData::HighScore hs;
if( l < pts.pCourse->m_MemCardDatas[pts.nt][MEMORY_CARD_MACHINE].vHighScores.size() )
{
hs = pts.pCourse->m_MemCardDatas[pts.nt][MEMORY_CARD_MACHINE].vHighScores[l];
}
else
{
hs.sName = EMPTY_SCORE_NAME;
hs.iScore = EMPTY_COURSE_SCORE;
hs.fSurviveTime = EMPTY_COURSE_TIME;
}
m_sprBullets[l].SetDiffuse( RageColor(1,1,1,1) );
CString sName = pts.pCourse->m_RankingScores[pts.nt][l].sName;
const int iScore = pts.pCourse->m_RankingScores[pts.nt][l].iScore;
const float fSurviveTime = pts.pCourse->m_RankingScores[pts.nt][l].fSurviveTime;
m_textNames[l].SetText( sName );
m_textNames[l].SetText( hs.sName );
if( pts.pCourse->IsOni() )
{
m_textPoints[l].SetText( ssprintf("%04d",iScore) );
m_textTime[l].SetText( SecondsToTime(fSurviveTime) );
m_textPoints[l].SetText( ssprintf("%04d",hs.iScore) );
m_textTime[l].SetText( SecondsToTime(hs.fSurviveTime) );
m_textScores[l].SetText( "" );
} else {
m_textPoints[l].SetText( "" );
m_textTime[l].SetText( "" );
m_textScores[l].SetText( ssprintf("%09d",iScore) );
m_textScores[l].SetText( ssprintf("%09d",hs.iScore) );
}
m_textNames[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) );
m_textPoints[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) );
@@ -280,9 +346,12 @@ void ScreenRanking::SetPage( PageToShow pts )
m_textScores[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) );
for( int p=0; p<NUM_PLAYERS; p++ )
{
if( pts.pCourse == GAMESTATE->m_pRankingCourse &&
pts.nt == GAMESTATE->m_RankingNotesType &&
GAMESTATE->m_iRankingIndex[p] == l )
bool bHighlight = false;
// FIXME
// bHighlight = pts.pCourse == GAMESTATE->m_pRankingCourse &&
// pts.nt == GAMESTATE->m_RankingNotesType &&
// GAMESTATE->m_iRankingIndex[p] == l;
if( bHighlight )
{
m_textNames[l].SetEffectGlowBlink(0.1f);
m_textScores[l].SetEffectGlowBlink(0.1f);
@@ -296,6 +365,44 @@ void ScreenRanking::SetPage( PageToShow pts )
}
}
break;
case PageToShow::TYPE_SONG:
{
m_textCategory.SetDiffuseAlpha(0);
m_sprCategory.SetDiffuseAlpha(0);
m_sprCategory.Load( pts.pSong->GetBannerPath() );
m_sprCategory.SetDiffuseAlpha(1);
m_textCategory.SetZoom(1);
m_textCategory.SetTextMaxWidth( CATEGORY_WIDTH, pts.pSong->GetFullTranslitTitle() );
m_textCategory.SetDiffuseAlpha(1);
m_sprType.SetDiffuse( RageColor(1,1,1,1) );
m_sprType.Load( THEME->GetPathToG("ScreenRanking type "+GameManager::NotesTypeToString(pts.nt)) );
for( int l=0; l<NUM_RANKING_LINES; l++ )
{
m_sprBullets[l].SetDiffuse( RageColor(1,1,1,1) );
for( int d=0; d<NUM_DIFFICULTIES; d++ )
{
Difficulty dc = (Difficulty)d;
Steps* pSteps = pts.pSong->GetStepsByDifficulty( pts.nt, dc );
Steps::MemCardData::HighScore hs;
if( l < pSteps->m_MemCardDatas[MEMORY_CARD_MACHINE].vHighScores.size() )
{
hs = pSteps->m_MemCardDatas[MEMORY_CARD_MACHINE].vHighScores[l];
}
else
{
hs.sName = EMPTY_SCORE_NAME;
hs.fScore = EMPTY_SONG_PERCENT;
}
m_textPercent[l][d].SetText( ssprintf("%s %f%", hs.sName.c_str(), hs.fScore) );
}
}
}
break;
default:
ASSERT(0);
}