remove CachedThemeMetrics in favor of ThemeMetric<T>

fix "CachedThemeMetrics don't read HTML colors and don't evaluate Lua expressions"
This commit is contained in:
Chris Danford
2004-11-06 20:36:04 +00:00
parent 3594cc345e
commit 5127ceef4d
30 changed files with 166 additions and 321 deletions
+4 -7
View File
@@ -16,18 +16,18 @@
#include "BeginnerHelper.h"
#include "StageStats.h"
#include "ScreenDimensions.h"
#include "ThemeMetric.h"
#include <set>
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<bool> BLINK_DANGER_ALL("Background","BlinkDangerAll");
ThemeMetric<bool> 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;
+3 -5
View File
@@ -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<bool> SCROLL_RANDOM ("Banner","ScrollRandom");
ThemeMetric<bool> SCROLL_ROULETTE ("Banner","ScrollRoulette");
Banner::Banner()
{
SCROLL_RANDOM.Refresh();
SCROLL_ROULETTE.Refresh();
m_bScrolling = false;
m_fPercentScrolling = 0;
+2 -3
View File
@@ -3,9 +3,10 @@
#include "ThemeManager.h"
#include "GameState.h"
#include "PrefsManager.h"
#include "ThemeMetric.h"
CachedThemeMetricF METER_WIDTH ("CombinedLifeMeterTug","MeterWidth");
ThemeMetric<float> 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));
+20 -39
View File
@@ -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<float> LABEL_X ("Combo","LabelX");
ThemeMetric<float> LABEL_Y ("Combo","LabelY");
ThemeMetric<int> LABEL_HORIZ_ALIGN ("Combo","LabelHorizAlign");
ThemeMetric<int> LABEL_VERT_ALIGN ("Combo","LabelVertAlign");
ThemeMetric<float> NUMBER_X ("Combo","NumberX");
ThemeMetric<float> NUMBER_Y ("Combo","NumberY");
ThemeMetric<int> NUMBER_HORIZ_ALIGN ("Combo","NumberHorizAlign");
ThemeMetric<int> NUMBER_VERT_ALIGN ("Combo","NumberVertAlign");
ThemeMetric<int> SHOW_COMBO_AT ("Combo","ShowComboAt");
ThemeMetric<float> NUMBER_MIN_ZOOM ("Combo","NumberMinZoom");
ThemeMetric<float> NUMBER_MAX_ZOOM ("Combo","NumberMaxZoom");
ThemeMetric<float> NUMBER_MAX_ZOOM_AT ("Combo","NumberMaxZoomAt");
ThemeMetric<float> PULSE_ZOOM ("Combo","PulseZoom");
ThemeMetric<float> C_TWEEN_SECONDS ("Combo","TweenSeconds");
ThemeMetric<CString> FULL_COMBO_GREATS_COMMAND ("Combo","FullComboGreatsCommand");
ThemeMetric<CString> FULL_COMBO_PERFECTS_COMMAND ("Combo","FullComboPerfectsCommand");
ThemeMetric<CString> FULL_COMBO_MARVELOUSES_COMMAND ("Combo","FullComboMarvelousesCommand");
ThemeMetric<CString> FULL_COMBO_BROKEN_COMMAND ("Combo","FullComboBrokenCommand");
ThemeMetric<bool> 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();
+3 -5
View File
@@ -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<CString> ICONONCOMMAND ("DifficultyDisplay","IconOnCommand");
ThemeMetric<CString> ICONOFFCOMMAND ("DifficultyDisplay","IconOffCommand");
DifficultyDisplay::DifficultyDisplay()
{
ICONONCOMMAND.Refresh();
ICONOFFCOMMAND.Refresh();
float fHeight = 0;
int diff;
for( diff = DIFFICULTY_BEGINNER; diff <= DIFFICULTY_CHALLENGE; ++diff )
+3 -3
View File
@@ -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;
+3
View File
@@ -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<Row> m_Rows;
ThemeMetric<CString> MOVE_COMMAND;
};
#endif
+1 -1
View File
@@ -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 ThemeMetric<CString>s, 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");
+2 -3
View File
@@ -8,8 +8,9 @@
#include "PrefsManager.h"
#include "ThemeManager.h"
#include "SongManager.h"
#include "ThemeMetric.h"
static CachedThemeMetricF FADE_SECONDS ("FadingBanner","FadeSeconds");
static ThemeMetric<float> 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;
+3 -4
View File
@@ -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<float> MOUNTAIN_WIDTH ("GrooveGraph","MountainWidth");
ThemeMetric<float> 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; i<NUM_DIFFICULTIES; i++ )
g_DifficultyColorsCache[i] = DIFFICULTY_COLORS((Difficulty)i);
MOUNTAIN_WIDTH.Refresh();
MOUNTAIN_HEIGHT.Refresh();
m_sprBase.Load( THEME->GetPathToG("GrooveGraph base") );
this->AddChild( &m_sprBase );
+7 -18
View File
@@ -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<CString> OK_COMMAND ("HoldJudgment","OKCommand");
ThemeMetric<CString> NG_COMMAND ("HoldJudgment","NGCommand");
ThemeMetric<CString> OK_ODD_COMMAND ("HoldJudgment","OKOddCommand");
ThemeMetric<CString> NG_ODD_COMMAND ("HoldJudgment","NGOddCommand");
ThemeMetric<CString> OK_EVEN_COMMAND ("HoldJudgment","OKEvenCommand");
ThemeMetric<CString> 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") );
+2 -3
View File
@@ -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<float> 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;
+19 -40
View File
@@ -5,53 +5,32 @@
#include "PrefsManager.h"
#include "GameState.h"
#include "ThemeManager.h"
#include "ThemeMetric.h"
static ThemeMetric<CString> MARVELOUS_COMMAND ("Judgment","MarvelousCommand");
static ThemeMetric<CString> PERFECT_COMMAND ("Judgment","PerfectCommand");
static ThemeMetric<CString> GREAT_COMMAND ("Judgment","GreatCommand");
static ThemeMetric<CString> GOOD_COMMAND ("Judgment","GoodCommand");
static ThemeMetric<CString> BOO_COMMAND ("Judgment","BooCommand");
static ThemeMetric<CString> 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<CString> MARVELOUS_ODD_COMMAND ("Judgment","MarvelousOddCommand");
static ThemeMetric<CString> PERFECT_ODD_COMMAND ("Judgment","PerfectOddCommand");
static ThemeMetric<CString> GREAT_ODD_COMMAND ("Judgment","GreatOddCommand");
static ThemeMetric<CString> GOOD_ODD_COMMAND ("Judgment","GoodOddCommand");
static ThemeMetric<CString> BOO_ODD_COMMAND ("Judgment","BooOddCommand");
static ThemeMetric<CString> 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<CString> MARVELOUS_EVEN_COMMAND ("Judgment","MarvelousEvenCommand");
static ThemeMetric<CString> PERFECT_EVEN_COMMAND ("Judgment","PerfectEvenCommand");
static ThemeMetric<CString> GREAT_EVEN_COMMAND ("Judgment","GreatEvenCommand");
static ThemeMetric<CString> GOOD_EVEN_COMMAND ("Judgment","GoodEvenCommand");
static ThemeMetric<CString> BOO_EVEN_COMMAND ("Judgment","BooEvenCommand");
static ThemeMetric<CString> 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") );
+6 -15
View File
@@ -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<float> METER_WIDTH ("LifeMeterBar","MeterWidth");
static ThemeMetric<float> METER_HEIGHT ("LifeMeterBar","MeterHeight");
static ThemeMetric<float> DANGER_THRESHOLD ("LifeMeterBar","DangerThreshold");
static ThemeMetric<int> NUM_CHAMBERS ("LifeMeterBar","NumChambers");
static ThemeMetric<int> 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) );
+9 -19
View File
@@ -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<float> 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<float> 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<float> ITEM_SPACING_Y ("MusicWheel","ItemSpacingY");
ThemeMetric<float> WHEEL_3D_RADIUS ("MusicWheel","Wheel3DRadius");
ThemeMetric<float> 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<bool> USE_3D ("MusicWheel","Use3D");
ThemeMetric<int> 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.
+10 -17
View File
@@ -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<float> GRAY_ARROWS_Y_STANDARD ("Player","ReceptorArrowsYStandard");
ThemeMetric<float> 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<float> HOLD_JUDGMENT_Y_STANDARD ("Player","HoldJudgmentYStandard");
ThemeMetric<float> HOLD_JUDGMENT_Y_REVERSE ("Player","HoldJudgmentYReverse");
ThemeMetric<int> BRIGHT_GHOST_COMBO_THRESHOLD("Player","BrightGhostComboThreshold");
ThemeMetric<bool> TAP_JUDGMENTS_UNDER_FIELD ("Player","TapJudgmentsUnderField");
ThemeMetric<bool> 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();
}
+5
View File
@@ -52,6 +52,11 @@ public:
PrefsManager::Subscribe( this );
}
~Preference()
{
PrefsManager::Unsubscribe( this );
}
void LoadDefault()
{
m_currentValue = m_defaultValue;
+6
View File
@@ -40,6 +40,12 @@ void PrefsManager::Subscribe( IPreference *p )
g_pvpSubscribers->push_back( p );
}
void PrefsManager::Unsubscribe( IPreference *p )
{
vector<IPreference*>::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;
+1
View File
@@ -294,6 +294,7 @@ public:
// For self-registering prefs
//
static void Subscribe( IPreference *p );
static void Unsubscribe( IPreference *p );
protected:
void ReadPrefsFromFile( CString sIni );
+9 -16
View File
@@ -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<CString> MARVELOUS_COMMAND ("ProTimingDisplay","MarvelousCommand");
static ThemeMetric<CString> PERFECT_COMMAND ("ProTimingDisplay","PerfectCommand");
static ThemeMetric<CString> GREAT_COMMAND ("ProTimingDisplay","GreatCommand");
static ThemeMetric<CString> GOOD_COMMAND ("ProTimingDisplay","GoodCommand");
static ThemeMetric<CString> BOO_COMMAND ("ProTimingDisplay","BooCommand");
static ThemeMetric<CString> MISS_COMMAND ("ProTimingDisplay","MissCommand");
static ThemeMetric<CString> 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<CString> *Commands[NUM_TAP_NOTE_SCORES] =
{
NULL, /* no TNS_NONE */
&HIT_MINE_COMMAND,
+2 -2
View File
@@ -6,13 +6,13 @@
#include "Character.h"
#include "ScreenManager.h"
#include "PrefsManager.h"
#include "ThemeMetric.h"
CachedThemeMetricF ATTACK_DURATION_SECONDS ("ScoreKeeperRave","AttackDurationSeconds");
ThemeMetric<float> 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 )
-4
View File
@@ -1,10 +1,6 @@
#include "global.h"
#include "ScreenDimensions.h"
ThemeMetric<float> SCREEN_WIDTH("Common","ScreenWidth");
ThemeMetric<float> SCREEN_HEIGHT("Common","ScreenHeight");
/*
* (c) 2001-2002 Chris Danford
+3 -3
View File
@@ -3,10 +3,10 @@
#ifndef SCREEN_DIMENSIONS_H
#define SCREEN_DIMENSIONS_H
#include "ThemeMetric.h"
#include "ThemeManager.h"
extern ThemeMetric<float> SCREEN_WIDTH;
extern ThemeMetric<float> 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)
+2 -3
View File
@@ -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<float> 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;
+3 -5
View File
@@ -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<float> SECONDS_BETWEEN_COMMENTS ("ScreenGameplay","SecondsBetweenComments");
static ThemeMetric<float> 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
+9 -17
View File
@@ -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<RageColor> BEGINNER_COLOR ("SongManager","BeginnerColor");
ThemeMetric<RageColor> EASY_COLOR ("SongManager","EasyColor");
ThemeMetric<RageColor> MEDIUM_COLOR ("SongManager","MediumColor");
ThemeMetric<RageColor> HARD_COLOR ("SongManager","HardColor");
ThemeMetric<RageColor> CHALLENGE_COLOR ("SongManager","ChallengeColor");
ThemeMetric<RageColor> EDIT_COLOR ("SongManager","EditColor");
ThemeMetric<RageColor> EXTRA_COLOR ("SongManager","ExtraColor");
ThemeMetric<int> EXTRA_COLOR_METER ("SongManager","ExtraColorMeter");
vector<RageColor> 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<NUM_GROUP_COLORS; i++ )
g_vGroupColors.push_back( GROUP_COLOR(i) );
BEGINNER_COLOR.Refresh();
EASY_COLOR.Refresh();
MEDIUM_COLOR.Refresh();
HARD_COLOR.Refresh();
CHALLENGE_COLOR.Refresh();
EDIT_COLOR.Refresh();
EXTRA_COLOR.Refresh();
EXTRA_COLOR_METER.Refresh();
}
SongManager::SongManager()
+8 -15
View File
@@ -7,15 +7,15 @@
#include "SongManager.h"
#include "RageTextureManager.h"
#include "ActorUtil.h"
#include "ThemeMetric.h"
CachedThemeMetric ARTIST_PREPEND_STRING ("TextBanner","ArtistPrependString");
CachedThemeMetric TWO_LINES_TITLE_COMMAND ("TextBanner","TwoLinesTitleCommand");
CachedThemeMetric TWO_LINES_SUBTITLE_COMMAND ("TextBanner","TwoLinesSubtitleCommand");
CachedThemeMetric TWO_LINES_ARTIST_COMMAND ("TextBanner","TwoLinesArtistCommand");
CachedThemeMetric THREE_LINES_TITLE_COMMAND ("TextBanner","ThreeLinesTitleCommand");
CachedThemeMetric THREE_LINES_SUBTITLE_COMMAND ("TextBanner","ThreeLinesSubtitleCommand");
CachedThemeMetric THREE_LINES_ARTIST_COMMAND ("TextBanner","ThreeLinesArtistCommand");
ThemeMetric<CString> ARTIST_PREPEND_STRING ("TextBanner","ArtistPrependString");
ThemeMetric<CString> TWO_LINES_TITLE_COMMAND ("TextBanner","TwoLinesTitleCommand");
ThemeMetric<CString> TWO_LINES_SUBTITLE_COMMAND ("TextBanner","TwoLinesSubtitleCommand");
ThemeMetric<CString> TWO_LINES_ARTIST_COMMAND ("TextBanner","TwoLinesArtistCommand");
ThemeMetric<CString> THREE_LINES_TITLE_COMMAND ("TextBanner","ThreeLinesTitleCommand");
ThemeMetric<CString> THREE_LINES_SUBTITLE_COMMAND ("TextBanner","ThreeLinesSubtitleCommand");
ThemeMetric<CString> 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") );
+9 -2
View File
@@ -68,6 +68,13 @@ void ThemeManager::Subscribe( IThemeMetric *p )
g_pvpSubscribers->push_back( p );
}
void ThemeManager::Unsubscribe( IThemeMetric *p )
{
vector<IThemeMetric*>::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 )
+1 -72
View File
@@ -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
/*
+11
View File
@@ -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 );