From 5127ceef4dda2a2a5ff5162d0de28c1139280a30 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 6 Nov 2004 20:36:04 +0000 Subject: [PATCH] remove CachedThemeMetrics in favor of ThemeMetric fix "CachedThemeMetrics don't read HTML colors and don't evaluate Lua expressions" --- stepmania/src/Background.cpp | 11 ++-- stepmania/src/Banner.cpp | 8 ++- stepmania/src/CombinedLifeMeterTug.cpp | 5 +- stepmania/src/Combo.cpp | 59 +++++++-------------- stepmania/src/DifficultyDisplay.cpp | 8 ++- stepmania/src/DifficultyList.cpp | 6 +-- stepmania/src/DifficultyList.h | 3 ++ stepmania/src/DifficultyMeter.cpp | 2 +- stepmania/src/FadingBanner.cpp | 5 +- stepmania/src/GrooveGraph.cpp | 7 ++- stepmania/src/HoldJudgment.cpp | 25 +++------ stepmania/src/Inventory.cpp | 5 +- stepmania/src/Judgment.cpp | 59 +++++++-------------- stepmania/src/LifeMeterBar.cpp | 21 +++----- stepmania/src/MusicWheel.cpp | 28 ++++------ stepmania/src/Player.cpp | 27 ++++------ stepmania/src/Preference.h | 5 ++ stepmania/src/PrefsManager.cpp | 6 +++ stepmania/src/PrefsManager.h | 1 + stepmania/src/ProTimingDisplay.cpp | 25 ++++----- stepmania/src/ScoreKeeperRave.cpp | 4 +- stepmania/src/ScreenDimensions.cpp | 4 -- stepmania/src/ScreenDimensions.h | 6 +-- stepmania/src/ScreenEdit.cpp | 5 +- stepmania/src/ScreenGameplay.cpp | 8 ++- stepmania/src/SongManager.cpp | 26 ++++----- stepmania/src/TextBanner.cpp | 23 +++----- stepmania/src/ThemeManager.cpp | 11 +++- stepmania/src/ThemeManager.h | 73 +------------------------- stepmania/src/ThemeMetric.h | 11 ++++ 30 files changed, 166 insertions(+), 321 deletions(-) diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index 4aeb1292a9..d853752a00 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -16,18 +16,18 @@ #include "BeginnerHelper.h" #include "StageStats.h" #include "ScreenDimensions.h" +#include "ThemeMetric.h" #include - const float FADE_SECONDS = 1.0f; #define LEFT_EDGE THEME->GetMetricF("Background","LeftEdge") #define TOP_EDGE THEME->GetMetricF("Background","TopEdge") #define RIGHT_EDGE THEME->GetMetricF("Background","RightEdge") #define BOTTOM_EDGE THEME->GetMetricF("Background","BottomEdge") -CachedThemeMetricB BLINK_DANGER_ALL("Background","BlinkDangerAll"); -CachedThemeMetricB DANGER_ALL_IS_OPAQUE("Background","DangerAllIsOpaque"); +ThemeMetric BLINK_DANGER_ALL("Background","BlinkDangerAll"); +ThemeMetric DANGER_ALL_IS_OPAQUE("Background","DangerAllIsOpaque"); #define BRIGHTNESS_FADE_COMMAND THEME->GetMetric("Background","BrightnessFadeCommand") #define RECT_BACKGROUND RectF(LEFT_EDGE,TOP_EDGE,RIGHT_EDGE,BOTTOM_EDGE) @@ -36,9 +36,6 @@ const CString STATIC_BACKGROUND = "static background"; Background::Background() { - BLINK_DANGER_ALL.Refresh(); - DANGER_ALL_IS_OPAQUE.Refresh(); - m_iCurBGChangeIndex = -1; m_pCurrentBGA = NULL; m_pFadingBGA = NULL; @@ -585,7 +582,7 @@ void Background::DrawPrimitives() m_DangerAll.Draw(); } - if( !IsDangerAllVisible() || !DANGER_ALL_IS_OPAQUE ) + if( !IsDangerAllVisible() || !(bool)DANGER_ALL_IS_OPAQUE ) { if( m_pDancingCharacters ) m_pDancingCharacters->m_bDrawDangerLight = false; diff --git a/stepmania/src/Banner.cpp b/stepmania/src/Banner.cpp index 1b22deeb65..ce963ec4d4 100644 --- a/stepmania/src/Banner.cpp +++ b/stepmania/src/Banner.cpp @@ -8,15 +8,13 @@ #include "RageTextureManager.h" #include "Course.h" #include "Character.h" +#include "ThemeMetric.h" -CachedThemeMetricB SCROLL_RANDOM ("Banner","ScrollRandom"); -CachedThemeMetricB SCROLL_ROULETTE ("Banner","ScrollRoulette"); +ThemeMetric SCROLL_RANDOM ("Banner","ScrollRandom"); +ThemeMetric SCROLL_ROULETTE ("Banner","ScrollRoulette"); Banner::Banner() { - SCROLL_RANDOM.Refresh(); - SCROLL_ROULETTE.Refresh(); - m_bScrolling = false; m_fPercentScrolling = 0; diff --git a/stepmania/src/CombinedLifeMeterTug.cpp b/stepmania/src/CombinedLifeMeterTug.cpp index 322644cab3..896c501f17 100644 --- a/stepmania/src/CombinedLifeMeterTug.cpp +++ b/stepmania/src/CombinedLifeMeterTug.cpp @@ -3,9 +3,10 @@ #include "ThemeManager.h" #include "GameState.h" #include "PrefsManager.h" +#include "ThemeMetric.h" -CachedThemeMetricF METER_WIDTH ("CombinedLifeMeterTug","MeterWidth"); +ThemeMetric METER_WIDTH ("CombinedLifeMeterTug","MeterWidth"); const float FACE_X[NUM_PLAYERS] = { -300, +300 }; const float FACE_Y[NUM_PLAYERS] = { 0, 0 }; @@ -13,8 +14,6 @@ const float FACE_Y[NUM_PLAYERS] = { 0, 0 }; CombinedLifeMeterTug::CombinedLifeMeterTug() { - METER_WIDTH.Refresh(); - FOREACH_PlayerNumber( p ) { CString sStreamPath = THEME->GetPathToG(ssprintf("CombinedLifeMeterTug stream p%d",p+1)); diff --git a/stepmania/src/Combo.cpp b/stepmania/src/Combo.cpp index 1b3af6ba04..aeed45269f 100644 --- a/stepmania/src/Combo.cpp +++ b/stepmania/src/Combo.cpp @@ -4,51 +4,32 @@ #include "StageStats.h" #include "GameState.h" #include "song.h" +#include "ThemeMetric.h" -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"); -CachedThemeMetricF FULL_COMBO_GREATS_COMMAND ("Combo","FullComboGreatsCommand"); -CachedThemeMetricF FULL_COMBO_PERFECTS_COMMAND ("Combo","FullComboPerfectsCommand"); -CachedThemeMetricF FULL_COMBO_MARVELOUSES_COMMAND ("Combo","FullComboMarvelousesCommand"); -CachedThemeMetricF FULL_COMBO_BROKEN_COMMAND ("Combo","FullComboBrokenCommand"); -CachedThemeMetricB SHOW_MISS_COMBO ("Combo","ShowMissCombo"); +ThemeMetric LABEL_X ("Combo","LabelX"); +ThemeMetric LABEL_Y ("Combo","LabelY"); +ThemeMetric LABEL_HORIZ_ALIGN ("Combo","LabelHorizAlign"); +ThemeMetric LABEL_VERT_ALIGN ("Combo","LabelVertAlign"); +ThemeMetric NUMBER_X ("Combo","NumberX"); +ThemeMetric NUMBER_Y ("Combo","NumberY"); +ThemeMetric NUMBER_HORIZ_ALIGN ("Combo","NumberHorizAlign"); +ThemeMetric NUMBER_VERT_ALIGN ("Combo","NumberVertAlign"); +ThemeMetric SHOW_COMBO_AT ("Combo","ShowComboAt"); +ThemeMetric NUMBER_MIN_ZOOM ("Combo","NumberMinZoom"); +ThemeMetric NUMBER_MAX_ZOOM ("Combo","NumberMaxZoom"); +ThemeMetric NUMBER_MAX_ZOOM_AT ("Combo","NumberMaxZoomAt"); +ThemeMetric PULSE_ZOOM ("Combo","PulseZoom"); +ThemeMetric C_TWEEN_SECONDS ("Combo","TweenSeconds"); +ThemeMetric FULL_COMBO_GREATS_COMMAND ("Combo","FullComboGreatsCommand"); +ThemeMetric FULL_COMBO_PERFECTS_COMMAND ("Combo","FullComboPerfectsCommand"); +ThemeMetric FULL_COMBO_MARVELOUSES_COMMAND ("Combo","FullComboMarvelousesCommand"); +ThemeMetric FULL_COMBO_BROKEN_COMMAND ("Combo","FullComboBrokenCommand"); +ThemeMetric SHOW_MISS_COMBO ("Combo","ShowMissCombo"); Combo::Combo() { - LABEL_X.Refresh(); - LABEL_Y.Refresh(); - LABEL_HORIZ_ALIGN.Refresh(); - LABEL_VERT_ALIGN.Refresh(); - NUMBER_X.Refresh(); - NUMBER_Y.Refresh(); - NUMBER_HORIZ_ALIGN.Refresh(); - NUMBER_VERT_ALIGN.Refresh(); - SHOW_COMBO_AT.Refresh(); - NUMBER_MIN_ZOOM.Refresh(); - NUMBER_MAX_ZOOM.Refresh(); - NUMBER_MAX_ZOOM_AT.Refresh(); - PULSE_ZOOM.Refresh(); - C_TWEEN_SECONDS.Refresh(); - FULL_COMBO_GREATS_COMMAND.Refresh(); - FULL_COMBO_PERFECTS_COMMAND.Refresh(); - FULL_COMBO_MARVELOUSES_COMMAND.Refresh(); - FULL_COMBO_BROKEN_COMMAND.Refresh(); - SHOW_MISS_COMBO.Refresh(); - m_sprComboLabel.Load( THEME->GetPathToG( "Combo label") ); m_sprComboLabel.SetShadowLength( 4 ); m_sprComboLabel.StopAnimating(); diff --git a/stepmania/src/DifficultyDisplay.cpp b/stepmania/src/DifficultyDisplay.cpp index e0b396b5f7..aa21c902f3 100644 --- a/stepmania/src/DifficultyDisplay.cpp +++ b/stepmania/src/DifficultyDisplay.cpp @@ -1,15 +1,13 @@ #include "global.h" #include "DifficultyDisplay.h" #include "song.h" -#include "ThemeManager.h" +#include "ThemeMetric.h" -CachedThemeMetric ICONONCOMMAND ("DifficultyDisplay","IconOnCommand"); -CachedThemeMetric ICONOFFCOMMAND ("DifficultyDisplay","IconOffCommand"); +ThemeMetric ICONONCOMMAND ("DifficultyDisplay","IconOnCommand"); +ThemeMetric ICONOFFCOMMAND ("DifficultyDisplay","IconOffCommand"); DifficultyDisplay::DifficultyDisplay() { - ICONONCOMMAND.Refresh(); - ICONOFFCOMMAND.Refresh(); float fHeight = 0; int diff; for( diff = DIFFICULTY_BEGINNER; diff <= DIFFICULTY_CHALLENGE; ++diff ) diff --git a/stepmania/src/DifficultyList.cpp b/stepmania/src/DifficultyList.cpp index f882c14fbe..2608e453a5 100644 --- a/stepmania/src/DifficultyList.cpp +++ b/stepmania/src/DifficultyList.cpp @@ -16,11 +16,11 @@ #define DESCRIPTION_MAX_WIDTH THEME->GetMetricF(m_sName,"DescriptionMaxWidth") #define NUM_SHOWN_ITEMS THEME->GetMetricI(m_sName,"NumShownItems") #define CAPITALIZE_DIFFICULTY_NAMES THEME->GetMetric( m_sName,"CapitalizeDifficultyNames" ) -CachedThemeMetricF MOVE_COMMAND("","MoveCommand"); #define MAX_METERS NUM_DIFFICULTIES + MAX_EDITS_PER_SONG -DifficultyList::DifficultyList() +DifficultyList::DifficultyList() : + MOVE_COMMAND("","MoveCommand") { m_bShown = true; } @@ -31,7 +31,7 @@ DifficultyList::~DifficultyList() void DifficultyList::Load() { - MOVE_COMMAND.Refresh(m_sName); + MOVE_COMMAND.ChangeGroup(m_sName); m_Lines.resize( MAX_METERS ); m_CurSong = NULL; diff --git a/stepmania/src/DifficultyList.h b/stepmania/src/DifficultyList.h index 51a926e815..4f44a12796 100644 --- a/stepmania/src/DifficultyList.h +++ b/stepmania/src/DifficultyList.h @@ -6,6 +6,7 @@ #include "PlayerNumber.h" #include "BitmapText.h" #include "DifficultyMeter.h" +#include "ThemeMetric.h" class Song; class Steps; @@ -61,6 +62,8 @@ private: }; vector m_Rows; + + ThemeMetric MOVE_COMMAND; }; #endif diff --git a/stepmania/src/DifficultyMeter.cpp b/stepmania/src/DifficultyMeter.cpp index 221e4bd28b..4104cbb408 100644 --- a/stepmania/src/DifficultyMeter.cpp +++ b/stepmania/src/DifficultyMeter.cpp @@ -40,7 +40,7 @@ DifficultyMeter::DifficultyMeter() void DifficultyMeter::Load() { - /* We can't use global CachedThemeMetrics, because we can have multiple + /* We can't use global ThemeMetrics, because we can have multiple * DifficultyMeters on screen at once, with different names. */ m_iNumFeetInMeter = THEME->GetMetricI(m_sName,"NumFeetInMeter"); m_iMaxFeetInMeter = THEME->GetMetricI(m_sName,"MaxFeetInMeter"); diff --git a/stepmania/src/FadingBanner.cpp b/stepmania/src/FadingBanner.cpp index 021e233dbc..0bb932dc7f 100644 --- a/stepmania/src/FadingBanner.cpp +++ b/stepmania/src/FadingBanner.cpp @@ -8,8 +8,9 @@ #include "PrefsManager.h" #include "ThemeManager.h" #include "SongManager.h" +#include "ThemeMetric.h" -static CachedThemeMetricF FADE_SECONDS ("FadingBanner","FadeSeconds"); +static ThemeMetric FADE_SECONDS ("FadingBanner","FadeSeconds"); /* * Allow fading from one banner to another. We can handle two fades at once; @@ -21,8 +22,6 @@ static CachedThemeMetricF FADE_SECONDS ("FadingBanner","FadeSeconds"); */ FadingBanner::FadingBanner() { - FADE_SECONDS.Refresh(); - m_bMovingFast = false; m_bSkipNextBannerUpdate = false; m_iIndexLatest = 0; diff --git a/stepmania/src/GrooveGraph.cpp b/stepmania/src/GrooveGraph.cpp index 3db561b246..ee0a1bf5ad 100644 --- a/stepmania/src/GrooveGraph.cpp +++ b/stepmania/src/GrooveGraph.cpp @@ -9,6 +9,7 @@ #include "song.h" #include "GameState.h" #include "Style.h" +#include "ThemeMetric.h" const float GRAPH_EDGE_WIDTH = 2; @@ -17,8 +18,8 @@ const float GRAPH_EDGE_WIDTH = 2; #define SHOW_CATEGORY(cat) THEME->GetMetricB("GrooveGraph","Show"+Capitalize(RadarCategoryToString(cat))) #define CATEGORY_X(cat) THEME->GetMetricF("GrooveGraph",Capitalize(RadarCategoryToString(cat))+"X") #define MOUNTAINS_BASE_Y THEME->GetMetricF("GrooveGraph","MountainsBaseY") -CachedThemeMetricF MOUNTAIN_WIDTH ("GrooveGraph","MountainWidth"); -CachedThemeMetricF MOUNTAIN_HEIGHT ("GrooveGraph","MountainHeight"); +ThemeMetric MOUNTAIN_WIDTH ("GrooveGraph","MountainWidth"); +ThemeMetric MOUNTAIN_HEIGHT ("GrooveGraph","MountainHeight"); RageColor g_DifficultyColorsCache[NUM_DIFFICULTIES]; static const int NUM_SHOWN_RADAR_CATEGORIES = 5; @@ -27,8 +28,6 @@ GrooveGraph::GrooveGraph() { for( int i=0; iGetPathToG("GrooveGraph base") ); this->AddChild( &m_sprBase ); diff --git a/stepmania/src/HoldJudgment.cpp b/stepmania/src/HoldJudgment.cpp index aac8095e75..659e2d1931 100644 --- a/stepmania/src/HoldJudgment.cpp +++ b/stepmania/src/HoldJudgment.cpp @@ -4,29 +4,18 @@ #include "GameConstantsAndTypes.h" #include "PrefsManager.h" #include "ThemeManager.h" +#include "ThemeMetric.h" - -CachedThemeMetric OK_COMMAND ("HoldJudgment","OKCommand"); -CachedThemeMetric NG_COMMAND ("HoldJudgment","NGCommand"); - -CachedThemeMetric OK_ODD_COMMAND ("HoldJudgment","OKOddCommand"); -CachedThemeMetric NG_ODD_COMMAND ("HoldJudgment","NGOddCommand"); - -CachedThemeMetric OK_EVEN_COMMAND ("HoldJudgment","OKEvenCommand"); -CachedThemeMetric NG_EVEN_COMMAND ("HoldJudgment","NGEvenCommand"); +ThemeMetric OK_COMMAND ("HoldJudgment","OKCommand"); +ThemeMetric NG_COMMAND ("HoldJudgment","NGCommand"); +ThemeMetric OK_ODD_COMMAND ("HoldJudgment","OKOddCommand"); +ThemeMetric NG_ODD_COMMAND ("HoldJudgment","NGOddCommand"); +ThemeMetric OK_EVEN_COMMAND ("HoldJudgment","OKEvenCommand"); +ThemeMetric NG_EVEN_COMMAND ("HoldJudgment","NGEvenCommand"); HoldJudgment::HoldJudgment() { - OK_COMMAND.Refresh(); - NG_COMMAND.Refresh(); - - OK_ODD_COMMAND.Refresh(); - NG_ODD_COMMAND.Refresh(); - - OK_EVEN_COMMAND.Refresh(); - NG_EVEN_COMMAND.Refresh(); - m_iCount = 0; m_sprJudgment.Load( THEME->GetPathToG("HoldJudgment 1x2") ); diff --git a/stepmania/src/Inventory.cpp b/stepmania/src/Inventory.cpp index 342c95919d..b4102f4d8d 100644 --- a/stepmania/src/Inventory.cpp +++ b/stepmania/src/Inventory.cpp @@ -9,6 +9,7 @@ #include "ScreenManager.h" #include "ScreenGameplay.h" #include "StageStats.h" +#include "ThemeMetric.h" #define NUM_ITEM_TYPES THEME->GetMetricF("Inventory","NumItemTypes") @@ -16,7 +17,7 @@ #define ITEM_COMBO( i ) THEME->GetMetricI("Inventory",ssprintf("Item%dCombo",i+1)) #define ITEM_EFFECT( i ) THEME->GetMetric ("Inventory",ssprintf("Item%dEffect",i+1)) #define ITEM_LEVEL( i ) THEME->GetMetricI("Inventory",ssprintf("Item%dLevel",i+1)) -CachedThemeMetricF ITEM_USE_RATE_SECONDS("Inventory","ItemUseRateSeconds"); +ThemeMetric ITEM_USE_RATE_SECONDS("Inventory","ItemUseRateSeconds"); #define ITEM_USE_PROBABILITY (1.f/ITEM_USE_RATE_SECONDS) @@ -62,8 +63,6 @@ Inventory::~Inventory() void Inventory::Load( PlayerNumber pn ) { - ITEM_USE_RATE_SECONDS.Refresh(); - ReloadItems(); m_PlayerNumber = pn; diff --git a/stepmania/src/Judgment.cpp b/stepmania/src/Judgment.cpp index d30b063633..ca5fb55af4 100644 --- a/stepmania/src/Judgment.cpp +++ b/stepmania/src/Judgment.cpp @@ -5,53 +5,32 @@ #include "PrefsManager.h" #include "GameState.h" #include "ThemeManager.h" +#include "ThemeMetric.h" +static ThemeMetric MARVELOUS_COMMAND ("Judgment","MarvelousCommand"); +static ThemeMetric PERFECT_COMMAND ("Judgment","PerfectCommand"); +static ThemeMetric GREAT_COMMAND ("Judgment","GreatCommand"); +static ThemeMetric GOOD_COMMAND ("Judgment","GoodCommand"); +static ThemeMetric BOO_COMMAND ("Judgment","BooCommand"); +static ThemeMetric MISS_COMMAND ("Judgment","MissCommand"); -static CachedThemeMetric MARVELOUS_COMMAND ("Judgment","MarvelousCommand"); -static CachedThemeMetric PERFECT_COMMAND ("Judgment","PerfectCommand"); -static CachedThemeMetric GREAT_COMMAND ("Judgment","GreatCommand"); -static CachedThemeMetric GOOD_COMMAND ("Judgment","GoodCommand"); -static CachedThemeMetric BOO_COMMAND ("Judgment","BooCommand"); -static CachedThemeMetric MISS_COMMAND ("Judgment","MissCommand"); +static ThemeMetric MARVELOUS_ODD_COMMAND ("Judgment","MarvelousOddCommand"); +static ThemeMetric PERFECT_ODD_COMMAND ("Judgment","PerfectOddCommand"); +static ThemeMetric GREAT_ODD_COMMAND ("Judgment","GreatOddCommand"); +static ThemeMetric GOOD_ODD_COMMAND ("Judgment","GoodOddCommand"); +static ThemeMetric BOO_ODD_COMMAND ("Judgment","BooOddCommand"); +static ThemeMetric MISS_ODD_COMMAND ("Judgment","MissOddCommand"); -static CachedThemeMetric MARVELOUS_ODD_COMMAND ("Judgment","MarvelousOddCommand"); -static CachedThemeMetric PERFECT_ODD_COMMAND ("Judgment","PerfectOddCommand"); -static CachedThemeMetric GREAT_ODD_COMMAND ("Judgment","GreatOddCommand"); -static CachedThemeMetric GOOD_ODD_COMMAND ("Judgment","GoodOddCommand"); -static CachedThemeMetric BOO_ODD_COMMAND ("Judgment","BooOddCommand"); -static CachedThemeMetric MISS_ODD_COMMAND ("Judgment","MissOddCommand"); - -static CachedThemeMetric MARVELOUS_EVEN_COMMAND ("Judgment","MarvelousEvenCommand"); -static CachedThemeMetric PERFECT_EVEN_COMMAND ("Judgment","PerfectEvenCommand"); -static CachedThemeMetric GREAT_EVEN_COMMAND ("Judgment","GreatEvenCommand"); -static CachedThemeMetric GOOD_EVEN_COMMAND ("Judgment","GoodEvenCommand"); -static CachedThemeMetric BOO_EVEN_COMMAND ("Judgment","BooEvenCommand"); -static CachedThemeMetric MISS_EVEN_COMMAND ("Judgment","MissEvenCommand"); +static ThemeMetric MARVELOUS_EVEN_COMMAND ("Judgment","MarvelousEvenCommand"); +static ThemeMetric PERFECT_EVEN_COMMAND ("Judgment","PerfectEvenCommand"); +static ThemeMetric GREAT_EVEN_COMMAND ("Judgment","GreatEvenCommand"); +static ThemeMetric GOOD_EVEN_COMMAND ("Judgment","GoodEvenCommand"); +static ThemeMetric BOO_EVEN_COMMAND ("Judgment","BooEvenCommand"); +static ThemeMetric MISS_EVEN_COMMAND ("Judgment","MissEvenCommand"); Judgment::Judgment() { - MARVELOUS_COMMAND.Refresh(); - PERFECT_COMMAND.Refresh(); - GREAT_COMMAND.Refresh(); - GOOD_COMMAND.Refresh(); - BOO_COMMAND.Refresh(); - MISS_COMMAND.Refresh(); - - MARVELOUS_ODD_COMMAND.Refresh(); - PERFECT_ODD_COMMAND.Refresh(); - GREAT_ODD_COMMAND.Refresh(); - GOOD_ODD_COMMAND.Refresh(); - BOO_ODD_COMMAND.Refresh(); - MISS_ODD_COMMAND.Refresh(); - - MARVELOUS_EVEN_COMMAND.Refresh(); - PERFECT_EVEN_COMMAND.Refresh(); - GREAT_EVEN_COMMAND.Refresh(); - GOOD_EVEN_COMMAND.Refresh(); - BOO_EVEN_COMMAND.Refresh(); - MISS_EVEN_COMMAND.Refresh(); - m_iCount = 0; m_sprJudgment.Load( THEME->GetPathToG("Judgment 1x6") ); diff --git a/stepmania/src/LifeMeterBar.cpp b/stepmania/src/LifeMeterBar.cpp index cb045e7885..6b0d7a2f55 100644 --- a/stepmania/src/LifeMeterBar.cpp +++ b/stepmania/src/LifeMeterBar.cpp @@ -8,16 +8,14 @@ #include "ThemeManager.h" #include "song.h" #include "StageStats.h" +#include "ThemeMetric.h" -// -// Important!!!! Do not use these macros during gameplay. They return very slowly. Cache them in a member. -// -static CachedThemeMetricF METER_WIDTH ("LifeMeterBar","MeterWidth"); -static CachedThemeMetricF METER_HEIGHT ("LifeMeterBar","MeterHeight"); -static CachedThemeMetricF DANGER_THRESHOLD ("LifeMeterBar","DangerThreshold"); -static CachedThemeMetricI NUM_CHAMBERS ("LifeMeterBar","NumChambers"); -static CachedThemeMetricI NUM_STRIPS ("LifeMeterBar","NumStrips"); +static ThemeMetric METER_WIDTH ("LifeMeterBar","MeterWidth"); +static ThemeMetric METER_HEIGHT ("LifeMeterBar","MeterHeight"); +static ThemeMetric DANGER_THRESHOLD ("LifeMeterBar","DangerThreshold"); +static ThemeMetric NUM_CHAMBERS ("LifeMeterBar","NumChambers"); +static ThemeMetric NUM_STRIPS ("LifeMeterBar","NumStrips"); const float FAIL_THRESHOLD = 0; @@ -28,13 +26,6 @@ class LifeMeterStream : public Actor public: LifeMeterStream() { - METER_WIDTH.Refresh(); - METER_HEIGHT.Refresh(); - DANGER_THRESHOLD.Refresh(); - NUM_CHAMBERS.Refresh(); - NUM_STRIPS.Refresh(); - - bool bExtra = GAMESTATE->IsExtraStage()||GAMESTATE->IsExtraStage2(); m_quadMask.SetDiffuse( RageColor(0,0,0,1) ); diff --git a/stepmania/src/MusicWheel.cpp b/stepmania/src/MusicWheel.cpp index 261b11528b..2f13e2494f 100644 --- a/stepmania/src/MusicWheel.cpp +++ b/stepmania/src/MusicWheel.cpp @@ -23,20 +23,21 @@ #include "CourseUtil.h" #include "Foreach.h" #include "Style.h" +#include "ThemeMetric.h" #define FADE_SECONDS THEME->GetMetricF("MusicWheel","FadeSeconds") -CachedThemeMetricF SWITCH_SECONDS ("MusicWheel","SwitchSeconds"); +ThemeMetric SWITCH_SECONDS ("MusicWheel","SwitchSeconds"); #define ROULETTE_SWITCH_SECONDS THEME->GetMetricF("MusicWheel","RouletteSwitchSeconds") #define ROULETTE_SLOW_DOWN_SWITCHES THEME->GetMetricI("MusicWheel","RouletteSlowDownSwitches") #define LOCKED_INITIAL_VELOCITY THEME->GetMetricF("MusicWheel","LockedInitialVelocity") #define SCROLL_BAR_X THEME->GetMetricF("MusicWheel","ScrollBarX") #define SCROLL_BAR_HEIGHT THEME->GetMetricI("MusicWheel","ScrollBarHeight") -CachedThemeMetricF ITEM_CURVE_X ("MusicWheel","ItemCurveX"); +ThemeMetric ITEM_CURVE_X ("MusicWheel","ItemCurveX"); #define USE_LINEAR_WHEEL THEME->GetMetricB("MusicWheel","NoCurving") -CachedThemeMetricF ITEM_SPACING_Y ("MusicWheel","ItemSpacingY"); -CachedThemeMetricF WHEEL_3D_RADIUS ("MusicWheel","Wheel3DRadius"); -CachedThemeMetricF CIRCLE_PERCENT ("MusicWheel","CirclePercent"); +ThemeMetric ITEM_SPACING_Y ("MusicWheel","ItemSpacingY"); +ThemeMetric WHEEL_3D_RADIUS ("MusicWheel","Wheel3DRadius"); +ThemeMetric CIRCLE_PERCENT ("MusicWheel","CirclePercent"); #define NUM_SECTION_COLORS THEME->GetMetricI("MusicWheel","NumSectionColors") #define SECTION_COLORS( i ) THEME->GetMetricC("MusicWheel",ssprintf("SectionColor%d",i+1)) #define SONG_REAL_EXTRA_COLOR THEME->GetMetricC("MusicWheel","SongRealExtraColor") @@ -44,8 +45,8 @@ CachedThemeMetricF CIRCLE_PERCENT ("MusicWheel","CirclePercent"); #define SHOW_ROULETTE THEME->GetMetricB("MusicWheel","ShowRoulette") #define SHOW_RANDOM THEME->GetMetricB("MusicWheel","ShowRandom") #define SHOW_PORTAL THEME->GetMetricB("MusicWheel","ShowPortal") -CachedThemeMetricB USE_3D ("MusicWheel","Use3D"); -CachedThemeMetricI NUM_WHEEL_ITEMS_METRIC ("MusicWheel","NumWheelItems"); +ThemeMetric USE_3D ("MusicWheel","Use3D"); +ThemeMetric NUM_WHEEL_ITEMS_METRIC ("MusicWheel","NumWheelItems"); #define NUM_WHEEL_ITEMS min( MAX_WHEEL_ITEMS, (int) NUM_WHEEL_ITEMS_METRIC ) #define MOST_PLAYED_SONGS_TO_SHOW THEME->GetMetricI("MusicWheel","MostPlayedSongsToShow") #define SORT_MENU_NAMES THEME->GetMetric ("MusicWheel","SortMenuNames") @@ -72,15 +73,10 @@ static const SortOrder SORT_ORDERS[] = SORT_ARTIST, }; // use ARRAYSIZE(SortOrder) +// Why? -Chris MusicWheel::MusicWheel() { - // update theme metric cache - SWITCH_SECONDS.Refresh(); - ITEM_CURVE_X.Refresh(); - ITEM_SPACING_Y.Refresh(); - USE_3D.Refresh(); - NUM_WHEEL_ITEMS_METRIC.Refresh(); } void MusicWheel::Load() @@ -93,12 +89,6 @@ void MusicWheel::Load() SONGMAN->UpdateRankingCourses(); - if( USE_3D ) - { - WHEEL_3D_RADIUS.Refresh(); - CIRCLE_PERCENT.Refresh(); - } - /* // for debugging. // Whatever Screen uses MusicWheel should set the Style if it needs to be set. diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index d33b4a138c..ef52956d37 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -29,9 +29,10 @@ #include "DancingCharacters.h" #include "ScreenDimensions.h" #include "RageSoundManager.h" +#include "ThemeMetric.h" -CachedThemeMetricF GRAY_ARROWS_Y_STANDARD ("Player","ReceptorArrowsYStandard"); -CachedThemeMetricF GRAY_ARROWS_Y_REVERSE ("Player","ReceptorArrowsYReverse"); +ThemeMetric GRAY_ARROWS_Y_STANDARD ("Player","ReceptorArrowsYStandard"); +ThemeMetric GRAY_ARROWS_Y_REVERSE ("Player","ReceptorArrowsYReverse"); #define JUDGMENT_X( p, both_sides ) THEME->GetMetricF("Player",both_sides ? CString("JudgmentXOffsetBothSides") : ssprintf("JudgmentXOffsetOneSideP%d",p+1)) #define JUDGMENT_Y THEME->GetMetricF("Player","JudgmentY") #define JUDGMENT_Y_REVERSE THEME->GetMetricF("Player","JudgmentYReverse") @@ -41,11 +42,11 @@ CachedThemeMetricF GRAY_ARROWS_Y_REVERSE ("Player","ReceptorArrowsYReverse"); #define ATTACK_DISPLAY_X( p, both_sides ) THEME->GetMetricF("Player",both_sides ? CString("AttackDisplayXOffsetBothSides") : ssprintf("AttackDisplayXOffsetOneSideP%d",p+1)) #define ATTACK_DISPLAY_Y THEME->GetMetricF("Player","AttackDisplayY") #define ATTACK_DISPLAY_Y_REVERSE THEME->GetMetricF("Player","AttackDisplayYReverse") -CachedThemeMetricF HOLD_JUDGMENT_Y_STANDARD ("Player","HoldJudgmentYStandard"); -CachedThemeMetricF HOLD_JUDGMENT_Y_REVERSE ("Player","HoldJudgmentYReverse"); -CachedThemeMetricI BRIGHT_GHOST_COMBO_THRESHOLD("Player","BrightGhostComboThreshold"); -CachedThemeMetricB TAP_JUDGMENTS_UNDER_FIELD ("Player","TapJudgmentsUnderField"); -CachedThemeMetricB HOLD_JUDGMENTS_UNDER_FIELD ("Player","HoldJudgmentsUnderField"); +ThemeMetric HOLD_JUDGMENT_Y_STANDARD ("Player","HoldJudgmentYStandard"); +ThemeMetric HOLD_JUDGMENT_Y_REVERSE ("Player","HoldJudgmentYReverse"); +ThemeMetric BRIGHT_GHOST_COMBO_THRESHOLD("Player","BrightGhostComboThreshold"); +ThemeMetric TAP_JUDGMENTS_UNDER_FIELD ("Player","TapJudgmentsUnderField"); +ThemeMetric HOLD_JUDGMENTS_UNDER_FIELD ("Player","HoldJudgmentsUnderField"); #define START_DRAWING_AT_PIXELS THEME->GetMetricI("Player","StartDrawingAtPixels") #define STOP_DRAWING_AT_PIXELS THEME->GetMetricI("Player","StopDrawingAtPixels") #define MAX_PRO_TIMING_ERROR THEME->GetMetricI("Player","MaxProTimingError") @@ -58,14 +59,6 @@ static const float StepSearchDistance = 1.0f; PlayerMinus::PlayerMinus() { - GRAY_ARROWS_Y_STANDARD.Refresh(); - GRAY_ARROWS_Y_REVERSE.Refresh(); - HOLD_JUDGMENT_Y_STANDARD.Refresh(); - HOLD_JUDGMENT_Y_REVERSE.Refresh(); - BRIGHT_GHOST_COMBO_THRESHOLD.Refresh(); - TAP_JUDGMENTS_UNDER_FIELD.Refresh(); - HOLD_JUDGMENTS_UNDER_FIELD.Refresh(); - m_PlayerNumber = PLAYER_INVALID; m_fNoteFieldHeight = 0; @@ -570,10 +563,10 @@ void PlayerMinus::DrawPrimitives() DISPLAY->PopMatrix(); - if( !TAP_JUDGMENTS_UNDER_FIELD ) + if( !(bool)TAP_JUDGMENTS_UNDER_FIELD ) DrawTapJudgments(); - if( !TAP_JUDGMENTS_UNDER_FIELD ) + if( !(bool)TAP_JUDGMENTS_UNDER_FIELD ) DrawHoldJudgments(); } diff --git a/stepmania/src/Preference.h b/stepmania/src/Preference.h index e1a525e398..71ce98ebd0 100644 --- a/stepmania/src/Preference.h +++ b/stepmania/src/Preference.h @@ -52,6 +52,11 @@ public: PrefsManager::Subscribe( this ); } + ~Preference() + { + PrefsManager::Unsubscribe( this ); + } + void LoadDefault() { m_currentValue = m_defaultValue; diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index d9b6a526e3..f631b8658e 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -40,6 +40,12 @@ void PrefsManager::Subscribe( IPreference *p ) g_pvpSubscribers->push_back( p ); } +void PrefsManager::Unsubscribe( IPreference *p ) +{ + vector::iterator iter = find( g_pvpSubscribers->begin(), g_pvpSubscribers->end(), p ); + ASSERT( iter != g_pvpSubscribers->end() ); // tried to unregister when not registered + g_pvpSubscribers->erase( iter ); +} bool g_bAutoRestart = false; diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index 70c50d74a3..fbfa656bb5 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -294,6 +294,7 @@ public: // For self-registering prefs // static void Subscribe( IPreference *p ); + static void Unsubscribe( IPreference *p ); protected: void ReadPrefsFromFile( CString sIni ); diff --git a/stepmania/src/ProTimingDisplay.cpp b/stepmania/src/ProTimingDisplay.cpp index c1efd8d5f5..15c7d47aac 100644 --- a/stepmania/src/ProTimingDisplay.cpp +++ b/stepmania/src/ProTimingDisplay.cpp @@ -2,14 +2,15 @@ #include "ProTimingDisplay.h" #include "ThemeManager.h" #include "RageUtil.h" +#include "ThemeMetric.h" -static CachedThemeMetric MARVELOUS_COMMAND ("ProTimingDisplay","MarvelousCommand"); -static CachedThemeMetric PERFECT_COMMAND ("ProTimingDisplay","PerfectCommand"); -static CachedThemeMetric GREAT_COMMAND ("ProTimingDisplay","GreatCommand"); -static CachedThemeMetric GOOD_COMMAND ("ProTimingDisplay","GoodCommand"); -static CachedThemeMetric BOO_COMMAND ("ProTimingDisplay","BooCommand"); -static CachedThemeMetric MISS_COMMAND ("ProTimingDisplay","MissCommand"); -static CachedThemeMetric HIT_MINE_COMMAND ("ProTimingDisplay","HitMineCommand"); +static ThemeMetric MARVELOUS_COMMAND ("ProTimingDisplay","MarvelousCommand"); +static ThemeMetric PERFECT_COMMAND ("ProTimingDisplay","PerfectCommand"); +static ThemeMetric GREAT_COMMAND ("ProTimingDisplay","GreatCommand"); +static ThemeMetric GOOD_COMMAND ("ProTimingDisplay","GoodCommand"); +static ThemeMetric BOO_COMMAND ("ProTimingDisplay","BooCommand"); +static ThemeMetric MISS_COMMAND ("ProTimingDisplay","MissCommand"); +static ThemeMetric HIT_MINE_COMMAND ("ProTimingDisplay","HitMineCommand"); ProTimingDisplay::ProTimingDisplay() @@ -17,14 +18,6 @@ ProTimingDisplay::ProTimingDisplay() m_Judgment.LoadFromFont( THEME->GetPathF("ProTimingDisplay","Judgment") ); m_Judgment.SetName( "Judgment" ); this->AddChild( &m_Judgment ); - - MARVELOUS_COMMAND.Refresh(); - PERFECT_COMMAND.Refresh(); - GREAT_COMMAND.Refresh(); - GOOD_COMMAND.Refresh(); - BOO_COMMAND.Refresh(); - MISS_COMMAND.Refresh(); - HIT_MINE_COMMAND.Refresh(); } void ProTimingDisplay::Reset() @@ -43,7 +36,7 @@ void ProTimingDisplay::SetJudgment( int ms, TapNoteScore score ) m_Judgment.SetText( ssprintf("%i", ms) ); - const CachedThemeMetric *Commands[NUM_TAP_NOTE_SCORES] = + const ThemeMetric *Commands[NUM_TAP_NOTE_SCORES] = { NULL, /* no TNS_NONE */ &HIT_MINE_COMMAND, diff --git a/stepmania/src/ScoreKeeperRave.cpp b/stepmania/src/ScoreKeeperRave.cpp index 0310017a70..97ee469b70 100644 --- a/stepmania/src/ScoreKeeperRave.cpp +++ b/stepmania/src/ScoreKeeperRave.cpp @@ -6,13 +6,13 @@ #include "Character.h" #include "ScreenManager.h" #include "PrefsManager.h" +#include "ThemeMetric.h" -CachedThemeMetricF ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds"); +ThemeMetric ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds"); ScoreKeeperRave::ScoreKeeperRave(PlayerNumber pn) : ScoreKeeper(pn) { - ATTACK_DURATION_SECONDS.Refresh(); } void ScoreKeeperRave::OnNextSong( int iSongInCourseIndex, const Steps* pSteps, const NoteData* pNoteData ) diff --git a/stepmania/src/ScreenDimensions.cpp b/stepmania/src/ScreenDimensions.cpp index 049f3b48a7..7d732589cd 100644 --- a/stepmania/src/ScreenDimensions.cpp +++ b/stepmania/src/ScreenDimensions.cpp @@ -1,10 +1,6 @@ #include "global.h" #include "ScreenDimensions.h" -ThemeMetric SCREEN_WIDTH("Common","ScreenWidth"); -ThemeMetric SCREEN_HEIGHT("Common","ScreenHeight"); - - /* * (c) 2001-2002 Chris Danford diff --git a/stepmania/src/ScreenDimensions.h b/stepmania/src/ScreenDimensions.h index 90a7d4eb73..14e9c76861 100644 --- a/stepmania/src/ScreenDimensions.h +++ b/stepmania/src/ScreenDimensions.h @@ -3,10 +3,10 @@ #ifndef SCREEN_DIMENSIONS_H #define SCREEN_DIMENSIONS_H -#include "ThemeMetric.h" +#include "ThemeManager.h" -extern ThemeMetric SCREEN_WIDTH; -extern ThemeMetric SCREEN_HEIGHT; +#define SCREEN_WIDTH THEME->GetMetricF("Common","ScreenWidth") +#define SCREEN_HEIGHT THEME->GetMetricF("Common","ScreenHeight") #define SCREEN_LEFT (0) #define SCREEN_RIGHT (SCREEN_WIDTH) diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index 2d8b1b7cb6..83f060f09c 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -24,6 +24,7 @@ #include "StepsUtil.h" #include "Foreach.h" #include "ScreenDimensions.h" +#include "ThemeMetric.h" const float RECORD_HOLD_SECONDS = 0.3f; @@ -71,7 +72,7 @@ const float RECORD_HOLD_SECONDS = 0.3f; #define NAMING_MENU_ITEM_START_Y (SCREEN_TOP + 24) #define NAMING_MENU_ITEM_SPACING_Y (18) -CachedThemeMetricF TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); +ThemeMetric TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); const ScreenMessage SM_BackFromMainMenu = (ScreenMessage)(SM_User+1); @@ -382,8 +383,6 @@ ScreenEdit::ScreenEdit( CString sName ) : Screen( sName ) /* We do this ourself. */ SOUND->HandleSongTimer( false ); - TICK_EARLY_SECONDS.Refresh(); - // set both players to joined so the credit message doesn't show FOREACH_PlayerNumber( p ) GAMESTATE->m_bSideIsJoined[p] = true; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index d44841803e..9960bebf6e 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -41,6 +41,7 @@ #include "Foreach.h" #include "DancingCharacters.h" #include "ScreenDimensions.h" +#include "ThemeMetric.h" // // Defines @@ -55,8 +56,8 @@ * go away eventually, once metrics can redirect to Lua calls. */ #define INITIAL_BACKGROUND_BRIGHTNESS( play_mode ) THEME->GetMetricF(m_sName,"InitialBackgroundBrightness"+Capitalize(PlayModeToString(play_mode))) -static CachedThemeMetricF SECONDS_BETWEEN_COMMENTS ("ScreenGameplay","SecondsBetweenComments"); -static CachedThemeMetricF TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); +static ThemeMetric SECONDS_BETWEEN_COMMENTS ("ScreenGameplay","SecondsBetweenComments"); +static ThemeMetric TICK_EARLY_SECONDS ("ScreenGameplay","TickEarlySeconds"); /* Global, so it's accessible from ShowSavePrompt: */ static float g_fOldOffset; // used on offset screen to calculate difference @@ -100,9 +101,6 @@ void ScreenGameplay::Init() /* We do this ourself. */ SOUND->HandleSongTimer( false ); - SECONDS_BETWEEN_COMMENTS.Refresh(); - TICK_EARLY_SECONDS.Refresh(); - //need to initialize these before checking for demonstration mode //otherwise destructor will try to delete possibly invalid pointers diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index c40d647bc1..20d3e8bbc1 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -31,6 +31,7 @@ #include "Foreach.h" #include "StageStats.h" #include "Style.h" +#include "ThemeMetric.h" SongManager* SONGMAN = NULL; // global and accessable from anywhere in our program @@ -42,14 +43,14 @@ SongManager* SONGMAN = NULL; // global and accessable from anywhere in our progr #define NUM_GROUP_COLORS THEME->GetMetricI("SongManager","NumGroupColors") #define GROUP_COLOR( i ) THEME->GetMetricC("SongManager",ssprintf("GroupColor%d",i+1)) -CachedThemeMetricC BEGINNER_COLOR ("SongManager","BeginnerColor"); -CachedThemeMetricC EASY_COLOR ("SongManager","EasyColor"); -CachedThemeMetricC MEDIUM_COLOR ("SongManager","MediumColor"); -CachedThemeMetricC HARD_COLOR ("SongManager","HardColor"); -CachedThemeMetricC CHALLENGE_COLOR ("SongManager","ChallengeColor"); -CachedThemeMetricC EDIT_COLOR ("SongManager","EditColor"); -CachedThemeMetricC EXTRA_COLOR ("SongManager","ExtraColor"); -CachedThemeMetricI EXTRA_COLOR_METER ("SongManager","ExtraColorMeter"); +ThemeMetric BEGINNER_COLOR ("SongManager","BeginnerColor"); +ThemeMetric EASY_COLOR ("SongManager","EasyColor"); +ThemeMetric MEDIUM_COLOR ("SongManager","MediumColor"); +ThemeMetric HARD_COLOR ("SongManager","HardColor"); +ThemeMetric CHALLENGE_COLOR ("SongManager","ChallengeColor"); +ThemeMetric EDIT_COLOR ("SongManager","EditColor"); +ThemeMetric EXTRA_COLOR ("SongManager","ExtraColor"); +ThemeMetric EXTRA_COLOR_METER ("SongManager","ExtraColorMeter"); vector g_vGroupColors; RageTimer g_LastMetricUpdate; /* can't use RageTimer globally */ @@ -63,15 +64,6 @@ static void UpdateMetrics() g_vGroupColors.clear(); for( int i=0; i ARTIST_PREPEND_STRING ("TextBanner","ArtistPrependString"); +ThemeMetric TWO_LINES_TITLE_COMMAND ("TextBanner","TwoLinesTitleCommand"); +ThemeMetric TWO_LINES_SUBTITLE_COMMAND ("TextBanner","TwoLinesSubtitleCommand"); +ThemeMetric TWO_LINES_ARTIST_COMMAND ("TextBanner","TwoLinesArtistCommand"); +ThemeMetric THREE_LINES_TITLE_COMMAND ("TextBanner","ThreeLinesTitleCommand"); +ThemeMetric THREE_LINES_SUBTITLE_COMMAND ("TextBanner","ThreeLinesSubtitleCommand"); +ThemeMetric THREE_LINES_ARTIST_COMMAND ("TextBanner","ThreeLinesArtistCommand"); void TextBanner::Init() { @@ -24,13 +24,6 @@ void TextBanner::Init() m_bInitted = true; ASSERT( m_sName != "" ); - ARTIST_PREPEND_STRING.Refresh( m_sName ); - TWO_LINES_TITLE_COMMAND.Refresh( m_sName ); - TWO_LINES_SUBTITLE_COMMAND.Refresh( m_sName ); - TWO_LINES_ARTIST_COMMAND.Refresh( m_sName ); - THREE_LINES_TITLE_COMMAND.Refresh( m_sName ); - THREE_LINES_SUBTITLE_COMMAND.Refresh( m_sName ); - THREE_LINES_ARTIST_COMMAND.Refresh( m_sName ); m_textTitle.SetName( "Title" ); m_textTitle.LoadFromFont( THEME->GetPathToF("TextBanner") ); diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index 7106771cb6..9e9340e894 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -68,6 +68,13 @@ void ThemeManager::Subscribe( IThemeMetric *p ) g_pvpSubscribers->push_back( p ); } +void ThemeManager::Unsubscribe( IThemeMetric *p ) +{ + vector::iterator iter = find( g_pvpSubscribers->begin(), g_pvpSubscribers->end(), p ); + ASSERT( iter != g_pvpSubscribers->end() ); // tried to unregister when not registered + g_pvpSubscribers->erase( iter ); +} + /* We spend a lot of time doing redundant theme path lookups. Cache results. */ @@ -281,10 +288,10 @@ void ThemeManager::SwitchThemeAndLanguage( const CString &sThemeName, const CStr if ( SCREENMAN != NULL ) SCREENMAN->ThemeChanged(); + Lua::UpdateGlobals(); + // reload subscribers FOREACH( IThemeMetric*, *g_pvpSubscribers, p ) (*p)->Read(); - - Lua::UpdateGlobals(); } CString ThemeManager::GetThemeDirFromName( const CString &sThemeName ) diff --git a/stepmania/src/ThemeManager.h b/stepmania/src/ThemeManager.h index 569e57dbe0..982fd8a46e 100644 --- a/stepmania/src/ThemeManager.h +++ b/stepmania/src/ThemeManager.h @@ -68,6 +68,7 @@ public: // For self-registering metrics // static void Subscribe( IThemeMetric *p ); + static void Unsubscribe( IThemeMetric *p ); protected: @@ -87,78 +88,6 @@ protected: extern ThemeManager* THEME; // global and accessable from anywhere in our program -class CachedThemeMetric -{ -protected: - CString m_sClassName; - CString m_sValueName; - bool m_bInited; - - CString m_sValue; - - virtual void Update() { } - -public: - CachedThemeMetric( const CString &sClassName, const CString &sValueName ): - m_sClassName( sClassName ), - m_sValueName( sValueName ), - m_bInited( false ) - { - } - virtual ~CachedThemeMetric() { } - - void Refresh( const CString &sClassName = "" ) - { - m_sValue = THEME->GetMetric(sClassName==""? m_sClassName:sClassName,m_sValueName); - Update(); - m_bInited = true; - } - - operator const CString () const { ASSERT(m_bInited); return m_sValue; }; -}; - -class CachedThemeMetricF : public CachedThemeMetric -{ - float m_fValue; -public: - void Update() { m_fValue = (float)atof( m_sValue ); } - CachedThemeMetricF( const CString &sClassName, const CString &sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} - operator const float () const { ASSERT(m_bInited); return m_fValue; }; -}; - -class CachedThemeMetricI : public CachedThemeMetric -{ - int m_iValue; -public: - void Update() { m_iValue = atoi( m_sValue ); } - CachedThemeMetricI( const CString &sClassName, const CString &sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} - operator const int () const { ASSERT(m_bInited); return m_iValue; }; -}; - -class CachedThemeMetricB : public CachedThemeMetric -{ - bool m_bValue; -public: - void Update() { m_bValue = atoi( m_sValue ) != 0; } - CachedThemeMetricB( const CString &sClassName, const CString &sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} - operator const bool () const { ASSERT(m_bInited); return m_bValue; }; -}; - - - -class CachedThemeMetricC : public CachedThemeMetric -{ - RageColor m_cValue; -public: - void Update() - { - m_cValue = RageColor(1,1,1,1); - sscanf( m_sValue, "%f,%f,%f,%f", &m_cValue.r, &m_cValue.g, &m_cValue.b, &m_cValue.a ); - } - CachedThemeMetricC( const CString &sClassName, const CString &sValueName ) : CachedThemeMetric( sClassName, sValueName ) {} - operator const RageColor () const { ASSERT(m_bInited); return m_cValue; }; -}; - #endif /* diff --git a/stepmania/src/ThemeMetric.h b/stepmania/src/ThemeMetric.h index ca1d95dad7..3a603d28d9 100644 --- a/stepmania/src/ThemeMetric.h +++ b/stepmania/src/ThemeMetric.h @@ -28,6 +28,17 @@ public: ThemeManager::Subscribe( this ); } + ~ThemeMetric() + { + ThemeManager::Unsubscribe( this ); + } + + void ChangeGroup( const CString &sGroup ) + { + m_sGroup = sGroup; + Read(); + } + void Read() { THEME->GetMetric( m_sGroup, m_sName, m_currentValue );