From 7e1f393413f59472312af4a1297e120fb60e430a Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Wed, 26 Mar 2003 19:15:38 +0000 Subject: [PATCH] Split CachedThemeMetric into separate types (CString, int, float) to prevent ambiguous types when casting --- stepmania/src/Combo.cpp | 28 +++++++++--------- stepmania/src/GhostArrow.cpp | 18 ++++++------ stepmania/src/GhostArrowBright.cpp | 18 ++++++------ stepmania/src/GrayArrow.cpp | 4 +-- stepmania/src/HoldGhostArrow.cpp | 2 +- stepmania/src/MusicWheel.cpp | 46 ++++++++++++++---------------- stepmania/src/MusicWheel.h | 4 +-- stepmania/src/Player.cpp | 2 +- stepmania/src/ScreenEdit.cpp | 2 +- stepmania/src/ScreenGameplay.cpp | 6 ++-- stepmania/src/ThemeManager.h | 29 ++++++++++++++++++- 11 files changed, 92 insertions(+), 67 deletions(-) diff --git a/stepmania/src/Combo.cpp b/stepmania/src/Combo.cpp index 4c0e33c893..0fd6d2f024 100644 --- a/stepmania/src/Combo.cpp +++ b/stepmania/src/Combo.cpp @@ -14,20 +14,20 @@ #include "ThemeManager.h" -CachedThemeMetric LABEL_X ("Combo","LabelX"); -CachedThemeMetric LABEL_Y ("Combo","LabelY"); -CachedThemeMetric LABEL_HORIZ_ALIGN ("Combo","LabelHorizAlign"); -CachedThemeMetric LABEL_VERT_ALIGN ("Combo","LabelVertAlign"); -CachedThemeMetric NUMBER_X ("Combo","NumberX"); -CachedThemeMetric NUMBER_Y ("Combo","NumberY"); -CachedThemeMetric NUMBER_HORIZ_ALIGN ("Combo","NumberHorizAlign"); -CachedThemeMetric NUMBER_VERT_ALIGN ("Combo","NumberVertAlign"); -CachedThemeMetric SHOW_COMBO_AT ("Combo","ShowComboAt"); -CachedThemeMetric NUMBER_MIN_ZOOM ("Combo","NumberMinZoom"); -CachedThemeMetric NUMBER_MAX_ZOOM ("Combo","NumberMaxZoom"); -CachedThemeMetric NUMBER_MAX_ZOOM_AT ("Combo","NumberMaxZoomAt"); -CachedThemeMetric PULSE_ZOOM ("Combo","PulseZoom"); -CachedThemeMetric C_TWEEN_SECONDS ("Combo","TweenSeconds"); +CachedThemeMetricF LABEL_X ("Combo","LabelX"); +CachedThemeMetricF LABEL_Y ("Combo","LabelY"); +CachedThemeMetricI LABEL_HORIZ_ALIGN ("Combo","LabelHorizAlign"); +CachedThemeMetricI LABEL_VERT_ALIGN ("Combo","LabelVertAlign"); +CachedThemeMetricF NUMBER_X ("Combo","NumberX"); +CachedThemeMetricF NUMBER_Y ("Combo","NumberY"); +CachedThemeMetricI NUMBER_HORIZ_ALIGN ("Combo","NumberHorizAlign"); +CachedThemeMetricI NUMBER_VERT_ALIGN ("Combo","NumberVertAlign"); +CachedThemeMetricI SHOW_COMBO_AT ("Combo","ShowComboAt"); +CachedThemeMetricF NUMBER_MIN_ZOOM ("Combo","NumberMinZoom"); +CachedThemeMetricF NUMBER_MAX_ZOOM ("Combo","NumberMaxZoom"); +CachedThemeMetricF NUMBER_MAX_ZOOM_AT ("Combo","NumberMaxZoomAt"); +CachedThemeMetricF PULSE_ZOOM ("Combo","PulseZoom"); +CachedThemeMetricF C_TWEEN_SECONDS ("Combo","TweenSeconds"); Combo::Combo() diff --git a/stepmania/src/GhostArrow.cpp b/stepmania/src/GhostArrow.cpp index 9332ce550e..a9688d28e0 100644 --- a/stepmania/src/GhostArrow.cpp +++ b/stepmania/src/GhostArrow.cpp @@ -16,14 +16,14 @@ #include "ThemeManager.h" -CachedThemeMetric GA_SHOW_SECONDS ("GhostArrow","ShowSeconds"); -CachedThemeMetric GA_ZOOM_START ("GhostArrow","ZoomStart"); -CachedThemeMetric GA_ZOOM_END ("GhostArrow","ZoomEnd"); -CachedThemeMetric GA_COLOR_MARVELOUS ("GhostArrow","ColorMarvelous"); -CachedThemeMetric GA_COLOR_PERFECT ("GhostArrow","ColorPerfect"); -CachedThemeMetric GA_COLOR_GREAT ("GhostArrow","ColorGreat"); -CachedThemeMetric GA_COLOR_GOOD ("GhostArrow","ColorGood"); -CachedThemeMetric GA_COLOR_BOO ("GhostArrow","ColorBoo"); +CachedThemeMetricF GA_SHOW_SECONDS ("GhostArrow","ShowSeconds"); +CachedThemeMetricF GA_ZOOM_START ("GhostArrow","ZoomStart"); +CachedThemeMetricF GA_ZOOM_END ("GhostArrow","ZoomEnd"); +CachedThemeMetricC GA_COLOR_MARVELOUS ("GhostArrow","ColorMarvelous"); +CachedThemeMetricC GA_COLOR_PERFECT ("GhostArrow","ColorPerfect"); +CachedThemeMetricC GA_COLOR_GREAT ("GhostArrow","ColorGreat"); +CachedThemeMetricC GA_COLOR_GOOD ("GhostArrow","ColorGood"); +CachedThemeMetricC GA_COLOR_BOO ("GhostArrow","ColorBoo"); GhostArrow::GhostArrow() @@ -50,7 +50,7 @@ void GhostArrow::Step( TapNoteScore score ) // HACK: set the length of each frame so the animation plays in exactly 1 pop up time. // We can't do this in the constructor because the image hasn't been loaded yet for( int i=0; iGetMetricI("MusicWheel","NumWheelItems") ) #define FADE_SECONDS THEME->GetMetricF("MusicWheel","FadeSeconds") #define SWITCH_SECONDS THEME->GetMetricF("MusicWheel","SwitchSeconds") #define ROULETTE_SWITCH_SECONDS THEME->GetMetricF("MusicWheel","RouletteSwitchSeconds") @@ -34,8 +34,8 @@ #define LOCKED_INITIAL_VELOCITY THEME->GetMetricF("MusicWheel","LockedInitialVelocity") #define SCROLL_BAR_X THEME->GetMetricF("MusicWheel","ScrollBarX") #define SCROLL_BAR_HEIGHT THEME->GetMetricI("MusicWheel","ScrollBarHeight") -#define ITEM_CURVE_X THEME->GetMetricF("MusicWheel","ItemCurveX") -#define ITEM_SPACING_Y THEME->GetMetricF("MusicWheel","ItemSpacingY") +CachedThemeMetricF ITEM_CURVE_X ("MusicWheel","ItemCurveX"); +CachedThemeMetricF ITEM_SPACING_Y ("MusicWheel","ItemSpacingY"); #define NUM_SECTION_COLORS THEME->GetMetricI("MusicWheel","NumSectionColors") #define SECTION_COLORS( i ) THEME->GetMetricC("MusicWheel",ssprintf("SectionColor%d",i+1)) #define DEFAULT_SCROLL_DIRECTION THEME->GetMetricI("Notes","DefaultScrollDirection") @@ -45,7 +45,6 @@ const int MAX_WHEEL_SOUND_SPEED = 15; -float g_fItemSpacingY, g_fItemCurveX; // cache static const SongSortOrder MaxSelectableSort = SORT_MOST_PLAYED; @@ -70,10 +69,9 @@ MusicWheel::MusicWheel() GAMESTATE->m_PlayerOptions[i].m_fReverseScroll = 1; } - // update theme metric cache - g_fItemSpacingY = ITEM_SPACING_Y; - g_fItemCurveX = ITEM_CURVE_X; + ITEM_CURVE_X.Refresh(); + ITEM_SPACING_Y.Refresh(); // for debugging if( GAMESTATE->m_CurStyle == STYLE_INVALID ) @@ -510,12 +508,12 @@ void MusicWheel::BuildWheelItemDatas( vector &arrayWheelItemDatas float MusicWheel::GetBannerY( float fPosOffsetsFromMiddle ) { - return roundf( fPosOffsetsFromMiddle*g_fItemSpacingY ); + return roundf( fPosOffsetsFromMiddle*ITEM_SPACING_Y ); } float MusicWheel::GetBannerX( float fPosOffsetsFromMiddle ) { - float fX = (1-cosf(fPosOffsetsFromMiddle/PI))*g_fItemCurveX; + float fX = (1-cosf(fPosOffsetsFromMiddle/PI))*ITEM_CURVE_X; return roundf( fX ); } @@ -527,14 +525,14 @@ void MusicWheel::RebuildWheelItemDisplays() if( m_iSelection > int(m_CurWheelItemData.size()-1) ) m_iSelection = 0; - iIndex -= NUM_WHEEL_ITEMS_TO_DRAW/2; + iIndex -= NUM_WHEEL_ITEMS/2; ASSERT(m_CurWheelItemData.size()); while(iIndex < 0) iIndex += m_CurWheelItemData.size(); // iIndex is now the index of the lowest WheelItem to draw - for( int i=0; i SCREEN_HEIGHT/2 ) @@ -586,7 +584,7 @@ void MusicWheel::DrawPrimitives() break; } - if( m_WheelState == STATE_LOCKED && i != NUM_WHEEL_ITEMS_TO_DRAW/2 ) + if( m_WheelState == STATE_LOCKED && i != NUM_WHEEL_ITEMS/2 ) display.m_fPercentGray = 0.5f; else display.m_fPercentGray = 0; @@ -602,10 +600,10 @@ void MusicWheel::UpdateScrollbar() int total_num_items = m_CurWheelItemData.size(); float item_at=m_iSelection - m_fPositionOffsetFromSelection; - if(NUM_WHEEL_ITEMS_TO_DRAW > total_num_items) { + if(NUM_WHEEL_ITEMS > total_num_items) { m_ScrollBar.SetPercentage( 0, 1 ); } else { - float size = float(NUM_WHEEL_ITEMS_TO_DRAW) / total_num_items; + float size = float(NUM_WHEEL_ITEMS) / total_num_items; float center = item_at / total_num_items; size *= 0.5f; @@ -618,7 +616,7 @@ void MusicWheel::Update( float fDeltaTime ) ActorFrame::Update( fDeltaTime ); unsigned i; - for( i=0; i m_WheelItemDatas[NUM_SORT_ORDERS]; vector m_CurWheelItemData; - WheelItemDisplay m_WheelItemDisplays[NUM_WHEEL_ITEMS_TO_DRAW]; + WheelItemDisplay m_WheelItemDisplays[MAX_WHEEL_ITEMS]; int m_iSelection; // index into m_CurWheelItemData CString m_sExpandedSectionName; diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index 1fec82309f..37fb5e2a01 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -34,7 +34,7 @@ #define JUDGMENT_Y THEME->GetMetricF("Player","JudgmentY") #define COMBO_Y THEME->GetMetricF("Player","ComboY") #define HOLD_JUDGMENT_Y THEME->GetMetricF("Player","HoldJudgmentY") -CachedThemeMetric BRIGHT_GHOST_COMBO_THRESHOLD("Player","BrightGhostComboThreshold"); +CachedThemeMetricI BRIGHT_GHOST_COMBO_THRESHOLD("Player","BrightGhostComboThreshold"); #define START_DRAWING_AT_PIXELS THEME->GetMetricI("Player","StartDrawingAtPixels") #define STOP_DRAWING_AT_PIXELS THEME->GetMetricI("Player","StopDrawingAtPixels") diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index b0ea1f5569..399cf311b7 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -74,7 +74,7 @@ const float NAMING_MENU_ITEM_X = CENTER_X-200; const float NAMING_MENU_ITEM_START_Y = SCREEN_TOP + 24; const float NAMING_MENU_ITEM_SPACING_Y = 18; -CachedThemeMetric TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); +CachedThemeMetricF TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); const ScreenMessage SM_BackFromMainMenu = (ScreenMessage)(SM_User+1); diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index c66050e68f..df90be4c55 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -78,8 +78,8 @@ #define AUTOPLAY_Y THEME->GetMetricF("ScreenGameplay","AutoPlayY") #define SURVIVE_TIME_X THEME->GetMetricF("ScreenGameplay","SurviveTimeX") #define SURVIVE_TIME_Y THEME->GetMetricF("ScreenGameplay","SurviveTimeY") -CachedThemeMetric SECONDS_BETWEEN_COMMENTS ("ScreenGameplay","SecondsBetweenComments"); -CachedThemeMetric G_TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); +CachedThemeMetricF SECONDS_BETWEEN_COMMENTS ("ScreenGameplay","SecondsBetweenComments"); +CachedThemeMetricF G_TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); const ScreenMessage SM_PlayReady = ScreenMessage(SM_User+0); @@ -355,9 +355,9 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration ) switch( GAMESTATE->m_PlayMode ) { case PLAY_MODE_ARCADE: + case PLAY_MODE_NONSTOP: m_pScoreDisplay[p] = new ScoreDisplayNormal; break; - case PLAY_MODE_NONSTOP: case PLAY_MODE_ONI: case PLAY_MODE_ENDLESS: m_pScoreDisplay[p] = new ScoreDisplayOni; diff --git a/stepmania/src/ThemeManager.h b/stepmania/src/ThemeManager.h index bf6d3feb92..2e37d82196 100644 --- a/stepmania/src/ThemeManager.h +++ b/stepmania/src/ThemeManager.h @@ -57,6 +57,7 @@ extern ThemeManager* THEME; // global and accessable from anywhere in our progra class CachedThemeMetric { +protected: CString m_sClassName; CString m_sValueName; bool m_bInited; @@ -87,10 +88,36 @@ public: } operator const CString () const { ASSERT(m_bInited); return m_sValue; }; - operator const int () const { ASSERT(m_bInited); return m_iValue; }; +}; + +class CachedThemeMetricF : public CachedThemeMetric +{ +public: + CachedThemeMetricF( CString sClassName, CString sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} operator const float () const { ASSERT(m_bInited); return m_fValue; }; +}; + +class CachedThemeMetricI : public CachedThemeMetric +{ +public: + CachedThemeMetricI( CString sClassName, CString sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} + operator const int () const { ASSERT(m_bInited); return m_iValue; }; +}; + +class CachedThemeMetricB : public CachedThemeMetric +{ +public: + CachedThemeMetricB( CString sClassName, CString sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} operator const bool () const { ASSERT(m_bInited); return m_bValue; }; +}; + +class CachedThemeMetricC : public CachedThemeMetric +{ +public: + CachedThemeMetricC( CString sClassName, CString sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} operator const RageColor () const { ASSERT(m_bInited); return m_cValue; }; }; + + #endif