Let ActorCommand do the parsing for ModeChoice
This commit is contained in:
@@ -619,7 +619,7 @@ void Actor::AddRotationR( float rot )
|
||||
|
||||
void Actor::Command( const ActorCommands &vCommands )
|
||||
{
|
||||
FOREACH_CONST( ActorCommand, vCommands, c )
|
||||
FOREACH_CONST( ActorCommand, vCommands.v, c )
|
||||
this->HandleCommand( *c );
|
||||
}
|
||||
|
||||
|
||||
@@ -54,16 +54,16 @@ CString ActorCommand::GetOriginalCommandString() const
|
||||
|
||||
void ParseActorCommands( const CString &sCommands, ActorCommands &vCommandsOut )
|
||||
{
|
||||
vCommandsOut.clear();
|
||||
vCommandsOut.v.clear();
|
||||
CStringArray vsCommands;
|
||||
split( sCommands, ";", vsCommands, true ); // do ignore empty
|
||||
|
||||
vCommandsOut.resize( vsCommands.size() );
|
||||
vCommandsOut.v.resize( vsCommands.size() );
|
||||
|
||||
for( unsigned i=0; i<vsCommands.size(); i++ )
|
||||
{
|
||||
const CString &sCommand = vsCommands[i];
|
||||
ActorCommand &pc = vCommandsOut[i];
|
||||
ActorCommand &pc = vCommandsOut.v[i];
|
||||
pc.Set( sCommand );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,10 @@ struct ActorCommand
|
||||
CString GetOriginalCommandString() const; // for when reporting an error in number of params
|
||||
};
|
||||
|
||||
typedef vector<ActorCommand> ActorCommands;
|
||||
struct ActorCommands
|
||||
{
|
||||
vector<ActorCommand> v;
|
||||
};
|
||||
|
||||
// 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 ';'.
|
||||
|
||||
@@ -86,7 +86,7 @@ void GameState::ApplyCmdline()
|
||||
for( int i = 0; GetCommandlineArgument( "mode", &sMode, i ); ++i )
|
||||
{
|
||||
ModeChoice m;
|
||||
m.Load( 0, sMode );
|
||||
m.Load( 0, ParseActorCommands(sMode) );
|
||||
CString why;
|
||||
if( !m.IsPlayable(&why) )
|
||||
RageException::Throw( "Can't apply mode \"%s\": %s", sMode.c_str(), why.c_str() );
|
||||
|
||||
@@ -201,7 +201,7 @@ bool RunExpression( const CString &str )
|
||||
{
|
||||
CString err;
|
||||
Lua::PopStack( L, err );
|
||||
CString sError = ssprintf( "Runtime error running \"%s\": %s", str.c_str(), err.c_str() );
|
||||
CString sError = ssprintf( "Lua runtime error parsing \"%s\": %s", str.c_str(), err.c_str() );
|
||||
Dialog::OK( sError, "LUA_ERROR" );
|
||||
return false;
|
||||
}
|
||||
@@ -216,7 +216,7 @@ bool RunExpression( const CString &str )
|
||||
{
|
||||
CString err;
|
||||
Lua::PopStack( L, err );
|
||||
CString sError = ssprintf( "Runtime error running \"%s\": %s", str.c_str(), err.c_str() );
|
||||
CString sError = ssprintf( "Lua runtime error evaluating \"%s\": %s", str.c_str(), err.c_str() );
|
||||
Dialog::OK( sError, "LUA_ERROR" );
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "song.h"
|
||||
#include "Game.h"
|
||||
#include "Style.h"
|
||||
#include "Foreach.h"
|
||||
|
||||
void ModeChoice::Init()
|
||||
{
|
||||
@@ -96,7 +97,7 @@ bool ModeChoice::DescribesCurrentMode( PlayerNumber pn ) const
|
||||
return true;
|
||||
}
|
||||
|
||||
void ModeChoice::Load( int iIndex, CString sChoice )
|
||||
void ModeChoice::Load( int iIndex, const ActorCommands& acs )
|
||||
{
|
||||
m_iIndex = iIndex;
|
||||
|
||||
@@ -104,21 +105,22 @@ void ModeChoice::Load( int iIndex, CString sChoice )
|
||||
|
||||
CString sSteps;
|
||||
|
||||
CStringArray asCommands;
|
||||
split( sChoice, ";", asCommands );
|
||||
for( unsigned i=0; i<asCommands.size(); i++ )
|
||||
FOREACH_CONST( ActorCommand, acs.v, command )
|
||||
{
|
||||
CString sCommand = asCommands[i];
|
||||
|
||||
CStringArray asBits;
|
||||
split( sCommand, ",", asBits );
|
||||
if( command->vTokens.empty() )
|
||||
continue;
|
||||
|
||||
CString sName = asBits[0];
|
||||
asBits.erase(asBits.begin(), asBits.begin()+1);
|
||||
CString sValue = join( ",", asBits );
|
||||
|
||||
sName.MakeLower();
|
||||
// sValue.MakeLower();
|
||||
const CString &sName = command->vTokens[0]; // name is already made lowercase by ActorCommand
|
||||
|
||||
CString sValue;
|
||||
for( vector<ActorCommandToken>::const_iterator iter = command->vTokens.begin()+1;
|
||||
iter != command->vTokens.end();
|
||||
iter++ )
|
||||
{
|
||||
sValue += *iter;
|
||||
if( iter != command->vTokens.end()-1 )
|
||||
sValue += ",";
|
||||
}
|
||||
|
||||
if( sName == "game" )
|
||||
{
|
||||
@@ -207,7 +209,8 @@ void ModeChoice::Load( int iIndex, CString sChoice )
|
||||
|
||||
else if( sName == "setenv" )
|
||||
{
|
||||
m_SetEnv[ asBits[0] ] = sValue;
|
||||
if( command->vTokens.size() == 3 )
|
||||
m_SetEnv[ command->vTokens[1] ] = command->vTokens[2];
|
||||
}
|
||||
|
||||
else if( sName == "songgroup" )
|
||||
|
||||
@@ -14,13 +14,14 @@ class Trail;
|
||||
class Character;
|
||||
class Style;
|
||||
class Game;
|
||||
struct ActorCommands;
|
||||
|
||||
struct ModeChoice // used in SelectMode
|
||||
{
|
||||
ModeChoice() { Init(); }
|
||||
void Init();
|
||||
|
||||
void Load( int iIndex, CString str );
|
||||
void Load( int iIndex, const ActorCommands& acs );
|
||||
void ApplyToAllPlayers() const;
|
||||
void Apply( PlayerNumber pn ) const;
|
||||
bool DescribesCurrentMode( PlayerNumber pn ) const;
|
||||
|
||||
@@ -437,7 +437,7 @@ void MusicWheel::BuildWheelItemDatas( vector<WheelItemData> &arrayWheelItemDatas
|
||||
|
||||
WheelItemData wid( TYPE_SORT, NULL, "", NULL, SORT_MENU_COLOR, so );
|
||||
wid.m_sLabel = Names[i];
|
||||
wid.m_Action.Load( i, Actions[i] );
|
||||
wid.m_Action.Load( i, ParseActorCommands(Actions[i]) );
|
||||
|
||||
switch( so )
|
||||
{
|
||||
|
||||
@@ -44,7 +44,7 @@ void ScreenBranch::HandleScreenMessage( const ScreenMessage SM )
|
||||
LOG->Trace( "Branching to '%s'", sNextScreen.c_str() );
|
||||
|
||||
ModeChoice mc;
|
||||
mc.Load( 0, sNextScreen );
|
||||
mc.Load( 0, ParseActorCommands(sNextScreen) );
|
||||
if( mc.m_sScreen == "" )
|
||||
RageException::Throw("Metric %s::%s must set \"screen\"",
|
||||
m_sName.c_str(), ("NextScreen"+m_sChoice).c_str() );
|
||||
|
||||
@@ -58,7 +58,7 @@ void ScreenOptionsMaster::SetList( OptionRowData &row, OptionRowHandler &hand, C
|
||||
return;
|
||||
}
|
||||
|
||||
hand.Default.Load( -1, ENTRY_DEFAULT(ListName) );
|
||||
hand.Default.Load( -1, ParseActorCommands(ENTRY_DEFAULT(ListName)) );
|
||||
|
||||
/* Parse the basic configuration metric. */
|
||||
CStringArray asParts;
|
||||
@@ -79,7 +79,7 @@ void ScreenOptionsMaster::SetList( OptionRowData &row, OptionRowHandler &hand, C
|
||||
for( int col = 0; col < NumCols; ++col )
|
||||
{
|
||||
ModeChoice mc;
|
||||
mc.Load( 0, ENTRY_MODE(ListName, col) );
|
||||
mc.Load( 0, ParseActorCommands(ENTRY_MODE(ListName, col)) );
|
||||
if( mc.m_sName == "" )
|
||||
RageException::Throw( "List \"%s\", col %i has no name", ListName.c_str(), col );
|
||||
|
||||
@@ -250,13 +250,13 @@ ScreenOptionsMaster::ScreenOptionsMaster( CString sClassName ):
|
||||
ActorCommands vCommands;
|
||||
ParseActorCommands( sRowCommands, vCommands );
|
||||
|
||||
if( vCommands.size() < 1 )
|
||||
if( vCommands.v.size() < 1 )
|
||||
RageException::Throw( "Parse error in %s::Line%i", m_sName.c_str(), i+1 );
|
||||
|
||||
OptionRowHandler hand;
|
||||
for( unsigned part = 0; part < vCommands.size(); ++part)
|
||||
for( unsigned part = 0; part < vCommands.v.size(); ++part)
|
||||
{
|
||||
ActorCommand& command = vCommands[part];
|
||||
ActorCommand& command = vCommands.v[part];
|
||||
|
||||
BeginHandleParams;
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ ScreenSelect::ScreenSelect( CString sClassName ) : ScreenWithMenuElements(sClass
|
||||
|
||||
ModeChoice mc;
|
||||
mc.m_sName = sChoiceName;
|
||||
mc.Load( c, sChoice );
|
||||
mc.Load( c, ParseActorCommands(sChoice) );
|
||||
m_aModeChoices.push_back( mc );
|
||||
|
||||
CString sBGAnimationDir = THEME->GetPath(BGAnimations, m_sName, mc.m_sName, true); // true="optional"
|
||||
@@ -74,7 +74,7 @@ ScreenSelect::ScreenSelect( CString sClassName ) : ScreenWithMenuElements(sClass
|
||||
m_aCodes.push_back( code );
|
||||
m_aCodeActions.push_back( CODE_ACTION(c) );
|
||||
ModeChoice mc;
|
||||
mc.Load( c, CODE_ACTION(c) );
|
||||
mc.Load( c, ParseActorCommands(CODE_ACTION(c)) );
|
||||
m_aCodeChoices.push_back( mc );
|
||||
}
|
||||
|
||||
|
||||
@@ -765,6 +765,11 @@ void ThemeManager::GetModifierNames( set<CString>& AddTo )
|
||||
}
|
||||
}
|
||||
|
||||
void ThemeManager::GetMetric( const CString &sClassName, const CString &sValueName, ActorCommands &valueOut )
|
||||
{
|
||||
valueOut = GetMetricA( sClassName, sValueName );
|
||||
}
|
||||
|
||||
/*
|
||||
* (c) 2001-2004 Chris Danford
|
||||
* All rights reserved.
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
|
||||
#include "RageTypes.h"
|
||||
#include "RageTimer.h"
|
||||
#include "ActorCommands.h"
|
||||
#include <set>
|
||||
#include <deque>
|
||||
|
||||
class IThemeMetric;
|
||||
class IniFile;
|
||||
struct ActorCommands;
|
||||
|
||||
enum ElementCategory { BGAnimations, Fonts, Graphics, Numbers, Sounds, Other, NUM_ELEMENT_CATEGORIES };
|
||||
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
CString GetPathToS( const CString &sFileName, bool bOptional=false );
|
||||
CString GetPathToO( const CString &sFileName, bool bOptional=false );
|
||||
|
||||
|
||||
// TODO: Make these return values const refs.
|
||||
bool HasMetric( const CString &sClassName, const CString &sValueName );
|
||||
CString GetMetricRaw( const CString &sClassName, const CString &sValueName );
|
||||
CString GetMetric( const CString &sClassName, const CString &sValueName );
|
||||
@@ -60,12 +60,13 @@ public:
|
||||
bool GetMetricB( const CString &sClassName, const CString &sValueName );
|
||||
RageColor GetMetricC( const CString &sClassName, const CString &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 ); }
|
||||
|
||||
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 );
|
||||
|
||||
//
|
||||
// For self-registering metrics
|
||||
|
||||
Reference in New Issue
Block a user