make more info available from GetRankingFeats
This commit is contained in:
+32
-14
@@ -752,8 +752,11 @@ Character* GameState::GetDefaultCharacter()
|
||||
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 )
|
||||
{
|
||||
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] )
|
||||
continue;
|
||||
|
||||
CString s = ssprintf("No. %d in %s", j+1, pSong->GetFullTranslitTitle().c_str() );
|
||||
asFeatsOut.push_back( s );
|
||||
vpStringsToFillOut.push_back( &vHighScores[j].sName );
|
||||
RankingFeats feat;
|
||||
feat.Type = RankingFeats::SONG;
|
||||
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] )
|
||||
continue;
|
||||
|
||||
CString s = ssprintf("No. %d in Type %c (%d)", j+1, 'A'+i, stats.iMeter[pn] );
|
||||
vpStringsToFillOut.push_back( &vHighScores[j].sName );
|
||||
RankingFeats feat;
|
||||
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] )
|
||||
continue;
|
||||
|
||||
CString s = ssprintf("No. %d in %s", i+1, pCourse->m_sName.c_str() );
|
||||
asFeatsOut.push_back( s );
|
||||
vpStringsToFillOut.push_back( &vHighScores[i].sName );
|
||||
RankingFeats feat;
|
||||
feat.Type = RankingFeats::COURSE;
|
||||
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;
|
||||
@@ -824,11 +842,11 @@ void GameState::GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vect
|
||||
|
||||
void GameState::StoreRankingName( PlayerNumber pn, CString name )
|
||||
{
|
||||
vector<CString*> vpStringsToFill;
|
||||
CStringArray asFeats;
|
||||
GetRankingFeats( pn, asFeats, vpStringsToFill );
|
||||
for( unsigned i=0; i<vpStringsToFill.size(); i++ )
|
||||
vector<RankingFeats> aFeats;
|
||||
GetRankingFeats( pn, aFeats );
|
||||
|
||||
for( unsigned i=0; i<aFeats.size(); i++ )
|
||||
{
|
||||
(*vpStringsToFill[i]) = name;
|
||||
*aFeats[i].pStringToFill = name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,7 +244,18 @@ public:
|
||||
//
|
||||
// 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: */
|
||||
void StoreRankingName( PlayerNumber pn, CString name );
|
||||
|
||||
@@ -131,14 +131,13 @@ ScreenNameEntry::ScreenNameEntry( CString sClassName ) : Screen( sClassName )
|
||||
|
||||
int p;
|
||||
|
||||
CStringArray asFeats[NUM_PLAYERS];
|
||||
vector<CString*> vpStringsToFill[NUM_PLAYERS];
|
||||
vector<GameState::RankingFeats> aFeats[NUM_PLAYERS];
|
||||
|
||||
// Find out if players deserve to enter their name
|
||||
for( p=0; p<NUM_PLAYERS; p++ )
|
||||
{
|
||||
GAMESTATE->GetRankingFeats( (PlayerNumber)p, asFeats[p], vpStringsToFill[p] );
|
||||
m_bStillEnteringName[p] = asFeats[p].size()>0;
|
||||
GAMESTATE->GetRankingFeats( (PlayerNumber)p, aFeats[p] );
|
||||
m_bStillEnteringName[p] = aFeats[p].size()>0;
|
||||
}
|
||||
|
||||
if( !AnyStillEntering() )
|
||||
@@ -209,7 +208,15 @@ ScreenNameEntry::ScreenNameEntry( CString sClassName ) : Screen( sClassName )
|
||||
m_textCategory[p].LoadFromFont( THEME->GetPathToF("ScreenNameEntry category") );
|
||||
m_textCategory[p].SetX( (float)GAMESTATE->GetCurrentStyleDef()->m_iCenterX[p] );
|
||||
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] );
|
||||
}
|
||||
|
||||
|
||||
@@ -31,10 +31,9 @@
|
||||
//
|
||||
// Defines specific to ScreenNameEntryTraditional
|
||||
//
|
||||
#define ALPHABET_GAP_X THEME->GetMetricF("ScreenNameEntryTraditional","AlphabetGapX")
|
||||
#define NUM_ALPHABET_DISPLAYED THEME->GetMetricI("ScreenNameEntryTraditional","NumAlphabetDisplayed")
|
||||
|
||||
#define MAX_RANKING_NAME_LENGTH THEME->GetMetricI("ScreenNameEntryTraditional","MaxRankingNameLength")
|
||||
#define ALPHABET_GAP_X THEME->GetMetricF(m_sName,"AlphabetGapX")
|
||||
#define NUM_ALPHABET_DISPLAYED THEME->GetMetricI(m_sName,"NumAlphabetDisplayed")
|
||||
#define MAX_RANKING_NAME_LENGTH THEME->GetMetricI(m_sName,"MaxRankingNameLength")
|
||||
|
||||
|
||||
static const wchar_t NAME_CHARS[] =
|
||||
@@ -54,21 +53,44 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S
|
||||
|
||||
|
||||
// DEBUGGING STUFF
|
||||
if(0)
|
||||
{
|
||||
GAMESTATE->m_bSideIsJoined[PLAYER_1] = true;
|
||||
GAMESTATE->m_bSideIsJoined[PLAYER_2] = true;
|
||||
GAMESTATE->m_MasterPlayerNumber = PLAYER_1;
|
||||
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;
|
||||
|
||||
CStringArray asFeats[NUM_PLAYERS];
|
||||
vector<CString*> vpStringsToFill[NUM_PLAYERS];
|
||||
vector<GameState::RankingFeats> aFeats[NUM_PLAYERS];
|
||||
|
||||
// Find out if players deserve to enter their name
|
||||
for( p=0; p<NUM_PLAYERS; p++ )
|
||||
{
|
||||
GAMESTATE->GetRankingFeats( (PlayerNumber)p, asFeats[p], vpStringsToFill[p] );
|
||||
m_bStillEnteringName[p] = asFeats[p].size()>0;
|
||||
GAMESTATE->GetRankingFeats( (PlayerNumber)p, aFeats[p] );
|
||||
m_bStillEnteringName[p] = aFeats[p].size()>0;
|
||||
}
|
||||
|
||||
if( !AnyStillEntering() )
|
||||
@@ -145,11 +167,10 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S
|
||||
SET_XY_AND_ON_COMMAND( m_Grade[p] );
|
||||
this->AddChild( &m_Grade[p] );
|
||||
|
||||
/* XXX: merge this with ScreenNameEntry */
|
||||
m_textCategory[p].LoadFromFont( THEME->GetPathToF("ScreenNameEntryTraditional category") );
|
||||
m_textCategory[p].SetName( ssprintf("Category", p+1) );
|
||||
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] );
|
||||
}
|
||||
|
||||
@@ -183,7 +204,7 @@ void ScreenNameEntryTraditional::PositionCharsAndCursor( int pn )
|
||||
const bool hidden = ( Pos < First || Pos > Last );
|
||||
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->SetDiffuseAlpha( hidden? 0.0f:1.0f );
|
||||
}
|
||||
@@ -265,6 +286,8 @@ void ScreenNameEntryTraditional::Finish( PlayerNumber pn )
|
||||
return;
|
||||
m_bStillEnteringName[pn] = false;
|
||||
|
||||
UpdateSelectionText( pn ); /* hide NAME_ cursor */
|
||||
|
||||
CString selection = WStringToCString( m_sSelection[pn] );
|
||||
TrimRight( selection, " " );
|
||||
TrimLeft( selection, " " );
|
||||
@@ -281,7 +304,7 @@ void ScreenNameEntryTraditional::Finish( PlayerNumber pn )
|
||||
void ScreenNameEntryTraditional::UpdateSelectionText( int 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"_";
|
||||
|
||||
m_textSelection[pn].SetText( WStringToCString(text) );
|
||||
@@ -289,7 +312,7 @@ void ScreenNameEntryTraditional::UpdateSelectionText( int pn )
|
||||
|
||||
void ScreenNameEntryTraditional::MenuStart( PlayerNumber pn, const InputEventType type )
|
||||
{
|
||||
if( m_Menu.IsTransitioning() )
|
||||
if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() )
|
||||
return;
|
||||
if( type == IET_RELEASE )
|
||||
return; // ignore
|
||||
@@ -328,7 +351,7 @@ void ScreenNameEntryTraditional::MenuStart( PlayerNumber pn, const InputEventTyp
|
||||
|
||||
void ScreenNameEntryTraditional::MenuLeft( PlayerNumber pn, const InputEventType type )
|
||||
{
|
||||
if( m_Menu.IsTransitioning() )
|
||||
if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() )
|
||||
return;
|
||||
if( type == IET_RELEASE )
|
||||
return; // ignore
|
||||
@@ -340,7 +363,7 @@ void ScreenNameEntryTraditional::MenuLeft( PlayerNumber pn, const InputEventType
|
||||
|
||||
void ScreenNameEntryTraditional::MenuRight( PlayerNumber pn, const InputEventType type )
|
||||
{
|
||||
if( m_Menu.IsTransitioning() )
|
||||
if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() )
|
||||
return;
|
||||
if( type == IET_RELEASE )
|
||||
return; // ignore
|
||||
|
||||
Reference in New Issue
Block a user