make more info available from GetRankingFeats
This commit is contained in:
+32
-14
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|||||||
@@ -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] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user