From ac68dd3c5796e749171f71365f03885a326931bf Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Fri, 15 Sep 2006 04:40:27 +0000 Subject: [PATCH] Don't use ints for enums. --- stepmania/src/GameState.cpp | 9 ++++----- stepmania/src/Grade.cpp | 12 ++++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index d3ce0efb6f..41b73711ab 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -60,8 +60,8 @@ Song* GameState::GetDefaultSong() const return sid.ToSong(); } -static const ThemeMetric GRADE_TIER_FOR_EXTRA_1 ("GameState","GradeTierForExtra1"); -static const ThemeMetric GRADE_TIER_FOR_EXTRA_2 ("GameState","GradeTierForExtra2"); +static const ThemeMetricEnum GRADE_TIER_FOR_EXTRA_1 ("GameState","GradeTierForExtra1"); +static const ThemeMetricEnum GRADE_TIER_FOR_EXTRA_2 ("GameState","GradeTierForExtra2"); static DynamicThemeMetric ARE_STAGE_MODS_FORCED( "GameState","AreStageModsForced" ); @@ -1000,9 +1000,8 @@ bool GameState::HasEarnedExtraStage() const m_pCurSteps[pn]->GetDifficulty() != DIFFICULTY_CHALLENGE ) continue; /* not hard enough! */ - // Grading tiers start with 1 on metrics, but 0 on enums. That is why you must subtract 1. --Jason Felds - if ( ( IsFinalStage() && STATSMAN->m_CurStageStats.m_player[pn].GetGrade() <= GRADE_TIER_FOR_EXTRA_1 - 1 ) || - ( IsExtraStage() && STATSMAN->m_CurStageStats.m_player[pn].GetGrade() <= GRADE_TIER_FOR_EXTRA_2 - 1 ) ) + if( (IsFinalStage() && STATSMAN->m_CurStageStats.m_player[pn].GetGrade() <= GRADE_TIER_FOR_EXTRA_1) || + (IsExtraStage() && STATSMAN->m_CurStageStats.m_player[pn].GetGrade() <= GRADE_TIER_FOR_EXTRA_2) ) { bOnePassed = true; break; diff --git a/stepmania/src/Grade.cpp b/stepmania/src/Grade.cpp index b252f09c53..b64cda078b 100644 --- a/stepmania/src/Grade.cpp +++ b/stepmania/src/Grade.cpp @@ -31,7 +31,7 @@ RString GradeToOldString( Grade g ) case Grade_Tier07: return "D"; case Grade_Failed: return "E"; case Grade_NoData: return "N"; - default: return "N"; + default: return "N"; } }; @@ -42,13 +42,17 @@ Grade StringToGrade( const RString &sGrade ) // new style int iTier; - if( sscanf(sGrade.c_str(),"Tier%02d",&iTier) == 1 ) return (Grade)(iTier-1); - else if( s == "FAILED" ) return Grade_Failed; - else if( s == "NODATA" ) return Grade_NoData; + if( sscanf(sGrade.c_str(),"TIER%02d",&iTier) == 1 && iTier >= 0 && iTier < NUM_Grade) + return (Grade)(iTier-1); + else if( s == "FAILED" ) + return Grade_Failed; + else if( s == "NODATA" ) + return Grade_NoData; LOG->Warn( "Invalid grade: %s", sGrade.c_str() ); return Grade_NoData; }; +template<> void StringTo( const RString& s, Grade &out ) { out = StringToGrade( s ); } static void LuaGrade(lua_State* L) {