make more info available from GetRankingFeats

This commit is contained in:
Glenn Maynard
2003-10-15 01:09:29 +00:00
parent 9853c9fb85
commit 01344a6227
4 changed files with 97 additions and 38 deletions
+32 -14
View File
@@ -752,8 +752,11 @@ Character* GameState::GetDefaultCharacter()
return NULL; return NULL;
} }
void GameState::GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vector<CString*> &vpStringsToFillOut ) void GameState::GetRankingFeats( PlayerNumber pn, vector<RankingFeats> &asFeatsOut )
{ {
if( !IsHumanPlayer(pn) )
return;
switch( GAMESTATE->m_PlayMode ) switch( GAMESTATE->m_PlayMode )
{ {
case PLAY_MODE_ARCADE: case PLAY_MODE_ARCADE:
@@ -771,9 +774,15 @@ void GameState::GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vect
if( vHighScores[j].sName != RANKING_TO_FILL_IN_MARKER[pn] ) if( vHighScores[j].sName != RANKING_TO_FILL_IN_MARKER[pn] )
continue; continue;
CString s = ssprintf("No. %d in %s", j+1, pSong->GetFullTranslitTitle().c_str() ); RankingFeats feat;
asFeatsOut.push_back( s ); feat.Type = RankingFeats::SONG;
vpStringsToFillOut.push_back( &vHighScores[j].sName ); feat.Feat = ssprintf("No. %d in %s", j+1, pSong->GetFullTranslitTitle().c_str() );
feat.pStringToFill = &vHighScores[j].sName;
feat.g = vHighScores[j].grade;
feat.Score = vHighScores[j].fScore;
feat.Banner = pSong->GetBannerPath();
asFeatsOut.push_back( feat );
} }
} }
@@ -790,8 +799,13 @@ void GameState::GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vect
if( vHighScores[j].sName != RANKING_TO_FILL_IN_MARKER[pn] ) if( vHighScores[j].sName != RANKING_TO_FILL_IN_MARKER[pn] )
continue; continue;
CString s = ssprintf("No. %d in Type %c (%d)", j+1, 'A'+i, stats.iMeter[pn] ); RankingFeats feat;
vpStringsToFillOut.push_back( &vHighScores[j].sName ); feat.Type = RankingFeats::RANKING;
feat.Feat = ssprintf("No. %d in Type %c (%d)", j+1, 'A'+i, stats.iMeter[pn] );
feat.pStringToFill = &vHighScores[j].sName;
feat.g = GRADE_NO_DATA;
feat.Score = (float) vHighScores[j].iScore;
asFeatsOut.push_back( feat );
} }
} }
} }
@@ -811,9 +825,13 @@ void GameState::GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vect
if( vHighScores[i].sName != RANKING_TO_FILL_IN_MARKER[pn] ) if( vHighScores[i].sName != RANKING_TO_FILL_IN_MARKER[pn] )
continue; continue;
CString s = ssprintf("No. %d in %s", i+1, pCourse->m_sName.c_str() ); RankingFeats feat;
asFeatsOut.push_back( s ); feat.Type = RankingFeats::COURSE;
vpStringsToFillOut.push_back( &vHighScores[i].sName ); feat.Feat = ssprintf("No. %d in %s", i+1, pCourse->m_sName.c_str() );
feat.pStringToFill = &vHighScores[i].sName;
feat.g = GRADE_NO_DATA;
feat.Score = (float) vHighScores[i].iScore;
asFeatsOut.push_back( feat );
} }
} }
break; break;
@@ -824,11 +842,11 @@ void GameState::GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vect
void GameState::StoreRankingName( PlayerNumber pn, CString name ) void GameState::StoreRankingName( PlayerNumber pn, CString name )
{ {
vector<CString*> vpStringsToFill; vector<RankingFeats> aFeats;
CStringArray asFeats; GetRankingFeats( pn, aFeats );
GetRankingFeats( pn, asFeats, vpStringsToFill );
for( unsigned i=0; i<vpStringsToFill.size(); i++ ) for( unsigned i=0; i<aFeats.size(); i++ )
{ {
(*vpStringsToFill[i]) = name; *aFeats[i].pStringToFill = name;
} }
} }
+12 -1
View File
@@ -244,7 +244,18 @@ public:
// //
// Ranking Stuff // Ranking Stuff
// //
void GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vector<CString*> &vpStringsToFillOut ); struct RankingFeats
{
enum { SONG, COURSE, RANKING } Type;
float Score;
Grade g;
CString Banner;
CString Feat;
CString *pStringToFill;
};
void GetRankingFeats( PlayerNumber pn, vector<RankingFeats> &asFeatsOut );
/* Called by name entry screens: */ /* Called by name entry screens: */
void StoreRankingName( PlayerNumber pn, CString name ); void StoreRankingName( PlayerNumber pn, CString name );
+12 -5
View File
@@ -131,14 +131,13 @@ ScreenNameEntry::ScreenNameEntry( CString sClassName ) : Screen( sClassName )
int p; int p;
CStringArray asFeats[NUM_PLAYERS]; vector<GameState::RankingFeats> aFeats[NUM_PLAYERS];
vector<CString*> vpStringsToFill[NUM_PLAYERS];
// Find out if players deserve to enter their name // Find out if players deserve to enter their name
for( p=0; p<NUM_PLAYERS; p++ ) for( p=0; p<NUM_PLAYERS; p++ )
{ {
GAMESTATE->GetRankingFeats( (PlayerNumber)p, asFeats[p], vpStringsToFill[p] ); GAMESTATE->GetRankingFeats( (PlayerNumber)p, aFeats[p] );
m_bStillEnteringName[p] = asFeats[p].size()>0; m_bStillEnteringName[p] = aFeats[p].size()>0;
} }
if( !AnyStillEntering() ) if( !AnyStillEntering() )
@@ -209,7 +208,15 @@ ScreenNameEntry::ScreenNameEntry( CString sClassName ) : Screen( sClassName )
m_textCategory[p].LoadFromFont( THEME->GetPathToF("ScreenNameEntry category") ); m_textCategory[p].LoadFromFont( THEME->GetPathToF("ScreenNameEntry category") );
m_textCategory[p].SetX( (float)GAMESTATE->GetCurrentStyleDef()->m_iCenterX[p] ); m_textCategory[p].SetX( (float)GAMESTATE->GetCurrentStyleDef()->m_iCenterX[p] );
m_textCategory[p].SetY( CATEGORY_Y ); m_textCategory[p].SetY( CATEGORY_Y );
m_textCategory[p].SetText( join("\n", asFeats[p]) ); CString joined;
for( unsigned j = 0; j < aFeats[p].size(); ++j )
{
if( j )
joined += "\n";
joined += aFeats[p][j].Feat;
}
m_textCategory[p].SetText( joined );
this->AddChild( &m_textCategory[p] ); this->AddChild( &m_textCategory[p] );
} }
+41 -18
View File
@@ -31,10 +31,9 @@
// //
// Defines specific to ScreenNameEntryTraditional // Defines specific to ScreenNameEntryTraditional
// //
#define ALPHABET_GAP_X THEME->GetMetricF("ScreenNameEntryTraditional","AlphabetGapX") #define ALPHABET_GAP_X THEME->GetMetricF(m_sName,"AlphabetGapX")
#define NUM_ALPHABET_DISPLAYED THEME->GetMetricI("ScreenNameEntryTraditional","NumAlphabetDisplayed") #define NUM_ALPHABET_DISPLAYED THEME->GetMetricI(m_sName,"NumAlphabetDisplayed")
#define MAX_RANKING_NAME_LENGTH THEME->GetMetricI(m_sName,"MaxRankingNameLength")
#define MAX_RANKING_NAME_LENGTH THEME->GetMetricI("ScreenNameEntryTraditional","MaxRankingNameLength")
static const wchar_t NAME_CHARS[] = static const wchar_t NAME_CHARS[] =
@@ -54,21 +53,44 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S
// DEBUGGING STUFF // DEBUGGING STUFF
if(0)
{
GAMESTATE->m_bSideIsJoined[PLAYER_1] = true; GAMESTATE->m_bSideIsJoined[PLAYER_1] = true;
GAMESTATE->m_bSideIsJoined[PLAYER_2] = true; GAMESTATE->m_bSideIsJoined[PLAYER_2] = true;
GAMESTATE->m_MasterPlayerNumber = PLAYER_1; GAMESTATE->m_MasterPlayerNumber = PLAYER_1;
GAMESTATE->m_PlayMode = PLAY_MODE_ARCADE; GAMESTATE->m_PlayMode = PLAY_MODE_ARCADE;
GAMESTATE->m_CurStyle = STYLE_DANCE_VERSUS;
StageStats st;
st.pSong = SONGMAN->GetRandomSong();
ASSERT( st.pSong );
ASSERT( st.pSong->m_apNotes.size() );
for( int i = 0; i < 2; ++i )
{
GAMESTATE->m_pCurNotes[i] = st.pSteps[i] = st.pSong->m_apNotes[0];
st.iPossibleDancePoints[i] = 1000;
st.iActualDancePoints[i] = 985;
Steps::MemCardData::HighScore hs;
hs.grade = GRADE_A;
hs.fScore = 42;
int a, b;
GAMESTATE->m_pCurNotes[i]->AddHighScore( (PlayerNumber)i, hs, a,b );
}
GAMESTATE->m_vPlayedStageStats.push_back( st );
}
int p; int p;
CStringArray asFeats[NUM_PLAYERS]; vector<GameState::RankingFeats> aFeats[NUM_PLAYERS];
vector<CString*> vpStringsToFill[NUM_PLAYERS];
// Find out if players deserve to enter their name // Find out if players deserve to enter their name
for( p=0; p<NUM_PLAYERS; p++ ) for( p=0; p<NUM_PLAYERS; p++ )
{ {
GAMESTATE->GetRankingFeats( (PlayerNumber)p, asFeats[p], vpStringsToFill[p] ); GAMESTATE->GetRankingFeats( (PlayerNumber)p, aFeats[p] );
m_bStillEnteringName[p] = asFeats[p].size()>0; m_bStillEnteringName[p] = aFeats[p].size()>0;
} }
if( !AnyStillEntering() ) if( !AnyStillEntering() )
@@ -145,11 +167,10 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S
SET_XY_AND_ON_COMMAND( m_Grade[p] ); SET_XY_AND_ON_COMMAND( m_Grade[p] );
this->AddChild( &m_Grade[p] ); this->AddChild( &m_Grade[p] );
/* XXX: merge this with ScreenNameEntry */
m_textCategory[p].LoadFromFont( THEME->GetPathToF("ScreenNameEntryTraditional category") ); m_textCategory[p].LoadFromFont( THEME->GetPathToF("ScreenNameEntryTraditional category") );
m_textCategory[p].SetName( ssprintf("Category", p+1) ); m_textCategory[p].SetName( ssprintf("Category", p+1) );
SET_XY_AND_ON_COMMAND( m_textCategory[p] ); SET_XY_AND_ON_COMMAND( m_textCategory[p] );
m_textCategory[p].SetText( join("\n", asFeats[p]) ); // m_textCategory[p].SetText( join("\n", asFeats[p]) );
this->AddChild( &m_textCategory[p] ); this->AddChild( &m_textCategory[p] );
} }
@@ -183,7 +204,7 @@ void ScreenNameEntryTraditional::PositionCharsAndCursor( int pn )
const bool hidden = ( Pos < First || Pos > Last ); const bool hidden = ( Pos < First || Pos > Last );
const int ActualPos = clamp( Pos, First-1, Last+1 ); const int ActualPos = clamp( Pos, First-1, Last+1 );
bt->Command("stoptweening;accelerate,.12"); bt->Command("stoptweening;decelerate,.12");
bt->SetX( ActualPos * ALPHABET_GAP_X ); bt->SetX( ActualPos * ALPHABET_GAP_X );
bt->SetDiffuseAlpha( hidden? 0.0f:1.0f ); bt->SetDiffuseAlpha( hidden? 0.0f:1.0f );
} }
@@ -265,6 +286,8 @@ void ScreenNameEntryTraditional::Finish( PlayerNumber pn )
return; return;
m_bStillEnteringName[pn] = false; m_bStillEnteringName[pn] = false;
UpdateSelectionText( pn ); /* hide NAME_ cursor */
CString selection = WStringToCString( m_sSelection[pn] ); CString selection = WStringToCString( m_sSelection[pn] );
TrimRight( selection, " " ); TrimRight( selection, " " );
TrimLeft( selection, " " ); TrimLeft( selection, " " );
@@ -281,7 +304,7 @@ void ScreenNameEntryTraditional::Finish( PlayerNumber pn )
void ScreenNameEntryTraditional::UpdateSelectionText( int pn ) void ScreenNameEntryTraditional::UpdateSelectionText( int pn )
{ {
wstring text = m_sSelection[pn]; wstring text = m_sSelection[pn];
if( (int) text.size() < MAX_RANKING_NAME_LENGTH ) if( m_bStillEnteringName[pn] && (int) text.size() < MAX_RANKING_NAME_LENGTH )
text += L"_"; text += L"_";
m_textSelection[pn].SetText( WStringToCString(text) ); m_textSelection[pn].SetText( WStringToCString(text) );
@@ -289,8 +312,8 @@ void ScreenNameEntryTraditional::UpdateSelectionText( int pn )
void ScreenNameEntryTraditional::MenuStart( PlayerNumber pn, const InputEventType type ) void ScreenNameEntryTraditional::MenuStart( PlayerNumber pn, const InputEventType type )
{ {
if( m_Menu.IsTransitioning() ) if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() )
return; return;
if( type == IET_RELEASE ) if( type == IET_RELEASE )
return; // ignore return; // ignore
@@ -328,8 +351,8 @@ void ScreenNameEntryTraditional::MenuStart( PlayerNumber pn, const InputEventTyp
void ScreenNameEntryTraditional::MenuLeft( PlayerNumber pn, const InputEventType type ) void ScreenNameEntryTraditional::MenuLeft( PlayerNumber pn, const InputEventType type )
{ {
if( m_Menu.IsTransitioning() ) if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() )
return; return;
if( type == IET_RELEASE ) if( type == IET_RELEASE )
return; // ignore return; // ignore
@@ -340,8 +363,8 @@ void ScreenNameEntryTraditional::MenuLeft( PlayerNumber pn, const InputEventType
void ScreenNameEntryTraditional::MenuRight( PlayerNumber pn, const InputEventType type ) void ScreenNameEntryTraditional::MenuRight( PlayerNumber pn, const InputEventType type )
{ {
if( m_Menu.IsTransitioning() ) if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() )
return; return;
if( type == IET_RELEASE ) if( type == IET_RELEASE )
return; // ignore return; // ignore