diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 1c360d4df8..2544825e03 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -752,8 +752,11 @@ Character* GameState::GetDefaultCharacter() return NULL; } -void GameState::GetRankingFeats( PlayerNumber pn, CStringArray &asFeatsOut, vector &vpStringsToFillOut ) +void GameState::GetRankingFeats( PlayerNumber pn, vector &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 vpStringsToFill; - CStringArray asFeats; - GetRankingFeats( pn, asFeats, vpStringsToFill ); - for( unsigned i=0; i aFeats; + GetRankingFeats( pn, aFeats ); + + for( unsigned i=0; i &vpStringsToFillOut ); + struct RankingFeats + { + enum { SONG, COURSE, RANKING } Type; + + float Score; + Grade g; + CString Banner; + CString Feat; + CString *pStringToFill; + }; + + void GetRankingFeats( PlayerNumber pn, vector &asFeatsOut ); /* Called by name entry screens: */ void StoreRankingName( PlayerNumber pn, CString name ); diff --git a/stepmania/src/ScreenNameEntry.cpp b/stepmania/src/ScreenNameEntry.cpp index 920f145f1a..8ddaf81610 100644 --- a/stepmania/src/ScreenNameEntry.cpp +++ b/stepmania/src/ScreenNameEntry.cpp @@ -131,14 +131,13 @@ ScreenNameEntry::ScreenNameEntry( CString sClassName ) : Screen( sClassName ) int p; - CStringArray asFeats[NUM_PLAYERS]; - vector vpStringsToFill[NUM_PLAYERS]; + vector aFeats[NUM_PLAYERS]; // Find out if players deserve to enter their name for( p=0; pGetRankingFeats( (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] ); } diff --git a/stepmania/src/ScreenNameEntryTraditional.cpp b/stepmania/src/ScreenNameEntryTraditional.cpp index dec19e45c5..5279dcfd29 100644 --- a/stepmania/src/ScreenNameEntryTraditional.cpp +++ b/stepmania/src/ScreenNameEntryTraditional.cpp @@ -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 vpStringsToFill[NUM_PLAYERS]; + vector aFeats[NUM_PLAYERS]; // Find out if players deserve to enter their name for( p=0; pGetRankingFeats( (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,8 +312,8 @@ void ScreenNameEntryTraditional::UpdateSelectionText( int pn ) void ScreenNameEntryTraditional::MenuStart( PlayerNumber pn, const InputEventType type ) { - if( m_Menu.IsTransitioning() ) - return; + if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() ) + return; if( type == IET_RELEASE ) return; // ignore @@ -328,8 +351,8 @@ void ScreenNameEntryTraditional::MenuStart( PlayerNumber pn, const InputEventTyp void ScreenNameEntryTraditional::MenuLeft( PlayerNumber pn, const InputEventType type ) { - if( m_Menu.IsTransitioning() ) - return; + if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() ) + return; if( type == IET_RELEASE ) return; // ignore @@ -340,8 +363,8 @@ void ScreenNameEntryTraditional::MenuLeft( PlayerNumber pn, const InputEventType void ScreenNameEntryTraditional::MenuRight( PlayerNumber pn, const InputEventType type ) { - if( m_Menu.IsTransitioning() ) - return; + if( !m_bStillEnteringName[pn] || m_Menu.IsTransitioning() ) + return; if( type == IET_RELEASE ) return; // ignore