diff --git a/stepmania/src/ActiveAttackList.cpp b/stepmania/src/ActiveAttackList.cpp index c95206abd4..8e7abee4ef 100644 --- a/stepmania/src/ActiveAttackList.cpp +++ b/stepmania/src/ActiveAttackList.cpp @@ -2,7 +2,6 @@ #include "ActiveAttackList.h" #include "RageUtil.h" #include "GameState.h" -#include "ThemeManager.h" #include "Inventory.h" #include "RageTimer.h" diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index 2c1a56b3bb..ff31d760a9 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -7,6 +7,7 @@ #include "GameConstantsAndTypes.h" #include "RageLog.h" #include "arch/Dialog/Dialog.h" +#include "Foreach.h" float Actor::g_fCurrentBGMTime = 0, Actor::g_fCurrentBGMBeat; @@ -616,13 +617,10 @@ void Actor::AddRotationR( float rot ) RageQuatMultiply( &DestTweenState().quat, DestTweenState().quat, RageQuatFromR(rot) ); } -void Actor::Command( const CString &sCommands ) +void Actor::Command( const ActorCommands &vCommands ) { - vector vCommands; - ParseCommands( sCommands, vCommands ); - - for( unsigned i=0; iHandleCommand( vCommands[i] ); + FOREACH_CONST( ActorCommand, vCommands, c ) + this->HandleCommand( *c ); } void Actor::HandleCommand( const ActorCommand &command ) @@ -655,9 +653,9 @@ void Actor::HandleCommand( const ActorCommand &command ) else if( sName=="x" ) SetX( fParam(1) ); else if( sName=="y" ) SetY( fParam(1) ); else if( sName=="z" ) SetZ( fParam(1) ); - else if( sName=="addx" ) SetX( GetDestX()+fParam(1) ); - else if( sName=="addy" ) SetY( GetDestY()+fParam(1) ); - else if( sName=="addz" ) SetZ( GetDestZ()+fParam(1) ); + else if( sName=="addx" ) AddX( fParam(1) ); + else if( sName=="addy" ) AddY( fParam(1) ); + else if( sName=="addz" ) AddZ( fParam(1) ); else if( sName=="zoom" ) SetZoom( fParam(1) ); else if( sName=="zoomx" ) SetZoomX( fParam(1) ); else if( sName=="zoomy" ) SetZoomY( fParam(1) ); @@ -765,10 +763,10 @@ void Actor::HandleCommand( const ActorCommand &command ) EndHandleParams; } -float Actor::GetCommandLengthSeconds( const CString &sCommands ) +float Actor::GetCommandsLengthSeconds( const ActorCommands &vCommands ) { Actor temp; - temp.Command(sCommands); + temp.Command(vCommands); return temp.GetTweenTimeLeft(); } diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index f260daae35..9cc062e4c1 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -103,6 +103,9 @@ public: void SetY( float y ) { DestTweenState().pos.y = y; }; void SetZ( float z ) { DestTweenState().pos.z = z; }; void SetXY( float x, float y ) { DestTweenState().pos.x = x; DestTweenState().pos.y = y; }; + void AddX( float x ) { SetX( GetDestX()+x ); } + void AddY( float y ) { SetY( GetDestY()+y ); } + void AddZ( float z ) { SetZ( GetDestZ()+z ); } // height and width vary depending on zoom float GetUnzoomedWidth() { return m_size.x; } @@ -302,9 +305,9 @@ public: // // Commands // - void Command( const CString &sCommands ); + void Command( const ActorCommands &vCommands ); virtual void HandleCommand( const ActorCommand &command ); // derivable - static float GetCommandLengthSeconds( const CString &sCommands ); + static float GetCommandsLengthSeconds( const ActorCommands &vCommands ); // // Animation diff --git a/stepmania/src/ActorCommands.cpp b/stepmania/src/ActorCommands.cpp index 1deae178f6..529b1b0a15 100644 --- a/stepmania/src/ActorCommands.cpp +++ b/stepmania/src/ActorCommands.cpp @@ -52,7 +52,7 @@ CString ActorCommand::GetOriginalCommandString() const return join( ",", asTokens ); } -void ParseCommands( const CString &sCommands, vector &vCommandsOut ) +void ParseActorCommands( const CString &sCommands, ActorCommands &vCommandsOut ) { vCommandsOut.clear(); CStringArray vsCommands; @@ -68,6 +68,13 @@ void ParseCommands( const CString &sCommands, vector &vCommandsOut } } +ActorCommands ParseActorCommands( const CString &sCommands ) +{ + ActorCommands vCommands; + ParseActorCommands( sCommands, vCommands ); + return vCommands; +} + /* * (c) 2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/ActorCommands.h b/stepmania/src/ActorCommands.h index b4399fbbd3..1c07a73450 100644 --- a/stepmania/src/ActorCommands.h +++ b/stepmania/src/ActorCommands.h @@ -32,9 +32,15 @@ struct ActorCommand CString GetOriginalCommandString() const; // for when reporting an error in number of params }; +typedef vector ActorCommands; + // Take a command list string and return pointers to each of the tokens in the // string. sCommand list is a list of commands separated by ';'. -void ParseCommands( const CString &sCommands, vector &vCommandsOut ); +// TODO: This is expensive to do during the game. Eventually, +// move all calls to ParseActorCommands to happen during load, then execute +// from the parsed ActorCommand structures. +void ParseActorCommands( const CString &sCommands, ActorCommands &vCommandsOut ); +ActorCommands ParseActorCommands( const CString &sCommands ); #define BeginHandleParams int iMaxIndexAccessed = 0; diff --git a/stepmania/src/ActorFrame.cpp b/stepmania/src/ActorFrame.cpp index c0f349ef99..269b6f9622 100644 --- a/stepmania/src/ActorFrame.cpp +++ b/stepmania/src/ActorFrame.cpp @@ -67,7 +67,7 @@ void ActorFrame::DrawPrimitives() m_SubActors[i]->Draw(); } -void ActorFrame::RunCommandOnChildren( const CString &cmd ) +void ActorFrame::RunCommandOnChildren( const ActorCommands &cmd ) { for( unsigned i=0; iCommand( cmd ); diff --git a/stepmania/src/ActorFrame.h b/stepmania/src/ActorFrame.h index 1eed398891..6d6ab540d4 100644 --- a/stepmania/src/ActorFrame.h +++ b/stepmania/src/ActorFrame.h @@ -19,7 +19,7 @@ public: void DeleteAllChildren(); - virtual void RunCommandOnChildren( const CString &cmd ); /* but not on self */ + virtual void RunCommandOnChildren( const ActorCommands &cmds ); /* but not on self */ virtual void RunCommandOnChildren( const ActorCommand &cmd ); /* but not on self */ virtual void HandleCommand( const ActorCommand &command ); // derivable diff --git a/stepmania/src/ActorUtil.cpp b/stepmania/src/ActorUtil.cpp index fc977cc279..3f779e02b0 100644 --- a/stepmania/src/ActorUtil.cpp +++ b/stepmania/src/ActorUtil.cpp @@ -288,7 +288,9 @@ void UtilCommand( Actor& actor, const CString &sClassName, const CString &sComma // if( actor.GetHidden() ) // return 0; - actor.Command( "playcommand," + sCommandName ); + ActorCommand ac; + ac.Set("playcommand,"+sCommandName); + actor.HandleCommand( ac ); // HACK: It's very often that we command things to TweenOffScreen // that we aren't drawing. We know that an Actor is not being @@ -305,7 +307,7 @@ void UtilCommand( Actor& actor, const CString &sClassName, const CString &sComma sClassName.c_str(), sCommandName.c_str()) ); } - actor.Command( THEME->GetMetric(sClassName,actor.GetID()+sCommandName+"Command") ); + actor.Command( THEME->GetMetricA(sClassName,actor.GetID()+sCommandName+"Command") ); } void AutoActor::Load( const CString &sPath ) diff --git a/stepmania/src/AttackDisplay.cpp b/stepmania/src/AttackDisplay.cpp index 2be31dbdf9..b464c532e8 100644 --- a/stepmania/src/AttackDisplay.cpp +++ b/stepmania/src/AttackDisplay.cpp @@ -100,7 +100,7 @@ void AttackDisplay::SetAttack( const CString &sText ) m_sprAttack.SetDiffuseAlpha( 1 ); m_sprAttack.Load( path ); const CString sName = ssprintf( "%sP%i", sText.c_str(), m_PlayerNumber+1 ); - m_sprAttack.Command( THEME->GetMetric("AttackDisplay", sName + "OnCommand" ) ); + m_sprAttack.Command( THEME->GetMetricA("AttackDisplay", sName + "OnCommand" ) ); } /* diff --git a/stepmania/src/BGAnimation.cpp b/stepmania/src/BGAnimation.cpp index 331e935964..59bb8265ee 100644 --- a/stepmania/src/BGAnimation.cpp +++ b/stepmania/src/BGAnimation.cpp @@ -172,13 +172,13 @@ void BGAnimation::LoadFromAniDir( CString sAniDir ) ActorScroller::SetDestinationItem( int(m_SubActors.size()-1+fItemPaddingEnd) ); } - CString InitCommand; - if( ini.GetValue( "BGAnimation", "InitCommand", InitCommand ) ) + CString sInitCommand; + if( ini.GetValue( "BGAnimation", "InitCommand", sInitCommand ) ) { /* There's an InitCommand. Run it now. This can be used to eg. change Z to * modify draw order between BGAs in a Foreground. Most things should be done * in metrics.ini commands, not here. */ - this->Command( InitCommand ); + this->Command( ParseActorCommands(sInitCommand) ); } } else diff --git a/stepmania/src/BGAnimationLayer.cpp b/stepmania/src/BGAnimationLayer.cpp index 7daeb6c58c..80057ba846 100644 --- a/stepmania/src/BGAnimationLayer.cpp +++ b/stepmania/src/BGAnimationLayer.cpp @@ -7,7 +7,6 @@ #include "RageTimer.h" #include "RageLog.h" #include "song.h" -#include "ThemeManager.h" #include "ActorCollision.h" #include "Sprite.h" #include "RageDisplay.h" @@ -669,13 +668,14 @@ void BGAnimationLayer::Update( float fDeltaTime ) switch( m_Type ) { case TYPE_SPRITE: - for( unsigned i=0; iCommand( ssprintf("StretchTexCoords,%f,%f", + Sprite *pSprite = (Sprite*)m_SubActors[i]; + pSprite->StretchTexCoords( fDeltaTime*m_fTexCoordVelocityX, - fDeltaTime*m_fTexCoordVelocityY) ); + fDeltaTime*m_fTexCoordVelocityY ); } } break; @@ -991,10 +991,10 @@ void BGAnimationLayer::GainFocus( float fRate, bool bRewindMovie, bool bLoop ) // TODO: Don't special case subActor[0]. The movie layer should be set up with // a LoseFocusCommand that pauses, and a GainFocusCommand that plays. if( bRewindMovie ) - RunCommandOnChildren( "position,0" ); - RunCommandOnChildren( ssprintf("loop,%i",bLoop) ); - RunCommandOnChildren( "play" ); - RunCommandOnChildren( ssprintf("rate,%f",fRate) ); + RunCommandOnChildren( ParseActorCommands("position,0") ); + RunCommandOnChildren( ParseActorCommands(ssprintf("loop,%i",bLoop)) ); + RunCommandOnChildren( ParseActorCommands("play") ); + RunCommandOnChildren( ParseActorCommands(ssprintf("rate,%f",fRate)) ); if( m_fRepeatCommandEverySeconds == -1 ) // if not repeating { @@ -1003,7 +1003,7 @@ void BGAnimationLayer::GainFocus( float fRate, bool bRewindMovie, bool bLoop ) * should run OnCommand when they're actually displayed, when GainFocus * gets called. We've already run OnCommand; abort it so we don't run tweens * twice. */ - RunCommandOnChildren( "stoptweening" ); + RunCommandOnChildren( ParseActorCommands("stoptweening") ); PlayCommand( "On" ); } @@ -1017,7 +1017,7 @@ void BGAnimationLayer::LoseFocus() if( !m_SubActors.size() ) return; - RunCommandOnChildren( "pause" ); + RunCommandOnChildren( ParseActorCommands("pause") ); PlayCommand( "LoseFocus" ); } @@ -1025,7 +1025,7 @@ void BGAnimationLayer::LoseFocus() void BGAnimationLayer::PlayCommand( const CString &sCommandName ) { for( unsigned i=0; iCommand( ssprintf("playcommand,%s", sCommandName.c_str()) ); + m_SubActors[i]->Command( ParseActorCommands("playcommand,"+sCommandName) ); CString sKey = sCommandName; sKey.MakeLower(); @@ -1035,7 +1035,7 @@ void BGAnimationLayer::PlayCommand( const CString &sCommandName ) return; for( unsigned i=0; iCommand( it->second ); + m_SubActors[i]->Command( ParseActorCommands(it->second) ); } /* diff --git a/stepmania/src/BPMDisplay.cpp b/stepmania/src/BPMDisplay.cpp index 6e9e46e5d3..987fd67d7b 100644 --- a/stepmania/src/BPMDisplay.cpp +++ b/stepmania/src/BPMDisplay.cpp @@ -4,10 +4,9 @@ #include "GameConstantsAndTypes.h" #include "PrefsManager.h" #include "GameState.h" -#include "ThemeManager.h" #include "Course.h" #include "Style.h" - +#include "ThemeManager.h" #define NORMAL_COLOR THEME->GetMetricC(m_sName,"NormalColor") #define CHANGE_COLOR THEME->GetMetricC(m_sName,"ChangeColor") diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index d853752a00..bd95301cc4 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -7,7 +7,6 @@ #include "RageLog.h" #include "RageTextureManager.h" #include "GameState.h" -#include "ThemeManager.h" #include "PrefsManager.h" #include "NoteTypes.h" #include "Steps.h" @@ -22,14 +21,14 @@ 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") -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) +ThemeMetric LEFT_EDGE ("Background","LeftEdge"); +ThemeMetric TOP_EDGE ("Background","TopEdge"); +ThemeMetric RIGHT_EDGE ("Background","RightEdge"); +ThemeMetric BOTTOM_EDGE ("Background","BottomEdge"); +#define RECT_BACKGROUND RectF (LEFT_EDGE,TOP_EDGE,RIGHT_EDGE,BOTTOM_EDGE) +ThemeMetric BLINK_DANGER_ALL ("Background","BlinkDangerAll"); +ThemeMetric DANGER_ALL_IS_OPAQUE ("Background","DangerAllIsOpaque"); +ThemeMetric BRIGHTNESS_FADE_COMMAND ("Background","BrightnessFadeCommand"); static float g_fBackgroundCenterWidth = 40; const CString STATIC_BACKGROUND = "static background"; @@ -436,9 +435,9 @@ void Background::LoadFromSong( const Song* pSong ) * may look something like "BGAnimation, BGAnimationLayer, Sprite" or it * may be deeper, like "BGAnimation, BGAnimationLayer, BGAnimation, * BGAnimationLayer, Sprite". */ - pBGA->Command( "propagate,1" ); - pBGA->Command( "effectclock,music" ); - pBGA->Command( "propagate,0" ); + pBGA->Command( ParseActorCommands("propagate,1") ); + pBGA->Command( ParseActorCommands("effectclock,music") ); + pBGA->Command( ParseActorCommands("propagate,0") ); } } diff --git a/stepmania/src/Banner.cpp b/stepmania/src/Banner.cpp index ce963ec4d4..dda4acc7cc 100644 --- a/stepmania/src/Banner.cpp +++ b/stepmania/src/Banner.cpp @@ -2,7 +2,6 @@ #include "Banner.h" #include "PrefsManager.h" #include "SongManager.h" -#include "ThemeManager.h" #include "RageUtil.h" #include "song.h" #include "RageTextureManager.h" diff --git a/stepmania/src/BeginnerHelper.cpp b/stepmania/src/BeginnerHelper.cpp index 8516355f12..46938c4383 100644 --- a/stepmania/src/BeginnerHelper.cpp +++ b/stepmania/src/BeginnerHelper.cpp @@ -6,7 +6,6 @@ #include "PrefsManager.h" #include "RageLog.h" #include "RageDisplay.h" -#include "ThemeManager.h" #include "Steps.h" #include "Style.h" #include "Model.h" diff --git a/stepmania/src/Combo.cpp b/stepmania/src/Combo.cpp index aeed45269f..12249ef85a 100644 --- a/stepmania/src/Combo.cpp +++ b/stepmania/src/Combo.cpp @@ -21,10 +21,10 @@ 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 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"); diff --git a/stepmania/src/DifficultyDisplay.cpp b/stepmania/src/DifficultyDisplay.cpp index aa21c902f3..acf961a9f4 100644 --- a/stepmania/src/DifficultyDisplay.cpp +++ b/stepmania/src/DifficultyDisplay.cpp @@ -3,8 +3,8 @@ #include "song.h" #include "ThemeMetric.h" -ThemeMetric ICONONCOMMAND ("DifficultyDisplay","IconOnCommand"); -ThemeMetric ICONOFFCOMMAND ("DifficultyDisplay","IconOffCommand"); +ThemeMetric ICONONCOMMAND ("DifficultyDisplay","IconOnCommand"); +ThemeMetric ICONOFFCOMMAND ("DifficultyDisplay","IconOffCommand"); DifficultyDisplay::DifficultyDisplay() { diff --git a/stepmania/src/DifficultyList.cpp b/stepmania/src/DifficultyList.cpp index 2608e453a5..601494800b 100644 --- a/stepmania/src/DifficultyList.cpp +++ b/stepmania/src/DifficultyList.cpp @@ -233,10 +233,10 @@ void DifficultyList::PositionItems() if( m_bShown && m < (int)m_Rows.size() ) bHidden = m_Rows[m].m_bHidden; - const CString cmd = ssprintf( "diffusealpha,%f", bHidden? 0.0f:1.0f ); - m_Lines[m].m_Description.Command( cmd ); - m_Lines[m].m_Meter.RunCommandOnChildren( cmd ); - m_Lines[m].m_Number.Command( cmd ); + const ActorCommands cmds = ParseActorCommands( ssprintf("diffusealpha,%f",bHidden?0.0f:1.0f) ); + m_Lines[m].m_Description.Command( cmds ); + m_Lines[m].m_Meter.RunCommandOnChildren( cmds ); + m_Lines[m].m_Number.Command( cmds ); } @@ -356,9 +356,10 @@ void DifficultyList::HideRows() { for( unsigned m = 0; m < m_Rows.size(); ++m ) { - m_Lines[m].m_Description.Command( "finishtweening;diffusealpha,0" ); - m_Lines[m].m_Meter.RunCommandOnChildren( "finishtweening;diffusealpha,0" ); - m_Lines[m].m_Number.Command( "finishtweening;diffusealpha,0" ); + static const ActorCommands cmds = ParseActorCommands( "finishtweening;diffusealpha,0" ); + m_Lines[m].m_Description.Command( cmds ); + m_Lines[m].m_Meter.RunCommandOnChildren( cmds ); + m_Lines[m].m_Number.Command( cmds ); } } @@ -368,9 +369,10 @@ void DifficultyList::TweenOnScreen() m_bShown = true; for( unsigned m = 0; m < m_Rows.size(); ++m ) { - m_Lines[m].m_Description.Command( "finishtweening" ); - m_Lines[m].m_Meter.RunCommandOnChildren( "finishtweening" ); - m_Lines[m].m_Number.Command( "finishtweening" ); + static const ActorCommands cmds = ParseActorCommands( "finishtweening" ); + m_Lines[m].m_Description.Command( cmds ); + m_Lines[m].m_Meter.RunCommandOnChildren( cmds ); + m_Lines[m].m_Number.Command( cmds ); } // PositionItems(); diff --git a/stepmania/src/DifficultyList.h b/stepmania/src/DifficultyList.h index 4f44a12796..dc2720400e 100644 --- a/stepmania/src/DifficultyList.h +++ b/stepmania/src/DifficultyList.h @@ -63,7 +63,7 @@ private: vector m_Rows; - ThemeMetric MOVE_COMMAND; + ThemeMetric MOVE_COMMAND; }; #endif diff --git a/stepmania/src/GhostArrow.cpp b/stepmania/src/GhostArrow.cpp index dfde057ccc..c4fdd7606f 100644 --- a/stepmania/src/GhostArrow.cpp +++ b/stepmania/src/GhostArrow.cpp @@ -31,7 +31,7 @@ void GhostArrow::Load( CString sNoteSkin, CString sButton, CString sElement ) { CString sJudge = TapNoteScoreToString( i ); CString sCommand = Capitalize(sJudge)+"Command"; - m_sScoreCommand[i] = NOTESKIN->GetMetric( sNoteSkin, m_sName, sCommand ); + m_acScoreCommand[i] = NOTESKIN->GetMetricA( sNoteSkin, m_sName, sCommand ); } } @@ -53,7 +53,7 @@ void GhostArrow::Step( TapNoteScore score ) m_spr[score].SetHidden( false ); m_spr[score].StopTweening(); - m_spr[score].Command( m_sScoreCommand[score] ); + m_spr[score].Command( m_acScoreCommand[score] ); } /* diff --git a/stepmania/src/GhostArrow.h b/stepmania/src/GhostArrow.h index df3f65771a..a0f144e585 100644 --- a/stepmania/src/GhostArrow.h +++ b/stepmania/src/GhostArrow.h @@ -21,7 +21,7 @@ public: protected: PlayerNumber m_PlayerNumber; Sprite m_spr[NUM_TAP_NOTE_SCORES]; - CString m_sScoreCommand[NUM_TAP_NOTE_SCORES]; + ActorCommands m_acScoreCommand[NUM_TAP_NOTE_SCORES]; }; diff --git a/stepmania/src/GrooveRadar.cpp b/stepmania/src/GrooveRadar.cpp index c9d8223ac2..65960fa524 100644 --- a/stepmania/src/GrooveRadar.cpp +++ b/stepmania/src/GrooveRadar.cpp @@ -7,13 +7,14 @@ #include "Steps.h" #include "RageDisplay.h" #include "RageMath.h" +#include "ThemeMetric.h" -#define LABEL_OFFSET_X( i ) THEME->GetMetricF("GrooveRadar",ssprintf("Label%dOffsetX",i+1)) -#define LABEL_OFFSET_Y( i ) THEME->GetMetricF("GrooveRadar",ssprintf("Label%dOffsetY",i+1)) -#define LABEL_ON_COMMAND THEME->GetMetric ("GrooveRadar","LabelOnCommand") -#define LABEL_ON_DELAY THEME->GetMetricF("GrooveRadar","LabelOnDelay") -#define LABEL_ON_COMMAND_POST_DELAY THEME->GetMetric ("GrooveRadar","LabelOnCommandPostDelay") -#define DISABLE_RADAR THEME->GetMetricI("GrooveRadar","DisableRadar") +#define LABEL_OFFSET_X( i ) THEME->GetMetricF("GrooveRadar",ssprintf("Label%dOffsetX",i+1)) +#define LABEL_OFFSET_Y( i ) THEME->GetMetricF("GrooveRadar",ssprintf("Label%dOffsetY",i+1)) +static const ThemeMetric LABEL_ON_COMMAND ("GrooveRadar","LabelOnCommand"); +static const ThemeMetric LABEL_ON_DELAY ("GrooveRadar","LabelOnDelay"); +static const ThemeMetric LABEL_ON_COMMAND_POST_DELAY ("GrooveRadar","LabelOnCommandPostDelay"); +static const ThemeMetric DISABLE_RADAR ("GrooveRadar","DisableRadar"); float RADAR_VALUE_ROTATION( int iValueIndex ) { return PI/2 + PI*2 / 5.0f * iValueIndex; } @@ -81,7 +82,7 @@ GrooveRadar::GrooveRadarValueMap::GrooveRadarValueMap() void GrooveRadar::GrooveRadarValueMap::SetFromSteps( PlayerNumber pn, Steps* pSteps ) // NULL means no song { - if(DISABLE_RADAR == 1) // if the theme says not to disable it + if( (bool)DISABLE_RADAR ) // if the theme says not to disable it return; if( pSteps != NULL ) { diff --git a/stepmania/src/GroupList.cpp b/stepmania/src/GroupList.cpp index a4a88e18a0..79868ba08d 100644 --- a/stepmania/src/GroupList.cpp +++ b/stepmania/src/GroupList.cpp @@ -3,21 +3,22 @@ #include "ThemeManager.h" #include "SongManager.h" #include "RageLog.h" +#include "ThemeMetric.h" /* If this actor is used anywhere other than SelectGroup, we * can add a setting that changes which metric group we pull * settings out of, so it can be configured separately. */ -#define START_X THEME->GetMetricF("GroupList","StartX") -#define START_Y THEME->GetMetricF("GroupList","StartY") -#define SPACING_X THEME->GetMetricF("GroupList","SpacingX") -#define SPACING_Y THEME->GetMetricF("GroupList","SpacingY") -#define SCROLL_TWEEN_COMMAND THEME->GetMetric ("GroupList","ScrollTweenCommand") -#define GAIN_FOCUS_ITEM_COMMAND THEME->GetMetric ("GroupList","GainFocusItemCommand") -#define LOSE_FOCUS_ITEM_COMMAND THEME->GetMetric ("GroupList","LoseFocusItemCommand") -#define GAIN_FOCUS_GROUP_COMMAND THEME->GetMetric ("GroupList","GainFocusGroupCommand") -#define LOSE_FOCUS_GROUP_COMMAND THEME->GetMetric ("GroupList","LoseFocusGroupCommand") -#define HIDE_ITEM_COMMAND THEME->GetMetric ("GroupList","HideItemCommand") -#define SHOW_ITEM_COMMAND THEME->GetMetric ("GroupList","ShowItemCommand") +static const ThemeMetric START_X ("GroupList","StartX"); +static const ThemeMetric START_Y ("GroupList","StartY"); +static const ThemeMetric SPACING_X ("GroupList","SpacingX"); +static const ThemeMetric SPACING_Y ("GroupList","SpacingY"); +static const ThemeMetric SCROLL_TWEEN_COMMAND ("GroupList","ScrollTweenCommand"); +static const ThemeMetric GAIN_FOCUS_ITEM_COMMAND ("GroupList","GainFocusItemCommand"); +static const ThemeMetric LOSE_FOCUS_ITEM_COMMAND ("GroupList","LoseFocusItemCommand"); +static const ThemeMetric GAIN_FOCUS_GROUP_COMMAND ("GroupList","GainFocusGroupCommand"); +static const ThemeMetric LOSE_FOCUS_GROUP_COMMAND ("GroupList","LoseFocusGroupCommand"); +static const ThemeMetric HIDE_ITEM_COMMAND ("GroupList","HideItemCommand"); +static const ThemeMetric SHOW_ITEM_COMMAND ("GroupList","ShowItemCommand"); const int MAX_GROUPS_ONSCREEN = 7; diff --git a/stepmania/src/HoldGhostArrow.cpp b/stepmania/src/HoldGhostArrow.cpp index 92b9c79a30..5bbbdb34a3 100644 --- a/stepmania/src/HoldGhostArrow.cpp +++ b/stepmania/src/HoldGhostArrow.cpp @@ -10,7 +10,7 @@ HoldGhostArrow::HoldGhostArrow() void HoldGhostArrow::Load( CString sNoteSkin, CString sButton, CString sElement ) { Sprite::Load( NOTESKIN->GetPathToFromNoteSkinAndButton(sNoteSkin, sButton, sElement) ); // not optional - this->Command( NOTESKIN->GetMetric(sNoteSkin,"HoldGhostArrow","OnCommand") ); + this->Command( NOTESKIN->GetMetricA(sNoteSkin,"HoldGhostArrow","OnCommand") ); } void HoldGhostArrow::Update( float fDeltaTime ) diff --git a/stepmania/src/HoldJudgment.cpp b/stepmania/src/HoldJudgment.cpp index 659e2d1931..c50253b856 100644 --- a/stepmania/src/HoldJudgment.cpp +++ b/stepmania/src/HoldJudgment.cpp @@ -6,12 +6,12 @@ #include "ThemeManager.h" #include "ThemeMetric.h" -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"); +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() diff --git a/stepmania/src/Judgment.cpp b/stepmania/src/Judgment.cpp index ca5fb55af4..a5a4d61479 100644 --- a/stepmania/src/Judgment.cpp +++ b/stepmania/src/Judgment.cpp @@ -7,26 +7,26 @@ #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 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 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 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 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"); +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() diff --git a/stepmania/src/LyricDisplay.cpp b/stepmania/src/LyricDisplay.cpp index 325ad04ed5..246fde586e 100644 --- a/stepmania/src/LyricDisplay.cpp +++ b/stepmania/src/LyricDisplay.cpp @@ -3,13 +3,13 @@ #include "ScreenDimensions.h" #include "GameState.h" -#include "ThemeManager.h" +#include "ThemeMetric.h" -#define IN_COMMAND THEME->GetMetric("LyricDisplay","InCommand") -#define OUT_COMMAND THEME->GetMetric("LyricDisplay","OutCommand") -#define WIPE_DIM_FACTOR THEME->GetMetricC("LyricDisplay","WipeDimFactor") +static ThemeMetric IN_COMMAND ("LyricDisplay","InCommand"); +static ThemeMetric OUT_COMMAND ("LyricDisplay","OutCommand"); +static ThemeMetric WIPE_DIM_FACTOR ("LyricDisplay","WipeDimFactor"); -float g_TweenInTime, g_TweenOutTime; +static float g_TweenInTime, g_TweenOutTime; LyricDisplay::LyricDisplay() { @@ -30,8 +30,8 @@ void LyricDisplay::Init() m_iCurLyricNumber = 0; /* Update global cache: */ - g_TweenInTime = Actor::GetCommandLengthSeconds(IN_COMMAND); - g_TweenOutTime = Actor::GetCommandLengthSeconds(OUT_COMMAND); + g_TweenInTime = Actor::GetCommandsLengthSeconds(IN_COMMAND); + g_TweenOutTime = Actor::GetCommandsLengthSeconds(OUT_COMMAND); m_fLastSecond = -500; } diff --git a/stepmania/src/MenuTimer.cpp b/stepmania/src/MenuTimer.cpp index b3237cfc05..b61cb98ce1 100644 --- a/stepmania/src/MenuTimer.cpp +++ b/stepmania/src/MenuTimer.cpp @@ -8,11 +8,12 @@ #include "ThemeManager.h" #include "Font.h" #include "GameSoundManager.h" +#include "ThemeMetric.h" -#define WARNING_START THEME->GetMetricI("MenuTimer","WarningStart") -#define WARNING_BEEP_START THEME->GetMetricI("MenuTimer","WarningBeepStart") -#define WARNING_COMMAND(i) THEME->GetMetric ("MenuTimer", ssprintf("WarningCommand%i",i)) -#define ON_COMMAND THEME->GetMetric ("MenuTimer","OnCommand") +static const ThemeMetric WARNING_START ("MenuTimer","WarningStart"); +static const ThemeMetric WARNING_BEEP_START ("MenuTimer","WarningBeepStart"); +#define WARNING_COMMAND(i) THEME->GetMetricA ("MenuTimer", ssprintf("WarningCommand%i",i)) +static const ThemeMetric ON_COMMAND ("MenuTimer","OnCommand"); static const int TIMER_SECONDS = 99; static const int MAX_STALL_SECONDS = 30; diff --git a/stepmania/src/MusicList.cpp b/stepmania/src/MusicList.cpp index 7eed88c33f..57938ca7e5 100644 --- a/stepmania/src/MusicList.cpp +++ b/stepmania/src/MusicList.cpp @@ -1,17 +1,18 @@ #include "global.h" #include "MusicList.h" #include "ThemeManager.h" +#include "ThemeMetric.h" /* If this actor is used anywhere other than SelectGroup, we * can add a setting that changes which metric group we pull * settings out of, so it can be configured separately. */ -#define NUM_COLUMNS THEME->GetMetricI("MusicList","NumColumns") -#define NUM_ROWS THEME->GetMetricI("MusicList","NumRows") -#define START_X THEME->GetMetricF("MusicList","StartX") -#define START_Y THEME->GetMetricF("MusicList","StartY") -#define SPACING_X THEME->GetMetricF("MusicList","SpacingX") -#define CROP_WIDTH THEME->GetMetricF("MusicList","CropWidth") -#define INIT_COMMAND THEME->GetMetric ("MusicList","InitCommand") +static const ThemeMetric NUM_COLUMNS ("MusicList","NumColumns"); +static const ThemeMetric NUM_ROWS ("MusicList","NumRows"); +static const ThemeMetric START_X ("MusicList","StartX"); +static const ThemeMetric START_Y ("MusicList","StartY"); +static const ThemeMetric SPACING_X ("MusicList","SpacingX"); +static const ThemeMetric CROP_WIDTH ("MusicList","CropWidth"); +static const ThemeMetric INIT_COMMAND ("MusicList","InitCommand"); MusicList::MusicList() { diff --git a/stepmania/src/MusicWheel.cpp b/stepmania/src/MusicWheel.cpp index 2f13e2494f..75f8cace0c 100644 --- a/stepmania/src/MusicWheel.cpp +++ b/stepmania/src/MusicWheel.cpp @@ -1364,13 +1364,13 @@ void MusicWheel::TweenOnScreen(bool changing_sort) } m_ScrollBar.SetX( SCROLL_BAR_X ); - m_ScrollBar.Command( "addx,+30" ); + m_ScrollBar.AddX( 30 ); if(changing_sort) m_ScrollBar.BeginTweening( 0.2f ); // sleep else m_ScrollBar.BeginTweening( 0.7f ); // sleep m_ScrollBar.BeginTweening( 0.2f , Actor::TWEEN_ACCELERATE ); - m_ScrollBar.Command( "addx,-30" ); + m_ScrollBar.AddX( -30 ); for( int i=0; iWarn( "The color value '%s' for theme metric '%s : %s' is invalid.", szValue, sButtonName.c_str(), sValueName.c_str() ); - ASSERT(0); - } - - return RageColor(r,g,b,a); + RageColor c; + if( !c.FromString( GetMetric(sNoteSkinName,sButtonName,sValueName) ) ) + LOG->Warn( "The color value for NoteSkin metric '%s : %s : %s' is invalid.", sNoteSkinName.c_str(), sButtonName.c_str(), sValueName.c_str() ); + return c; } +ActorCommands NoteSkinManager::GetMetricA( const CString &sNoteSkinName, const CString &sButtonName, const CString &sValueName ) +{ + return ParseActorCommands( GetMetric(sNoteSkinName,sButtonName,sValueName) ); +} CString NoteSkinManager::GetPathToFromNoteSkinAndButton( const CString &NoteSkin, const CString &sButtonName, const CString &sElement, bool bOptional ) { diff --git a/stepmania/src/PaneDisplay.cpp b/stepmania/src/PaneDisplay.cpp index f144845d06..2fe6819cb5 100644 --- a/stepmania/src/PaneDisplay.cpp +++ b/stepmania/src/PaneDisplay.cpp @@ -322,7 +322,7 @@ done: continue; spec.erase( spec.begin(), spec.begin()+1 ); - m_textContents[c].Command( join(";", spec) ); + m_textContents[c].Command( ParseActorCommands(join(";", spec)) ); break; } } diff --git a/stepmania/src/ProTimingDisplay.cpp b/stepmania/src/ProTimingDisplay.cpp index 15c7d47aac..aca6276590 100644 --- a/stepmania/src/ProTimingDisplay.cpp +++ b/stepmania/src/ProTimingDisplay.cpp @@ -4,14 +4,25 @@ #include "RageUtil.h" #include "ThemeMetric.h" -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"); +static const ThemeMetric MARVELOUS_COMMAND ("ProTimingDisplay","MarvelousCommand"); +static const ThemeMetric PERFECT_COMMAND ("ProTimingDisplay","PerfectCommand"); +static const ThemeMetric GREAT_COMMAND ("ProTimingDisplay","GreatCommand"); +static const ThemeMetric GOOD_COMMAND ("ProTimingDisplay","GoodCommand"); +static const ThemeMetric BOO_COMMAND ("ProTimingDisplay","BooCommand"); +static const ThemeMetric MISS_COMMAND ("ProTimingDisplay","MissCommand"); +static const ThemeMetric HIT_MINE_COMMAND ("ProTimingDisplay","HitMineCommand"); +static const ThemeMetric *g_Commands[NUM_TAP_NOTE_SCORES] = +{ + NULL, /* no TNS_NONE */ + &HIT_MINE_COMMAND, + &MISS_COMMAND, + &BOO_COMMAND, + &GOOD_COMMAND, + &GREAT_COMMAND, + &PERFECT_COMMAND, + &MARVELOUS_COMMAND +}; ProTimingDisplay::ProTimingDisplay() { @@ -36,21 +47,10 @@ void ProTimingDisplay::SetJudgment( int ms, TapNoteScore score ) m_Judgment.SetText( ssprintf("%i", ms) ); - const ThemeMetric *Commands[NUM_TAP_NOTE_SCORES] = - { - NULL, /* no TNS_NONE */ - &HIT_MINE_COMMAND, - &MISS_COMMAND, - &BOO_COMMAND, - &GOOD_COMMAND, - &GREAT_COMMAND, - &PERFECT_COMMAND, - &MARVELOUS_COMMAND - }; ASSERT( score != TNS_NONE ); ASSERT( score < NUM_TAP_NOTE_SCORES ); - m_Judgment.Command( *Commands[score] ); + m_Judgment.Command( *g_Commands[score] ); } /* diff --git a/stepmania/src/ReceptorArrow.cpp b/stepmania/src/ReceptorArrow.cpp index c9cfca7809..4dd7fdeb68 100644 --- a/stepmania/src/ReceptorArrow.cpp +++ b/stepmania/src/ReceptorArrow.cpp @@ -33,14 +33,14 @@ bool ReceptorArrow::Load( CString NoteSkin, PlayerNumber pn, int iColNo ) { CString sJudge = TapNoteScoreToString( i ); CString sCommand = Capitalize(sJudge)+"Command"; - m_sScoreCommand[i] = NOTESKIN->GetMetric( NoteSkin, m_sName, sCommand ); + m_sScoreCommand[i] = NOTESKIN->GetMetricA( NoteSkin, m_sName, sCommand ); } m_pPressBlock.Load( NOTESKIN->GetPathToFromNoteSkinAndButton(NoteSkin,sButton,"KeypressBlock") ); - m_pReceptorWaiting->Command( "effectclock,beat" ); - m_pReceptorGo->Command( "effectclock,beat" ); - m_pPressBlock->Command( "effectclock,beat" ); + m_pReceptorWaiting->Command( ParseActorCommands("effectclock,beat") ); + m_pReceptorGo->Command( ParseActorCommands("effectclock,beat") ); + m_pPressBlock->Command( ParseActorCommands("effectclock,beat") ); // draw pressblock before receptors this->AddChild( m_pPressBlock ); diff --git a/stepmania/src/ReceptorArrow.h b/stepmania/src/ReceptorArrow.h index 4c08056078..12f7a9c7b6 100644 --- a/stepmania/src/ReceptorArrow.h +++ b/stepmania/src/ReceptorArrow.h @@ -25,7 +25,7 @@ private: AutoActor m_pReceptorWaiting; AutoActor m_pReceptorGo; - CString m_sScoreCommand[NUM_TAP_NOTE_SCORES]; + ActorCommands m_sScoreCommand[NUM_TAP_NOTE_SCORES]; AutoActor m_pPressBlock; bool m_bIsPressed; diff --git a/stepmania/src/ScoreDisplayBattle.cpp b/stepmania/src/ScoreDisplayBattle.cpp index cf03552c09..afdc6a172b 100644 --- a/stepmania/src/ScoreDisplayBattle.cpp +++ b/stepmania/src/ScoreDisplayBattle.cpp @@ -50,19 +50,22 @@ void ScoreDisplayBattle::Update( float fDelta ) m_iLastSeenInventory[s] = sNewModifier; if( sNewModifier == "" ) - m_ItemIcon[s].Command( "linear,0.25;zoom,0" ); + { + m_ItemIcon[s].Command( ParseActorCommands("linear,0.25;zoom,0") ); + } else { // TODO: Cache all of the icon graphics so we don't load them dynamically from disk. m_ItemIcon[s].Load( THEME->GetPathToG("ScoreDisplayBattle icon "+sNewModifier) ); m_ItemIcon[s].StopTweening(); - m_ItemIcon[s].Command( "diffuse,1,1,1,1;zoom,1;" + m_ItemIcon[s].Command( ParseActorCommands( + "diffuse,1,1,1,1;zoom,1;" "sleep,0.1;linear,0;diffusealpha,0;" "sleep,0.1;linear,0;diffusealpha,1;" "sleep,0.1;linear,0;diffusealpha,0;" "sleep,0.1;linear,0;diffusealpha,1;" "sleep,0.1;linear,0;diffusealpha,0;" - "sleep,0.1;linear,0;diffusealpha,1;" ); + "sleep,0.1;linear,0;diffusealpha,1;" ) ); } } } diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index 3b572a313e..765586af2c 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -46,7 +46,7 @@ const char* STATS_STRING[NUM_STATS_LINES] = #define SPIN_GRADES THEME->GetMetricB(m_sName,"SpinGrades") #define CHEER_DELAY_SECONDS THEME->GetMetricF(m_sName,"CheerDelaySeconds") -#define BAR_ACTUAL_MAX_COMMAND THEME->GetMetric (m_sName,"BarActualMaxCommand") +#define BAR_ACTUAL_MAX_COMMAND THEME->GetMetricA(m_sName,"BarActualMaxCommand") // metrics that are specific to classes derived from ScreenEvaluation #define FAILED_SCREEN THEME->GetMetric (m_sName, "FailedScreen") @@ -514,7 +514,7 @@ void ScreenEvaluation::Init() m_Percent[p].Load( p, &g_CurStageStats, true ); m_Percent[p].SetXY( THEME->GetMetricF(m_sName, ssprintf("PercentP%dX",p+1)), THEME->GetMetricF(m_sName,ssprintf("PercentP%dY",p+1)) ); - m_Percent[p].Command( THEME->GetMetric(m_sName,ssprintf("PercentP%dOnCommand",p+1)) ); + m_Percent[p].Command( THEME->GetMetricA(m_sName,ssprintf("PercentP%dOnCommand",p+1)) ); this->AddChild( &m_Percent[p] ); } } @@ -1175,7 +1175,7 @@ void ScreenEvaluation::TweenOffScreen() FOREACH_EnabledPlayer( p ) { OFF_COMMAND( m_sprPercentFrame[p] ); - m_Percent[p].Command( THEME->GetMetric(m_sName,ssprintf("PercentP%dOffCommand",p+1)) ); + m_Percent[p].Command( THEME->GetMetricA(m_sName,ssprintf("PercentP%dOffCommand",p+1)) ); m_Percent[p].TweenOffScreen(); } } diff --git a/stepmania/src/ScreenEz2SelectMusic.cpp b/stepmania/src/ScreenEz2SelectMusic.cpp index 246973e6be..0c9ab37c5a 100644 --- a/stepmania/src/ScreenEz2SelectMusic.cpp +++ b/stepmania/src/ScreenEz2SelectMusic.cpp @@ -411,25 +411,28 @@ void ScreenEz2SelectMusic::MenuBack( PlayerNumber pn ) void ScreenEz2SelectMusic::TweenOffScreen() { - m_MusicBannerWheel.Command( "linear,0.5;zoomy,0" ); - m_PumpDifficultyCircle.Command( "Linear,1;DiffuseAlpha,0" ); - m_Guide.Command( "Linear,1;DiffuseAlpha,0" ); - m_PumpDifficultyRating.Command( "Linear,1;DiffuseAlpha,0" ); - m_Guide.Command( "Linear,1;DiffuseAlpha,0" ); - m_ChoiceListFrame.Command( "Linear,1;DiffuseAlpha,0" ); - m_ChoiceListHighlight.Command( "Linear,1;DiffuseAlpha,0" ); - m_CurrentGroup.Command( "Linear,1;DiffuseAlpha,0" ); - m_CurrentTitle.Command( "Linear,1;DiffuseAlpha,0" ); - m_CurrentArtist.Command( "Linear,1;DiffuseAlpha,0" ); + static const ActorCommands cmds = ParseActorCommands("linear,0.5;zoomy,0"); + m_MusicBannerWheel.Command( cmds ); + + static const ActorCommands cmds2 = ParseActorCommands("Linear,1;DiffuseAlpha,0"); + m_PumpDifficultyCircle.Command( cmds2 ); + m_Guide.Command( cmds2 ); + m_PumpDifficultyRating.Command( cmds2 ); + m_Guide.Command( cmds2 ); + m_ChoiceListFrame.Command( cmds2 ); + m_ChoiceListHighlight.Command( cmds2 ); + m_CurrentGroup.Command( cmds2 ); + m_CurrentTitle.Command( cmds2 ); + m_CurrentArtist.Command( cmds2 ); //This should be fixed and changed to OFF_COMMAND for(int i=0; iGetMetricF("ScreenHowToPlay","SecondsToShow") -#define STEPFILE THEME->GetMetric ("ScreenHowToPlay","Stepfile") -#define NUM_PERFECTS THEME->GetMetricI("ScreenHowToPlay","NumPerfects") -#define NUM_MISSES THEME->GetMetricI("ScreenHowToPlay","NumMisses") +static const ThemeMetric SECONDS_TO_SHOW ("ScreenHowToPlay","SecondsToShow"); +static const ThemeMetric STEPFILE ("ScreenHowToPlay","Stepfile"); +static const ThemeMetric NUM_PERFECTS ("ScreenHowToPlay","NumPerfects"); +static const ThemeMetric NUM_MISSES ("ScreenHowToPlay","NumMisses"); // -#define USELIFEBAR THEME->GetMetricB("ScreenHowToPlay","UseLifeMeterBar") -#define LIFEBARONCOMMAND THEME->GetMetric ("ScreenHowToPlay","LifeMeterBarOnCommand") +static const ThemeMetric USELIFEBAR ("ScreenHowToPlay","UseLifeMeterBar"); +static const ThemeMetric LIFEBARONCOMMAND ("ScreenHowToPlay","LifeMeterBarOnCommand"); // -#define USECHARACTER THEME->GetMetricB("ScreenHowToPlay","UseCharacter") -#define CHARACTERONCOMMAND THEME->GetMetric ("ScreenHowToPlay","CharacterOnCommand") +static const ThemeMetric USECHARACTER ("ScreenHowToPlay","UseCharacter"); +static const ThemeMetric CHARACTERONCOMMAND ("ScreenHowToPlay","CharacterOnCommand"); // -#define USEPAD THEME->GetMetricB("ScreenHowToPlay","UsePad") -#define PADONCOMMAND THEME->GetMetric ("ScreenHowToPlay","PadOnCommand") +static const ThemeMetric USEPAD ("ScreenHowToPlay","UsePad"); +static const ThemeMetric PADONCOMMAND ("ScreenHowToPlay","PadOnCommand"); // -#define USEPLAYER THEME->GetMetricB("ScreenHowToPlay","UseNotefield") -#define PLAYERX THEME->GetMetricF("ScreenHowToPlay","PlayerX") +static const ThemeMetric USEPLAYER ("ScreenHowToPlay","UseNotefield"); +static const ThemeMetric PLAYERX ("ScreenHowToPlay","PlayerX"); enum Animation { @@ -42,7 +43,7 @@ enum Animation NUM_ANIMATIONS }; -static const char *anims[NUM_ANIMATIONS] = +static const CString anims[NUM_ANIMATIONS] = { "DancePad-DDR.txt", "DancePads-DDR.txt", @@ -86,7 +87,7 @@ ScreenHowToPlay::ScreenHowToPlay( CString sName ) : ScreenAttract( sName ) m_Overlay.LoadFromAniDir( THEME->GetPathToB("ScreenHowToPlay overlay") ); this->AddChild( &m_Overlay ); - if( USEPAD && DoesFileExist( GetAnimPath(ANIM_DANCE_PAD) ) ) + if( (bool)USEPAD && DoesFileExist( GetAnimPath(ANIM_DANCE_PAD) ) ) { m_pmDancePad = new Model; m_pmDancePad->LoadMilkshapeAscii( GetAnimPath(ANIM_DANCE_PAD) ); @@ -97,7 +98,7 @@ ScreenHowToPlay::ScreenHowToPlay( CString sName ) : ScreenAttract( sName ) // Display random character vector apCharacters; GAMESTATE->GetCharacters( apCharacters ); - if( USECHARACTER && apCharacters.size() && HaveAllCharAnimations() ) + if( (bool)USECHARACTER && apCharacters.size() && HaveAllCharAnimations() ) { Character* rndchar = GAMESTATE->GetRandomCharacter(); diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index 3a2ac4be7b..31ab5e8c5b 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -155,7 +155,8 @@ void ScreenSystemLayer::ReloadCreditsText() void ScreenSystemLayer::SystemMessage( CString sMessage ) { m_textMessage.SetText( sMessage ); - m_textMessage.Command( "finishtweening;diffusealpha,1;addx,-640;linear,0.5;addx,+640;sleep,5;linear,0.5;diffusealpha,0" ); + static const ActorCommands cmds = ParseActorCommands("finishtweening;diffusealpha,1;addx,-640;linear,0.5;addx,+640;sleep,5;linear,0.5;diffusealpha,0"); + m_textMessage.Command( cmds ); } void ScreenSystemLayer::SystemMessageNoAnimate( CString sMessage ) diff --git a/stepmania/src/ScreenMapControllers.cpp b/stepmania/src/ScreenMapControllers.cpp index eb2c68465a..cd37e26c11 100644 --- a/stepmania/src/ScreenMapControllers.cpp +++ b/stepmania/src/ScreenMapControllers.cpp @@ -13,12 +13,12 @@ #include "Game.h" #include "HelpDisplay.h" #include "ScreenDimensions.h" +#include "ThemeMetric.h" - -#define EVEN_LINE_IN THEME->GetMetric("ScreenMapControllers","EvenLineIn") -#define EVEN_LINE_OUT THEME->GetMetric("ScreenMapControllers","EvenLineOut") -#define ODD_LINE_IN THEME->GetMetric("ScreenMapControllers","OddLineIn") -#define ODD_LINE_OUT THEME->GetMetric("ScreenMapControllers","OddLineOut") +static const ThemeMetric EVEN_LINE_IN ("ScreenMapControllers","EvenLineIn"); +static const ThemeMetric EVEN_LINE_OUT ("ScreenMapControllers","EvenLineOut"); +static const ThemeMetric ODD_LINE_IN ("ScreenMapControllers","OddLineIn"); +static const ThemeMetric ODD_LINE_OUT ("ScreenMapControllers","OddLineOut"); const int FramesToWaitForInput = 2; @@ -78,7 +78,7 @@ ScreenMapControllers::ScreenMapControllers( CString sClassName ) : ScreenWithMen m_Line[b].SetY( LINE_START_Y + b*LINE_GAP_Y ); this->AddChild( &m_Line[b] ); - m_Line[b].Command( (b%2)? ODD_LINE_IN:EVEN_LINE_IN ); + m_Line[b].Command( (b%2)? ODD_LINE_IN : EVEN_LINE_IN ); } m_textError.LoadFromFont( THEME->GetPathToF("Common normal") ); diff --git a/stepmania/src/ScreenNameEntryTraditional.cpp b/stepmania/src/ScreenNameEntryTraditional.cpp index 7d939f0227..49c45481e1 100644 --- a/stepmania/src/ScreenNameEntryTraditional.cpp +++ b/stepmania/src/ScreenNameEntryTraditional.cpp @@ -83,10 +83,10 @@ void HighScoreWheelItem::LoadBlank( int iRankIndex ) void HighScoreWheelItem::ShowFocus() { - CString sCommand = "diffuseshift;EffectColor1,1,1,0,1;EffectColor2,0,1,1,1"; - m_textRank.Command( sCommand ); - m_textName.Command( sCommand ); - m_textScore.Command( sCommand ); + ActorCommands cmds = ParseActorCommands("diffuseshift;EffectColor1,1,1,0,1;EffectColor2,0,1,1,1"); + m_textRank.Command( cmds ); + m_textName.Command( cmds ); + m_textScore.Command( cmds ); } void HighScoreWheel::Load( const HighScoreList& hsl, int iIndexToFocus ) @@ -219,7 +219,7 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S Letter->SetText( ssprintf("%lc", Chars[ch]) ); m_textAlphabet[p].push_back( Letter ); m_Keyboard[p].AddChild( Letter ); - Letter->Command( THEME->GetMetric("ScreenNameEntryTraditional","AlphabetInitCommand") ); + Letter->Command( THEME->GetMetricA("ScreenNameEntryTraditional","AlphabetInitCommand") ); m_AlphabetLetter[p].push_back( Chars[ch] ); } @@ -236,7 +236,7 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S m_Keyboard[p].AddChild( Letter ); m_AlphabetLetter[p].push_back( CHAR_BACK ); - Letter->Command( THEME->GetMetric("ScreenNameEntryTraditional","OKInitCommand") ); + Letter->Command( THEME->GetMetricA("ScreenNameEntryTraditional","OKInitCommand") ); } /* Add "OK". */ @@ -251,7 +251,7 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S m_Keyboard[p].AddChild( Letter ); m_AlphabetLetter[p].push_back( CHAR_OK ); - Letter->Command( THEME->GetMetric("ScreenNameEntryTraditional","OKInitCommand") ); + Letter->Command( THEME->GetMetricA("ScreenNameEntryTraditional","OKInitCommand") ); } m_sprCursor[p].SetName( ssprintf("CursorP%i",p+1) ); @@ -441,7 +441,7 @@ void ScreenNameEntryTraditional::PositionCharsAndCursor( int pn ) const bool hidden = ( Pos < First || Pos > Last ); const int ActualPos = clamp( Pos, First-1, Last+1 ); - bt->Command("stoptweening;decelerate,.12"); + bt->Command( ParseActorCommands("stoptweening;decelerate,.12") ); bt->SetX( ActualPos * ALPHABET_GAP_X ); bt->SetDiffuseAlpha( hidden? 0.0f:1.0f ); } diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index 4d9e594fa3..26e7bc1d31 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -30,10 +30,10 @@ const float ITEM_X[NUM_PLAYERS] = { 260, 420 }; #define ITEMS_SPACING_Y THEME->GetMetricF("ScreenOptions","ItemsSpacingY") #define EXPLANATION_X(p) THEME->GetMetricF("ScreenOptions",ssprintf("ExplanationP%dX",p+1)) #define EXPLANATION_Y(p) THEME->GetMetricF("ScreenOptions",ssprintf("ExplanationP%dY",p+1)) -#define EXPLANATION_ON_COMMAND(p) THEME->GetMetric ("ScreenOptions",ssprintf("ExplanationP%dOnCommand",p+1)) +#define EXPLANATION_ON_COMMAND(p) THEME->GetMetricA("ScreenOptions",ssprintf("ExplanationP%dOnCommand",p+1)) #define EXPLANATION_TOGETHER_X THEME->GetMetricF("ScreenOptions","ExplanationTogetherX") #define EXPLANATION_TOGETHER_Y THEME->GetMetricF("ScreenOptions","ExplanationTogetherY") -#define EXPLANATION_TOGETHER_ON_COMMAND THEME->GetMetric ("ScreenOptions","ExplanationTogetherOnCommand") +#define EXPLANATION_TOGETHER_ON_COMMAND THEME->GetMetricA("ScreenOptions","ExplanationTogetherOnCommand") #define SHOW_SCROLL_BAR THEME->GetMetricB("ScreenOptions","ShowScrollBar") /* Extra parens needed to work around stupid VC6 compiler crash: */ #define SCROLL_BAR_HEIGHT (THEME->GetMetricF("ScreenOptions","ScrollBarHeight")) @@ -44,8 +44,8 @@ const float ITEM_X[NUM_PLAYERS] = { 260, 420 }; #define COLOR_NOT_SELECTED THEME->GetMetricC("ScreenOptions","ColorNotSelected") #define NUM_SHOWN_ITEMS THEME->GetMetricI("ScreenOptions","NumShownItems") #define SHOW_BPM_IN_SPEED_TITLE THEME->GetMetricB("ScreenOptions","ShowBpmInSpeedTitle") -#define FRAME_ON_COMMAND THEME->GetMetric ("ScreenOptions","FrameOnCommand") -#define FRAME_OFF_COMMAND THEME->GetMetric ("ScreenOptions","FrameOffCommand") +#define FRAME_ON_COMMAND THEME->GetMetricA("ScreenOptions","FrameOnCommand") +#define FRAME_OFF_COMMAND THEME->GetMetricA("ScreenOptions","FrameOffCommand") #define SEPARATE_EXIT_ROW THEME->GetMetricB("ScreenOptions","SeparateExitRow") #define SEPARATE_EXIT_ROW_Y THEME->GetMetricF("ScreenOptions","SeparateExitRowY") #define CAPITALIZE_ALL_OPTION_NAMES THEME->GetMetricB(m_sName,"CapitalizeAllOptionNames") diff --git a/stepmania/src/ScreenOptionsMaster.cpp b/stepmania/src/ScreenOptionsMaster.cpp index 8664258858..89c89b8503 100644 --- a/stepmania/src/ScreenOptionsMaster.cpp +++ b/stepmania/src/ScreenOptionsMaster.cpp @@ -246,8 +246,8 @@ ScreenOptionsMaster::ScreenOptionsMaster( CString sClassName ): CString sRowCommands = LINE(sLineName); - vector vCommands; - ParseCommands( sRowCommands, vCommands ); + ActorCommands vCommands; + ParseActorCommands( sRowCommands, vCommands ); if( vCommands.size() < 1 ) RageException::Throw( "Parse error in %s::Line%i", m_sName.c_str(), i+1 ); diff --git a/stepmania/src/ScreenSelectCharacter.cpp b/stepmania/src/ScreenSelectCharacter.cpp index d4295f2fb1..733bfcc20b 100644 --- a/stepmania/src/ScreenSelectCharacter.cpp +++ b/stepmania/src/ScreenSelectCharacter.cpp @@ -12,24 +12,24 @@ #include "RageTextureManager.h" -#define TITLE_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("TitleP%dOnCommand",p+1)) -#define TITLE_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("TitleP%dOffCommand",p+1)) -#define CARD_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("CardP%dOnCommand",p+1)) -#define CARD_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("CardP%dOffCommand",p+1)) -#define CARD_ARROWS_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("CardArrowsP%dOnCommand",p+1)) -#define CARD_ARROWS_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("CardArrowsP%dOffCommand",p+1)) -#define EXPLANATION_ON_COMMAND THEME->GetMetric ("ScreenSelectCharacter","ExplanationOnCommand") -#define EXPLANATION_OFF_COMMAND THEME->GetMetric ("ScreenSelectCharacter","ExplanationOffCommand") -#define ATTACK_FRAME_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("AttackFrameP%dOnCommand",p+1)) -#define ATTACK_FRAME_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("AttackFrameP%dOffCommand",p+1)) +#define TITLE_ON_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("TitleP%dOnCommand",p+1)) +#define TITLE_OFF_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("TitleP%dOffCommand",p+1)) +#define CARD_ON_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("CardP%dOnCommand",p+1)) +#define CARD_OFF_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("CardP%dOffCommand",p+1)) +#define CARD_ARROWS_ON_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("CardArrowsP%dOnCommand",p+1)) +#define CARD_ARROWS_OFF_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("CardArrowsP%dOffCommand",p+1)) +#define EXPLANATION_ON_COMMAND THEME->GetMetricA("ScreenSelectCharacter","ExplanationOnCommand") +#define EXPLANATION_OFF_COMMAND THEME->GetMetricA("ScreenSelectCharacter","ExplanationOffCommand") +#define ATTACK_FRAME_ON_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("AttackFrameP%dOnCommand",p+1)) +#define ATTACK_FRAME_OFF_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("AttackFrameP%dOffCommand",p+1)) #define ATTACK_ICON_WIDTH THEME->GetMetricF("ScreenSelectCharacter","AttackIconWidth") #define ATTACK_ICON_HEIGHT THEME->GetMetricF("ScreenSelectCharacter","AttackIconHeight") #define ATTACK_ICONS_START_X( p ) THEME->GetMetricF("ScreenSelectCharacter",ssprintf("AttackIconsP%dStartX",p+1)) #define ATTACK_ICONS_START_Y( p ) THEME->GetMetricF("ScreenSelectCharacter",ssprintf("AttackIconsP%dStartY",p+1)) #define ATTACK_ICONS_SPACING_X THEME->GetMetricF("ScreenSelectCharacter","AttackIconsSpacingX") #define ATTACK_ICONS_SPACING_Y THEME->GetMetricF("ScreenSelectCharacter","AttackIconsSpacingY") -#define ATTACK_ICONS_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("AttackIconsP%dOnCommand",p+1)) -#define ATTACK_ICONS_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("AttackIconsP%dOffCommand",p+1)) +#define ATTACK_ICONS_ON_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("AttackIconsP%dOnCommand",p+1)) +#define ATTACK_ICONS_OFF_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("AttackIconsP%dOffCommand",p+1)) #define HELP_TEXT THEME->GetMetric ("ScreenSelectCharacter","HelpText") #define TIMER_SECONDS THEME->GetMetricI("ScreenSelectCharacter","TimerSeconds") #define SLEEP_AFTER_TWEEN_OFF_SECONDS THEME->GetMetricF("ScreenSelectCharacter","SleepAfterTweenOffSeconds") @@ -37,8 +37,8 @@ #define NEXT_SCREEN THEME->GetMetric ("ScreenSelectCharacter","NextScreen") #define ICON_WIDTH THEME->GetMetricF("ScreenSelectCharacter","IconWidth") #define ICON_HEIGHT THEME->GetMetricF("ScreenSelectCharacter","IconHeight") -#define ICONS_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("IconsP%dOnCommand",p+1)) -#define ICONS_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectCharacter",ssprintf("IconsP%dOffCommand",p+1)) +#define ICONS_ON_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("IconsP%dOnCommand",p+1)) +#define ICONS_OFF_COMMAND( p ) THEME->GetMetricA("ScreenSelectCharacter",ssprintf("IconsP%dOffCommand",p+1)) #define LEVEL_CURSOR_X( p, l ) ( ICONS_START_X(p)+ICONS_SPACING_X*((NUM_ATTACKS_PER_LEVEL-1)/2.f) ) #define LEVEL_CURSOR_Y( p, l ) ( ICONS_START_Y(p)+ICONS_SPACING_Y*l ) diff --git a/stepmania/src/ScreenSelectDifficulty.cpp b/stepmania/src/ScreenSelectDifficulty.cpp index e13a71414e..bc42f865c4 100644 --- a/stepmania/src/ScreenSelectDifficulty.cpp +++ b/stepmania/src/ScreenSelectDifficulty.cpp @@ -15,16 +15,16 @@ #define LOCK_INPUT_SECONDS THEME->GetMetricF(m_sName,"LockInputSeconds") #define SLEEP_AFTER_CHOICE_SECONDS THEME->GetMetricF(m_sName,"SleepAfterChoiceSeconds") #define SLEEP_AFTER_TWEEN_OFF_SECONDS THEME->GetMetricF(m_sName,"SleepAfterTweenOffSeconds") -#define CURSOR_CHOOSE_COMMAND THEME->GetMetric (m_sName,"CursorChooseCommand") +#define CURSOR_CHOOSE_COMMAND THEME->GetMetricA(m_sName,"CursorChooseCommand") #define CURSOR_OFFSET_X_FROM_PICTURE( p ) THEME->GetMetricF(m_sName,ssprintf("CursorP%dOffsetXFromPicture",p+1)) #define CURSOR_OFFSET_Y_FROM_PICTURE( p ) THEME->GetMetricF(m_sName,ssprintf("CursorP%dOffsetYFromPicture",p+1)) -#define SHADOW_CHOOSE_COMMAND THEME->GetMetric (m_sName,"ShadowChooseCommand") +#define SHADOW_CHOOSE_COMMAND THEME->GetMetricA(m_sName,"ShadowChooseCommand") #define SHADOW_LENGTH_X THEME->GetMetricF(m_sName,"ShadowLengthX") #define SHADOW_LENGTH_Y THEME->GetMetricF(m_sName,"ShadowLengthY") -#define OK_CHOOSE_COMMAND THEME->GetMetric (m_sName,"OKChooseCommand") +#define OK_CHOOSE_COMMAND THEME->GetMetricA(m_sName,"OKChooseCommand") #define DISABLED_COLOR THEME->GetMetricC(m_sName,"DisabledColor") -#define IGNORED_ELEMENT_COMMAND THEME->GetMetric (m_sName,"IgnoredElementOnCommand") +#define IGNORED_ELEMENT_COMMAND THEME->GetMetricA(m_sName,"IgnoredElementOnCommand") ScreenSelectDifficulty::ScreenSelectDifficulty( CString sClassName ) : ScreenSelect( sClassName ) { diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index a7503f3e63..9a52d90ab7 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -33,7 +33,7 @@ const int NUM_SCORE_DIGITS = 9; #define FOV_CENTER_Y THEME->GetMetricF(m_sName,"FOVCenterY") #define BANNER_WIDTH THEME->GetMetricF(m_sName,"BannerWidth") #define BANNER_HEIGHT THEME->GetMetricF(m_sName,"BannerHeight") -#define SONG_OPTIONS_EXTRA_COMMAND THEME->GetMetric (m_sName,"SongOptionsExtraCommand") +#define SONG_OPTIONS_EXTRA_COMMAND THEME->GetMetricA(m_sName,"SongOptionsExtraCommand") #define SAMPLE_MUSIC_DELAY THEME->GetMetricF(m_sName,"SampleMusicDelay") #define SHOW_RADAR THEME->GetMetricB(m_sName,"ShowRadar") #define SHOW_GRAPH THEME->GetMetricB(m_sName,"ShowGraph") @@ -42,8 +42,8 @@ const int NUM_SCORE_DIGITS = 9; #define PREV_SCREEN THEME->GetMetric (m_sName,"PrevScreen") #define NEXT_SCREEN THEME->GetMetric (m_sName,"NextScreen") #define NEXT_OPTIONS_SCREEN THEME->GetMetric (m_sName,"NextOptionsScreen") -#define SCORE_SORT_CHANGE_COMMAND(i) THEME->GetMetric (m_sName,ssprintf("ScoreP%iSortChangeCommand", i+1)) -#define SCORE_FRAME_SORT_CHANGE_COMMAND(i) THEME->GetMetric (m_sName,ssprintf("ScoreFrameP%iSortChangeCommand", i+1)) +#define SCORE_SORT_CHANGE_COMMAND(i) THEME->GetMetricA(m_sName,ssprintf("ScoreP%iSortChangeCommand", i+1)) +#define SCORE_FRAME_SORT_CHANGE_COMMAND(i) THEME->GetMetricA(m_sName,ssprintf("ScoreFrameP%iSortChangeCommand", i+1)) #define DO_ROULETTE_ON_MENU_TIMER THEME->GetMetricB(m_sName,"DoRouletteOnMenuTimer") #define ALIGN_MUSIC_BEATS THEME->GetMetricB(m_sName,"AlignMusicBeat") #define CODES THEME->GetMetric (m_sName,"Codes") diff --git a/stepmania/src/ScreenSelectStyle.cpp b/stepmania/src/ScreenSelectStyle.cpp index 1e87faef5b..dbbf39c11b 100644 --- a/stepmania/src/ScreenSelectStyle.cpp +++ b/stepmania/src/ScreenSelectStyle.cpp @@ -13,8 +13,8 @@ #include "CommonMetrics.h" -#define ICON_GAIN_FOCUS_COMMAND THEME->GetMetric (m_sName,"IconGainFocusCommand") -#define ICON_LOSE_FOCUS_COMMAND THEME->GetMetric (m_sName,"IconLoseFocusCommand") +#define ICON_GAIN_FOCUS_COMMAND THEME->GetMetricA(m_sName,"IconGainFocusCommand") +#define ICON_LOSE_FOCUS_COMMAND THEME->GetMetricA(m_sName,"IconLoseFocusCommand") #define DISABLED_COLOR THEME->GetMetricC(m_sName,"DisabledColor") diff --git a/stepmania/src/ScreenTitleMenu.cpp b/stepmania/src/ScreenTitleMenu.cpp index 30917da0bc..6fcb71fb4a 100644 --- a/stepmania/src/ScreenTitleMenu.cpp +++ b/stepmania/src/ScreenTitleMenu.cpp @@ -25,13 +25,13 @@ #include "ScreenOptionsMasterPrefs.h" -#define LOGO_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","LogoOnCommand") -#define LOGO_HOME_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","LogoHomeOnCommand") -#define VERSION_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","VersionOnCommand") -#define SONGS_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","SongsOnCommand") -#define MAX_STAGES_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","MaxStagesOnCommand") -#define MAX_STAGES_TEXT THEME->GetMetric("ScreenTitleMenu","MaxStagesText") -#define LIFE_DIFFICULTY_ON_COMMAND THEME->GetMetric("ScreenTitleMenu","LifeDifficultyOnCommand") +#define LOGO_ON_COMMAND THEME->GetMetricA("ScreenTitleMenu","LogoOnCommand") +#define LOGO_HOME_ON_COMMAND THEME->GetMetricA("ScreenTitleMenu","LogoHomeOnCommand") +#define VERSION_ON_COMMAND THEME->GetMetricA("ScreenTitleMenu","VersionOnCommand") +#define SONGS_ON_COMMAND THEME->GetMetricA("ScreenTitleMenu","SongsOnCommand") +#define MAX_STAGES_ON_COMMAND THEME->GetMetricA("ScreenTitleMenu","MaxStagesOnCommand") +#define MAX_STAGES_TEXT THEME->GetMetric ("ScreenTitleMenu","MaxStagesText") +#define LIFE_DIFFICULTY_ON_COMMAND THEME->GetMetricA("ScreenTitleMenu","LifeDifficultyOnCommand") #define HELP_X THEME->GetMetricF("ScreenTitleMenu","HelpX") #define HELP_Y THEME->GetMetricF("ScreenTitleMenu","HelpY") #define CHOICES_X THEME->GetMetricF("ScreenTitleMenu","ChoicesX") @@ -45,8 +45,8 @@ #define MENU_TEXT_ALIGN THEME->GetMetricI("ScreenTitleMenu","MenuTextAlign") #define SECONDS_BETWEEN_COMMENTS THEME->GetMetricF("ScreenTitleMenu","SecondsBetweenComments") #define SECONDS_BEFORE_ATTRACT THEME->GetMetricF("ScreenTitleMenu","SecondsBeforeAttract") -#define HELP_TEXT( coin_mode ) THEME->GetMetric("ScreenTitleMenu","HelpText"+Capitalize(CoinModeToString(coin_mode))) -#define MENU_ITEM_CREATE THEME->GetMetric("ScreenTitleMenu","MenuCommandOnCreate") +#define HELP_TEXT( coin_mode ) THEME->GetMetric ("ScreenTitleMenu","HelpText"+Capitalize(CoinModeToString(coin_mode))) +#define MENU_ITEM_CREATE THEME->GetMetricA("ScreenTitleMenu","MenuCommandOnCreate") #define MENU_ITEM_SELECT_DELAY THEME->GetMetricF("ScreenTitleMenu","MenuCommandSelectDelay") #define NAME( sChoiceName ) THEME->GetMetric (m_sName,ssprintf("Name%s",sChoiceName.c_str())) diff --git a/stepmania/src/ScreenUnlock.cpp b/stepmania/src/ScreenUnlock.cpp index 607731c044..9d5377ded9 100644 --- a/stepmania/src/ScreenUnlock.cpp +++ b/stepmania/src/ScreenUnlock.cpp @@ -10,22 +10,22 @@ #include "song.h" #include "Course.h" -#define NUM_UNLOCKS THEME->GetMetricI("ScreenUnlock", "NumUnlocks") -#define UNLOCK_TEXT_SCROLL_X THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollX"); -#define UNLOCK_TEXT_SCROLL_START_Y THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollStartY") -#define UNLOCK_TEXT_SCROLL_END_Y THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollEndY") -#define UNLOCK_TEXT_SCROLL_ZOOM THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollZoom") -#define UNLOCK_TEXT_SCROLL_ROWS THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollRows") -#define UNLOCK_TEXT_SCROLL_MAX_WIDTH THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollMaxWidth") +#define NUM_UNLOCKS THEME->GetMetricI("ScreenUnlock", "NumUnlocks") +#define UNLOCK_TEXT_SCROLL_X THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollX"); +#define UNLOCK_TEXT_SCROLL_START_Y THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollStartY") +#define UNLOCK_TEXT_SCROLL_END_Y THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollEndY") +#define UNLOCK_TEXT_SCROLL_ZOOM THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollZoom") +#define UNLOCK_TEXT_SCROLL_ROWS THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollRows") +#define UNLOCK_TEXT_SCROLL_MAX_WIDTH THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollMaxWidth") #define UNLOCK_TEXT_SCROLL_ICON_X THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollIconX") #define UNLOCK_TEXT_SCROLL_ICON_SIZE THEME->GetMetricF("ScreenUnlock", "UnlockTextScrollIconSize") -#define DISPLAYED_SONG(i) THEME->GetMetric ("ScreenUnlock", ssprintf("Unlock%dSong", i)) -#define UNLOCK_TEXT_SCROLL THEME->GetMetricI("ScreenUnlock", "UnlockTextScroll") -#define TYPE_TO_DISPLAY THEME->GetMetric("ScreenUnlock", "TypeOfPointsToDisplay") -#define ICON_COMMAND THEME->GetMetric ("ScreenUnlock", "UnlockIconCommand") -#define TIME_TO_DISPLAY THEME->GetMetricF("ScreenUnlock", "TimeToDisplay") -#define POINTS_ZOOM THEME->GetMetricF("ScreenUnlock","PointsZoom") -#define USE_UNLOCKS_DAT THEME->GetMetricI("ScreenUnlock","UseUnlocksDat") +#define DISPLAYED_SONG(i) THEME->GetMetric ("ScreenUnlock", ssprintf("Unlock%dSong", i)) +#define UNLOCK_TEXT_SCROLL THEME->GetMetricI("ScreenUnlock", "UnlockTextScroll") +#define TYPE_TO_DISPLAY THEME->GetMetric ("ScreenUnlock", "TypeOfPointsToDisplay") +#define ICON_COMMAND THEME->GetMetricA("ScreenUnlock", "UnlockIconCommand") +#define TIME_TO_DISPLAY THEME->GetMetricF("ScreenUnlock", "TimeToDisplay") +#define POINTS_ZOOM THEME->GetMetricF("ScreenUnlock","PointsZoom") +#define USE_UNLOCKS_DAT THEME->GetMetricI("ScreenUnlock","UseUnlocksDat") ScreenUnlock::ScreenUnlock( CString sClassName ) : ScreenAttract( sClassName ) { @@ -44,7 +44,7 @@ ScreenUnlock::ScreenUnlock( CString sClassName ) : ScreenAttract( sClassName ) PointsUntilNextUnlock.LoadFromFont( THEME->GetPathToF("Common normal") ); PointsUntilNextUnlock.SetHorizAlign( Actor::align_left ); - CString IconCommand = ICON_COMMAND; + const ActorCommands IconCommand = ICON_COMMAND; for( unsigned i=1; i <= NumUnlocks; i++ ) { // get pertaining UnlockEntry @@ -133,12 +133,12 @@ ScreenUnlock::ScreenUnlock( CString sClassName ) : ScreenAttract( sClassName ) { text->SetMaxWidth( MaxWidth ); text->SetText( crs->GetFullDisplayTitle() ); - text->Command("Diffuse,0,1,0,1"); + text->SetDiffuse( RageColor(0,1,0,1) ); } else // entry isn't a song or course { text->SetText( "" ); - text->Command("Diffuse,0.5,0,0,1"); + text->SetDiffuse( RageColor(0.5,0,0,1) ); } } @@ -164,10 +164,14 @@ ScreenUnlock::ScreenUnlock( CString sClassName ) : ScreenAttract( sClassName ) float SecondCycleTime = (6 + TargetRow) * SECS_PER_CYCLE - FirstCycleTime; LOG->Trace("Target Row: %f", TargetRow); LOG->Trace("command for icon %d: %s", i, ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime * 2, ScrollingTextEndY).c_str() ); - text->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime, ScrollingTextEndY) ); + CString sCommand = ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime, ScrollingTextEndY); + text->Command( ParseActorCommands(sCommand) ); } else - text->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), SECS_PER_CYCLE * (ScrollingTextRows), ScrollingTextEndY) ); + { + CString sCommand = ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), SECS_PER_CYCLE * (ScrollingTextRows), ScrollingTextEndY); + text->Command( ParseActorCommands(sCommand) ); + } item.push_back(text); @@ -192,10 +196,14 @@ ScreenUnlock::ScreenUnlock( CString sClassName ) : ScreenAttract( sClassName ) float SecondCycleTime = (6 + TargetRow) * SECS_PER_CYCLE - FirstCycleTime; LOG->Trace("Target Row: %f", TargetRow); LOG->Trace("command for icon %d: %s", i, ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime * 2, ScrollingTextEndY).c_str() ); - IconCount->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime, ScrollingTextEndY) ); + CString sCommand = ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), FirstCycleTime, StopOffPoint, SecondCycleTime, ScrollingTextEndY); + IconCount->Command( ParseActorCommands(sCommand) ); } else - IconCount->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), SECS_PER_CYCLE * (ScrollingTextRows), ScrollingTextEndY) ); + { + CString sCommand = ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;linear,0.1;diffusealpha,0", SECS_PER_CYCLE * (i - 1), SECS_PER_CYCLE * (ScrollingTextRows), ScrollingTextEndY); + IconCount->Command( ParseActorCommands(sCommand) ); + } ItemIcons.push_back(IconCount); @@ -258,19 +266,21 @@ ScreenUnlock::ScreenUnlock( CString sClassName ) : ScreenAttract( sClassName ) NewText->SetGlobalDiffuseColor(color); NewText->SetXY(ScrollingTextX, ScrollingTextStartY); - NewText->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;", SECS_PER_CYCLE * (NumUnlocks + 2 * i - 2), SECS_PER_CYCLE * ((ScrollingTextRows - i) * 2 + 1 ), (ScrollingTextStartY + (ScrollingTextEndY - ScrollingTextStartY) * (ScrollingTextRows - i + 0.5) / ScrollingTextRows )) ); + { + CString sCommand = ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;", SECS_PER_CYCLE * (NumUnlocks + 2 * i - 2), SECS_PER_CYCLE * ((ScrollingTextRows - i) * 2 + 1 ), (ScrollingTextStartY + (ScrollingTextEndY - ScrollingTextStartY) * (ScrollingTextRows - i + 0.5) / ScrollingTextRows )); + NewText->Command( ParseActorCommands(sCommand) ); + } // new unlock graphic Sprite* NewIcon = new Sprite; NewIcon->Load( THEME->GetPathToG(ssprintf("ScreenUnlock %d icon", NextIcon)) ); - - // set graphic location NewIcon->SetXY( UNLOCK_TEXT_SCROLL_ICON_X, ScrollingTextStartY); - NewIcon->SetHeight(UNLOCK_TEXT_SCROLL_ICON_SIZE); NewIcon->SetWidth(UNLOCK_TEXT_SCROLL_ICON_SIZE); - - NewIcon->Command( ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;", SECS_PER_CYCLE * (NumUnlocks + 2 * i - 2), SECS_PER_CYCLE * ((ScrollingTextRows - i) * 2 + 1 ), (ScrollingTextStartY + (ScrollingTextEndY - ScrollingTextStartY) * (ScrollingTextRows - i + 0.5) / ScrollingTextRows )) ); + { + CString sCommand = ssprintf("diffusealpha,0;sleep,%f;diffusealpha,1;linear,%f;y,%f;", SECS_PER_CYCLE * (NumUnlocks + 2 * i - 2), SECS_PER_CYCLE * ((ScrollingTextRows - i) * 2 + 1 ), (ScrollingTextStartY + (ScrollingTextEndY - ScrollingTextStartY) * (ScrollingTextRows - i + 0.5) / ScrollingTextRows )); + NewIcon->Command( ParseActorCommands(sCommand) ); + } ItemIcons.push_back(NewIcon); item.push_back(NewText); diff --git a/stepmania/src/TextBanner.cpp b/stepmania/src/TextBanner.cpp index 56fc59c13b..9d31bd1534 100644 --- a/stepmania/src/TextBanner.cpp +++ b/stepmania/src/TextBanner.cpp @@ -9,13 +9,13 @@ #include "ActorUtil.h" #include "ThemeMetric.h" -ThemeMetric 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"); +ThemeMetric 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() { diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index 9e9340e894..7d6af0703b 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -694,10 +694,15 @@ RageColor ThemeManager::GetMetricC( const CString &sClassName, const CString &sV { RageColor ret(1,1,1,1); if( !ret.FromString( GetMetricRaw(sClassName,sValueName) ) ) - LOG->Warn( "The color value '%s' for NoteSkin metric '%s : %s' is invalid.", GetMetricRaw(sClassName,sValueName).c_str(), sClassName.c_str(), sValueName.c_str() ); + LOG->Warn( "The color value '%s' for metric '%s : %s' is invalid.", GetMetricRaw(sClassName,sValueName).c_str(), sClassName.c_str(), sValueName.c_str() ); return ret; } +ActorCommands ThemeManager::GetMetricA( const CString &sClassName, const CString &sValueName ) +{ + return ParseActorCommands( GetMetricRaw(sClassName,sValueName) ); +} + void ThemeManager::NextTheme() { CStringArray as; diff --git a/stepmania/src/ThemeManager.h b/stepmania/src/ThemeManager.h index 982fd8a46e..802ba85535 100644 --- a/stepmania/src/ThemeManager.h +++ b/stepmania/src/ThemeManager.h @@ -5,6 +5,7 @@ #include "RageTypes.h" #include "RageTimer.h" +#include "ActorCommands.h" #include #include @@ -58,11 +59,13 @@ public: float GetMetricF( const CString &sClassName, const CString &sValueName ); bool GetMetricB( const CString &sClassName, const CString &sValueName ); RageColor GetMetricC( const CString &sClassName, const CString &sValueName ); - void GetMetric( const CString &sClassName, const CString &sValueName, CString &valueOut ) { valueOut = GetMetric( sClassName, sValueName ); } - void GetMetric( const CString &sClassName, const CString &sValueName, int &valueOut ) { valueOut = GetMetricI( sClassName, sValueName ); } - void GetMetric( const CString &sClassName, const CString &sValueName, float &valueOut ) { valueOut = GetMetricF( sClassName, sValueName ); } - void GetMetric( const CString &sClassName, const CString &sValueName, bool &valueOut ) { valueOut = GetMetricB( sClassName, sValueName ); } - void GetMetric( const CString &sClassName, const CString &sValueName, RageColor &valueOut ){ valueOut = GetMetricC( sClassName, sValueName ); } + ActorCommands GetMetricA( const CString &sClassName, const CString &sValueName ); + void GetMetric( const CString &sClassName, const CString &sValueName, CString &valueOut ) { valueOut = GetMetric( sClassName, sValueName ); } + void GetMetric( const CString &sClassName, const CString &sValueName, int &valueOut ) { valueOut = GetMetricI( sClassName, sValueName ); } + void GetMetric( const CString &sClassName, const CString &sValueName, float &valueOut ) { valueOut = GetMetricF( sClassName, sValueName ); } + void GetMetric( const CString &sClassName, const CString &sValueName, bool &valueOut ) { valueOut = GetMetricB( sClassName, sValueName ); } + void GetMetric( const CString &sClassName, const CString &sValueName, RageColor &valueOut ) { valueOut = GetMetricC( sClassName, sValueName ); } + void GetMetric( const CString &sClassName, const CString &sValueName, ActorCommands &valueOut ){ valueOut = GetMetricA( sClassName, sValueName ); } // // For self-registering metrics