From 418996a5e27f8786c8816df9b320dfad0edd95ce Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Fri, 4 Apr 2008 18:24:35 +0000 Subject: [PATCH] fix broken GradeDisplay --- stepmania/src/CatalogXml.cpp | 2 +- stepmania/src/Grade.cpp | 13 +++++++++++++ stepmania/src/Grade.h | 6 +++++- stepmania/src/GradeDisplay.cpp | 16 ++++++++++------ stepmania/src/GradeDisplay.h | 4 ++-- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/stepmania/src/CatalogXml.cpp b/stepmania/src/CatalogXml.cpp index 0ae814558f..61287c9b0e 100644 --- a/stepmania/src/CatalogXml.cpp +++ b/stepmania/src/CatalogXml.cpp @@ -340,7 +340,7 @@ void CatalogXml::Save( LoadingWindow *loading_window ) { XNode* pNode2 = pNode->AppendChild( "Grade" ); - FOREACH_UsedGrade( g ) + FOREACH_PossibleGrade( g ) { XNode* pNode3 = pNode2->AppendChild( "Grade", GradeToString(g) ); pNode3->AppendAttr( "DisplayAs", GradeToLocalizedString(g) ); diff --git a/stepmania/src/Grade.cpp b/stepmania/src/Grade.cpp index 70f1d428b1..3935620cf7 100644 --- a/stepmania/src/Grade.cpp +++ b/stepmania/src/Grade.cpp @@ -8,6 +8,19 @@ LuaXType( Grade ); +ThemeMetric NUM_GRADE_TIERS_USED("PlayerStageStats","NumGradeTiersUsed"); + +Grade GetNextPossibleGrade( Grade g ) +{ + if( g < NUM_GRADE_TIERS_USED - 1 ) + return (Grade)(g+1); + else if( g == NUM_GRADE_TIERS_USED - 1 ) + return Grade_Failed; + else + return Grade_Invalid; +} + + RString GradeToLocalizedString( Grade g ) { RString s = GradeToString(g); diff --git a/stepmania/src/Grade.h b/stepmania/src/Grade.h index f2d1ff3664..eeef033b6c 100644 --- a/stepmania/src/Grade.h +++ b/stepmania/src/Grade.h @@ -5,6 +5,7 @@ #include "RageUtil.h" #include "EnumHelper.h" +#include "ThemeMetric.h" #define NUM_Grade_TierS 20 enum Grade @@ -53,7 +54,10 @@ RString GradeToOldString( Grade g ); // "AAA", "B", etc for backward compatibili RString GradeToLocalizedString( Grade g ); Grade StringToGrade( const RString &s ); LuaDeclareType( Grade ); -#define FOREACH_UsedGrade( g ) FOREACH_ENUM_N( Grade, THEME->GetMetricI("PlayerStageStats","NumGradeTiersUsed"), g ) +extern ThemeMetric NUM_GRADE_TIERS_USED; +#define NUM_POSSIBLE_GRADES (NUM_GRADE_TIERS_USED+1) +Grade GetNextPossibleGrade( Grade g ); +#define FOREACH_PossibleGrade( g ) for( Grade g = (Grade)(0); g != Grade_Invalid; g = GetNextPossibleGrade(g) ) #endif diff --git a/stepmania/src/GradeDisplay.cpp b/stepmania/src/GradeDisplay.cpp index 2b39f3c509..9f8f636aa1 100644 --- a/stepmania/src/GradeDisplay.cpp +++ b/stepmania/src/GradeDisplay.cpp @@ -11,18 +11,22 @@ REGISTER_ACTOR_CLASS( GradeDisplay ) void GradeDisplay::Load( RString sMetricsGroup ) { ASSERT( m_vSpr.empty() ); - FOREACH_UsedGrade( g ) + m_vSpr.resize( NUM_POSSIBLE_GRADES ); + int i = 0; + FOREACH_PossibleGrade( g ) { - m_vSpr.resize( m_vSpr.size()+1 ); - m_vSpr.back().Load( THEME->GetPathG(sMetricsGroup,GradeToString(g)) ); - m_vSpr.back()->SetVisible( false ); + AutoActor &spr = m_vSpr[i]; + spr.Load( THEME->GetPathG(sMetricsGroup,GradeToString(g)) ); + spr->SetVisible( false ); + this->AddChild( spr ); + i++; } } void GradeDisplay::SetGrade( Grade grade ) { int i = 0; - FOREACH_UsedGrade( g ) + FOREACH_PossibleGrade( g ) { m_vSpr[i]->SetVisible( g == grade ); i++; @@ -54,7 +58,7 @@ public: } }; -LUA_REGISTER_DERIVED_CLASS( GradeDisplay, Sprite ) +LUA_REGISTER_DERIVED_CLASS( GradeDisplay, ActorFrame ) // lua end /* diff --git a/stepmania/src/GradeDisplay.h b/stepmania/src/GradeDisplay.h index ec88ca4b2c..7a5178bf9c 100644 --- a/stepmania/src/GradeDisplay.h +++ b/stepmania/src/GradeDisplay.h @@ -3,13 +3,13 @@ #ifndef GRADE_DISPLAY_H #define GRADE_DISPLAY_H -#include "Sprite.h" +#include "ActorFrame.h" #include "Grade.h" #include "PlayerNumber.h" #include "AutoActor.h" struct lua_State; -class GradeDisplay : public Sprite +class GradeDisplay : public ActorFrame { public: virtual void Load( RString sMetricsGroup );