diff --git a/stepmania/src/GradeDisplay.cpp b/stepmania/src/GradeDisplay.cpp index f1c905c090..2b39f3c509 100644 --- a/stepmania/src/GradeDisplay.cpp +++ b/stepmania/src/GradeDisplay.cpp @@ -4,69 +4,28 @@ #include "arch/Dialog/Dialog.h" #include "RageLog.h" #include "ActorUtil.h" +#include "ThemeManager.h" REGISTER_ACTOR_CLASS( GradeDisplay ) -void GradeDisplay::Load( RageTextureID ID ) +void GradeDisplay::Load( RString sMetricsGroup ) { - Sprite::Load( ID ); - Sprite::StopAnimating(); - - bool bWarn = Sprite::GetNumStates() != 8 && Sprite::GetNumStates() != 16; - if( ID.filename.find("_blank") != RString::npos ) - bWarn = false; - if( bWarn ) + ASSERT( m_vSpr.empty() ); + FOREACH_UsedGrade( g ) { - RString sError = ssprintf( "The grade graphic '%s' must have either 8 or 16 frames.", ID.filename.c_str() ); - LOG->Warn( sError ); - Dialog::OK( sError ); + m_vSpr.resize( m_vSpr.size()+1 ); + m_vSpr.back().Load( THEME->GetPathG(sMetricsGroup,GradeToString(g)) ); + m_vSpr.back()->SetVisible( false ); } } -int GradeDisplay::GetFrameIndex( PlayerNumber pn, Grade g ) +void GradeDisplay::SetGrade( Grade grade ) { - if( Sprite::GetNumStates() == 1 ) - return 0; - - // either 8, or 16 states - int iNumCols; - switch( Sprite::GetNumStates() ) + int i = 0; + FOREACH_UsedGrade( g ) { - case 8: iNumCols=1; break; - case 16: iNumCols=2; break; - default: - ASSERT(0); - } - - int iFrame; - switch( g ) - { - case Grade_Tier01: iFrame = 0; break; - case Grade_Tier02: iFrame = 1; break; - case Grade_Tier03: iFrame = 2; break; - case Grade_Tier04: iFrame = 3; break; - case Grade_Tier05: iFrame = 4; break; - case Grade_Tier06: iFrame = 5; break; - case Grade_Tier07: iFrame = 6; break; - default: iFrame = 6; break; - case Grade_Failed: iFrame = 7; break; - } - iFrame *= iNumCols; - if( iNumCols==2 ) - iFrame += pn; - return iFrame; -} - -void GradeDisplay::SetGrade( PlayerNumber pn, Grade g ) -{ - if( g != Grade_NoData ) - { - SetState( GetFrameIndex(pn,g) ); - SetVisible( true ); - } - else - { - SetVisible( false ); + m_vSpr[i]->SetVisible( g == grade ); + i++; } } @@ -78,15 +37,13 @@ class LunaGradeDisplay: public Luna public: static int Load( T* p, lua_State *L ) { - RageTextureID id( SArg(1) ); - p->Load( id ); + p->Load( SArg(1) ); return 0; } static int SetGrade( T* p, lua_State *L ) { - PlayerNumber pn = Enum::Check(L, 1); Grade g = Enum::Check(L, 2); - p->SetGrade( pn, g ); + p->SetGrade( g ); return 0; } diff --git a/stepmania/src/GradeDisplay.h b/stepmania/src/GradeDisplay.h index c4e52c58e8..ec88ca4b2c 100644 --- a/stepmania/src/GradeDisplay.h +++ b/stepmania/src/GradeDisplay.h @@ -6,22 +6,21 @@ #include "Sprite.h" #include "Grade.h" #include "PlayerNumber.h" +#include "AutoActor.h" struct lua_State; class GradeDisplay : public Sprite { public: - virtual void Load( RageTextureID ID ); - void SetGrade( PlayerNumber pn, Grade g ); + virtual void Load( RString sMetricsGroup ); + void SetGrade( Grade g ); -protected: - int GetFrameIndex( PlayerNumber pn, Grade g ); - -public: virtual GradeDisplay *Copy() const; // Lua void PushSelf( lua_State *L ); +protected: + vector m_vSpr; }; #endif diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index b07a48253e..6ab43b6e5c 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -176,6 +176,8 @@ void ScreenEvaluation::Init() } } + + ASSERT( !STATSMAN->m_vPlayedStageStats.empty() ); m_pStageStats = &STATSMAN->m_vPlayedStageStats.back(); ZERO( m_bSavedScreenshot ); @@ -255,7 +257,7 @@ void ScreenEvaluation::Init() SET_XY( m_SmallBanner[i] ); this->AddChild( &m_SmallBanner[i] ); - m_sprSmallBannerFrame[i].Load( THEME->GetPathG(m_sName,"banner frame") ); + m_sprSmallBannerFrame[i].Load( THEME->GetPathG(m_sName,"BannerFrame") ); m_sprSmallBannerFrame[i]->SetName( ssprintf("SmallBanner%d",i+1) ); ActorUtil::LoadAllCommands( *m_sprSmallBannerFrame[i], m_sName ); SET_XY( m_sprSmallBannerFrame[i] ); @@ -274,7 +276,7 @@ void ScreenEvaluation::Init() SET_XY( m_LargeBanner ); this->AddChild( &m_LargeBanner ); - m_sprLargeBannerFrame.Load( THEME->GetPathG(m_sName,"banner frame") ); + m_sprLargeBannerFrame.Load( THEME->GetPathG(m_sName,"BannerFrame") ); m_sprLargeBannerFrame->SetName( "LargeBannerFrame" ); ActorUtil::LoadAllCommands( *m_sprLargeBannerFrame, m_sName ); SET_XY( m_sprLargeBannerFrame ); @@ -307,14 +309,15 @@ void ScreenEvaluation::Init() { FOREACH_EnabledPlayer( p ) { - m_sprGradeFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("grade frame p%d",p+1)) ); + m_sprGradeFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("GradeFrame p%d",p+1)) ); m_sprGradeFrame[p]->SetName( ssprintf("GradeFrameP%d",p+1) ); ActorUtil::LoadAllCommands( *m_sprGradeFrame[p], m_sName ); SET_XY( m_sprGradeFrame[p] ); this->AddChild( m_sprGradeFrame[p] ); - m_Grades[p].Load( THEME->GetPathG(m_sName,"grades") ); - m_Grades[p].SetGrade( p, grade[p] ); + // TODO: Re-add scrolling grade functionality + m_Grades[p].Load( "GradeDisplayEval" ); + m_Grades[p].SetGrade( grade[p] ); m_Grades[p].SetName( ssprintf("GradeP%d",p+1) ); ActorUtil::LoadAllCommands( m_Grades[p], m_sName ); SET_XY( m_Grades[p] ); @@ -352,7 +355,7 @@ void ScreenEvaluation::Init() { FOREACH_EnabledPlayer( p ) { - m_sprBonusFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("bonus frame p%d",p+1)) ); + m_sprBonusFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("BonusFrame p%d",p+1)) ); m_sprBonusFrame[p]->SetName( ssprintf("BonusFrameP%d",p+1) ); ActorUtil::LoadAllCommands( *m_sprBonusFrame[p], m_sName ); SET_XY( m_sprBonusFrame[p] ); @@ -360,14 +363,14 @@ void ScreenEvaluation::Init() for( int r=0; rGetPathG(m_sName,ssprintf("bar possible p%d",p+1)) ); + m_sprPossibleBar[p][r].Load( THEME->GetPathG(m_sName,ssprintf("BarPossible p%d",p+1)) ); m_sprPossibleBar[p][r].SetWidth( m_sprPossibleBar[p][r].GetUnzoomedWidth() * m_pStageStats->m_player[p].m_radarPossible[r] ); m_sprPossibleBar[p][r].SetName( ssprintf("BarPossible%dP%d",r+1,p+1) ); ActorUtil::LoadAllCommands( m_sprPossibleBar[p][r], m_sName ); SET_XY( m_sprPossibleBar[p][r] ); this->AddChild( &m_sprPossibleBar[p][r] ); - m_sprActualBar[p][r].Load( THEME->GetPathG(m_sName,ssprintf("bar actual p%d",p+1)) ); + m_sprActualBar[p][r].Load( THEME->GetPathG(m_sName,ssprintf("BarActual p%d",p+1)) ); // should be out of the possible bar, not actual (whatever value that is at) m_sprActualBar[p][r].SetWidth( m_sprPossibleBar[p][r].GetUnzoomedWidth() * m_pStageStats->m_player[p].m_radarActual[r] ); @@ -393,7 +396,7 @@ void ScreenEvaluation::Init() { FOREACH_EnabledPlayer( p ) { - m_sprSurvivedFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("survived frame p%d",p+1)) ); + m_sprSurvivedFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("SurvivedFrame p%d",p+1)) ); m_sprSurvivedFrame[p]->SetName( ssprintf("SurvivedFrameP%d",p+1) ); ActorUtil::LoadAllCommands( *m_sprSurvivedFrame[p], m_sName ); SET_XY( m_sprSurvivedFrame[p] ); @@ -447,13 +450,11 @@ void ScreenEvaluation::Init() { if( SHOW_JUDGMENT_LABELS ) { - m_sprJudgeLabels[l].Load( THEME->GetPathG(m_sName,"judge labels") ); - m_sprJudgeLabels[l].StopAnimating(); - m_sprJudgeLabels[l].SetState( l ); - m_sprJudgeLabels[l].SetName( JudgeLineToString(l)+"Label" ); + m_sprJudgeLabels[l].Load( THEME->GetPathG(m_sName,"JudgeLabel " + JudgeLineToString(l)) ); + m_sprJudgeLabels[l]->SetName( JudgeLineToString(l)+"Label" ); ActorUtil::LoadAllCommands( m_sprJudgeLabels[l], m_sName ); SET_XY( m_sprJudgeLabels[l] ); - this->AddChild( &m_sprJudgeLabels[l] ); + this->AddChild( m_sprJudgeLabels[l] ); } FOREACH_EnabledPlayer( p ) @@ -528,7 +529,7 @@ void ScreenEvaluation::Init() // if( SHOW_SCORE_AREA ) { - m_sprScoreLabel.Load( THEME->GetPathG(m_sName,"score label") ); + m_sprScoreLabel.Load( THEME->GetPathG(m_sName,"ScoreLabel") ); m_sprScoreLabel->SetName( "ScoreLabel" ); ActorUtil::LoadAllCommands( *m_sprScoreLabel, m_sName ); SET_XY( m_sprScoreLabel ); diff --git a/stepmania/src/ScreenEvaluation.h b/stepmania/src/ScreenEvaluation.h index 8359642b9e..f7bfc59edc 100644 --- a/stepmania/src/ScreenEvaluation.h +++ b/stepmania/src/ScreenEvaluation.h @@ -88,7 +88,7 @@ protected: Sprite m_sprWin[NUM_PLAYERS]; // judgment area - Sprite m_sprJudgeLabels[NUM_JudgeLine]; + AutoActor m_sprJudgeLabels[NUM_JudgeLine]; BitmapText m_textJudgeNumbers[NUM_JudgeLine][NUM_PLAYERS]; // stats area diff --git a/stepmania/src/ScreenNetEvaluation.cpp b/stepmania/src/ScreenNetEvaluation.cpp index d6e9500d3c..ebad0b2234 100644 --- a/stepmania/src/ScreenNetEvaluation.cpp +++ b/stepmania/src/ScreenNetEvaluation.cpp @@ -179,7 +179,7 @@ void ScreenNetEvaluation::UpdateStats() if( m_iCurrentPlayer >= (int) NSMAN->m_EvalPlayerData.size() ) return; - m_Grades[m_pActivePlayer].SetGrade( m_pActivePlayer, (Grade)NSMAN->m_EvalPlayerData[m_iCurrentPlayer].grade ); + m_Grades[m_pActivePlayer].SetGrade( (Grade)NSMAN->m_EvalPlayerData[m_iCurrentPlayer].grade ); m_textScore[m_pActivePlayer].SetText( ssprintf("%*.0i", NUM_SCORE_DIGITS, NSMAN->m_EvalPlayerData[m_iCurrentPlayer].score) );