style cleanup: use FOREACH_ENUM( X, x ) everywhere instead of FOREACH_X( x ) for consistency
The FOREACH_X defines are not very useful, and they were created back before FOREACH_ENUM was convenient.
This commit is contained in:
@@ -117,7 +117,7 @@ void CatalogXml::Save( LoadingWindow *loading_window )
|
|||||||
iNumStepsInGroupAndStepsType[pSteps->GetDifficulty()]++;
|
iNumStepsInGroupAndStepsType[pSteps->GetDifficulty()]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
p3->AppendChild( DifficultyToString(dc), iNumStepsInGroupAndStepsType[dc] );
|
p3->AppendChild( DifficultyToString(dc), iNumStepsInGroupAndStepsType[dc] );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,7 +299,7 @@ void CatalogXml::Save( LoadingWindow *loading_window )
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNode2 = pNode->AppendChild( "PlayMode" );
|
XNode* pNode2 = pNode->AppendChild( "PlayMode" );
|
||||||
FOREACH_PlayMode( pm )
|
FOREACH_ENUM( PlayMode, pm )
|
||||||
{
|
{
|
||||||
if( !SHOW_PLAY_MODE(pm) )
|
if( !SHOW_PLAY_MODE(pm) )
|
||||||
continue;
|
continue;
|
||||||
@@ -343,7 +343,7 @@ void CatalogXml::Save( LoadingWindow *loading_window )
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNode2 = pNode->AppendChild( "TapNoteScore" );
|
XNode* pNode2 = pNode->AppendChild( "TapNoteScore" );
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
{
|
{
|
||||||
XNode* pNode3 = pNode2->AppendChild( "TapNoteScore", TapNoteScoreToString(tns) );
|
XNode* pNode3 = pNode2->AppendChild( "TapNoteScore", TapNoteScoreToString(tns) );
|
||||||
pNode3->AppendAttr( "DisplayAs", TapNoteScoreToLocalizedString(tns) );
|
pNode3->AppendAttr( "DisplayAs", TapNoteScoreToLocalizedString(tns) );
|
||||||
@@ -352,7 +352,7 @@ void CatalogXml::Save( LoadingWindow *loading_window )
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNode2 = pNode->AppendChild( "HoldNoteScore" );
|
XNode* pNode2 = pNode->AppendChild( "HoldNoteScore" );
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
{
|
{
|
||||||
XNode* pNode3 = pNode2->AppendChild( "HoldNoteScore", HoldNoteScoreToString(hns) );
|
XNode* pNode3 = pNode2->AppendChild( "HoldNoteScore", HoldNoteScoreToString(hns) );
|
||||||
pNode3->AppendAttr( "DisplayAs", HoldNoteScoreToLocalizedString(hns) );
|
pNode3->AppendAttr( "DisplayAs", HoldNoteScoreToLocalizedString(hns) );
|
||||||
@@ -361,7 +361,7 @@ void CatalogXml::Save( LoadingWindow *loading_window )
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNode2 = pNode->AppendChild( "RadarValue" );
|
XNode* pNode2 = pNode->AppendChild( "RadarValue" );
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
{
|
{
|
||||||
XNode* pNode3 = pNode2->AppendChild( "RadarValue", RadarCategoryToString(rc) );
|
XNode* pNode3 = pNode2->AppendChild( "RadarValue", RadarCategoryToString(rc) );
|
||||||
pNode3->AppendAttr( "DisplayAs", RadarCategoryToLocalizedString(rc) );
|
pNode3->AppendAttr( "DisplayAs", RadarCategoryToLocalizedString(rc) );
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ void Course::Init()
|
|||||||
m_bRepeat = false;
|
m_bRepeat = false;
|
||||||
m_bShuffle = false;
|
m_bShuffle = false;
|
||||||
m_iLives = -1;
|
m_iLives = -1;
|
||||||
FOREACH_Difficulty(dc)
|
FOREACH_ENUM( Difficulty,dc)
|
||||||
m_iCustomMeter[dc] = -1;
|
m_iCustomMeter[dc] = -1;
|
||||||
m_bSortByMeter = false;
|
m_bSortByMeter = false;
|
||||||
|
|
||||||
@@ -691,7 +691,7 @@ void Course::Invalidate( const Song *pStaleSong )
|
|||||||
// If we find a Trail that contains this song, then it's part of a
|
// If we find a Trail that contains this song, then it's part of a
|
||||||
// non-fixed entry. So, regenerating the Trail will force different
|
// non-fixed entry. So, regenerating the Trail will force different
|
||||||
// songs to be chosen.
|
// songs to be chosen.
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType,st )
|
||||||
{
|
{
|
||||||
FOREACH_ShownCourseDifficulty( cd )
|
FOREACH_ShownCourseDifficulty( cd )
|
||||||
{
|
{
|
||||||
@@ -860,9 +860,9 @@ bool Course::ShowInDemonstrationAndRanking() const
|
|||||||
|
|
||||||
void Course::CalculateRadarValues()
|
void Course::CalculateRadarValues()
|
||||||
{
|
{
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType,st )
|
||||||
{
|
{
|
||||||
FOREACH_CourseDifficulty( cd )
|
FOREACH_ENUM( CourseDifficulty,cd )
|
||||||
{
|
{
|
||||||
// For courses that aren't fixed, the radar values are meaningless.
|
// For courses that aren't fixed, the radar values are meaningless.
|
||||||
// Makes non-fixed courses have unknown radar values.
|
// Makes non-fixed courses have unknown radar values.
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ const char *g_CRSDifficultyNames[] =
|
|||||||
|
|
||||||
static CourseDifficulty CRSStringToDifficulty( const RString& s )
|
static CourseDifficulty CRSStringToDifficulty( const RString& s )
|
||||||
{
|
{
|
||||||
FOREACH_Difficulty(i)
|
FOREACH_ENUM( Difficulty,i)
|
||||||
if( !s.CompareNoCase(g_CRSDifficultyNames[i]) )
|
if( !s.CompareNoCase(g_CRSDifficultyNames[i]) )
|
||||||
return i;
|
return i;
|
||||||
return Difficulty_Invalid;
|
return Difficulty_Invalid;
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ void CourseUtil::AutogenEndlessFromGroup( const RString &sGroupName, Difficulty
|
|||||||
out.m_bRepeat = true;
|
out.m_bRepeat = true;
|
||||||
out.m_bShuffle = true;
|
out.m_bShuffle = true;
|
||||||
out.m_iLives = -1;
|
out.m_iLives = -1;
|
||||||
FOREACH_Difficulty(dc)
|
FOREACH_ENUM( Difficulty,dc)
|
||||||
out.m_iCustomMeter[dc] = -1;
|
out.m_iCustomMeter[dc] = -1;
|
||||||
|
|
||||||
if( sGroupName == "" )
|
if( sGroupName == "" )
|
||||||
@@ -257,7 +257,7 @@ void CourseUtil::AutogenOniFromArtist( const RString &sArtistName, RString sArti
|
|||||||
out.m_bSortByMeter = true;
|
out.m_bSortByMeter = true;
|
||||||
|
|
||||||
out.m_iLives = 4;
|
out.m_iLives = 4;
|
||||||
FOREACH_Difficulty(cd)
|
FOREACH_ENUM( Difficulty,cd)
|
||||||
out.m_iCustomMeter[cd] = -1;
|
out.m_iCustomMeter[cd] = -1;
|
||||||
|
|
||||||
ASSERT( sArtistName != "" );
|
ASSERT( sArtistName != "" );
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ bool CourseWriterCRS::Write( const Course &course, RageFileBasic &f, bool bSavin
|
|||||||
if( course.m_iLives != -1 )
|
if( course.m_iLives != -1 )
|
||||||
f.PutLine( ssprintf("#LIVES:%i;", course.m_iLives) );
|
f.PutLine( ssprintf("#LIVES:%i;", course.m_iLives) );
|
||||||
|
|
||||||
FOREACH_CourseDifficulty( cd )
|
FOREACH_ENUM( CourseDifficulty,cd )
|
||||||
{
|
{
|
||||||
if( course.m_iCustomMeter[cd] == -1 )
|
if( course.m_iCustomMeter[cd] == -1 )
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ const RString &CourseDifficultyToLocalizedString( CourseDifficulty x )
|
|||||||
static auto_ptr<LocalizedString> g_CourseDifficultyName[NUM_Difficulty];
|
static auto_ptr<LocalizedString> g_CourseDifficultyName[NUM_Difficulty];
|
||||||
if( g_CourseDifficultyName[0].get() == NULL )
|
if( g_CourseDifficultyName[0].get() == NULL )
|
||||||
{
|
{
|
||||||
FOREACH_Difficulty(i)
|
FOREACH_ENUM( Difficulty,i)
|
||||||
{
|
{
|
||||||
auto_ptr<LocalizedString> ap( new LocalizedString("CourseDifficulty", DifficultyToString(i)) );
|
auto_ptr<LocalizedString> ap( new LocalizedString("CourseDifficulty", DifficultyToString(i)) );
|
||||||
g_CourseDifficultyName[i] = ap;
|
g_CourseDifficultyName[i] = ap;
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ enum Difficulty
|
|||||||
NUM_Difficulty,
|
NUM_Difficulty,
|
||||||
Difficulty_Invalid
|
Difficulty_Invalid
|
||||||
};
|
};
|
||||||
#define FOREACH_Difficulty( dc ) FOREACH_ENUM( Difficulty, dc )
|
|
||||||
const RString& DifficultyToString( Difficulty dc );
|
const RString& DifficultyToString( Difficulty dc );
|
||||||
const RString& DifficultyToLocalizedString( Difficulty dc );
|
const RString& DifficultyToLocalizedString( Difficulty dc );
|
||||||
Difficulty StringToDifficulty( const RString& sDC );
|
Difficulty StringToDifficulty( const RString& sDC );
|
||||||
@@ -25,7 +24,7 @@ LuaDeclareType( Difficulty );
|
|||||||
|
|
||||||
|
|
||||||
typedef Difficulty CourseDifficulty;
|
typedef Difficulty CourseDifficulty;
|
||||||
#define FOREACH_CourseDifficulty FOREACH_Difficulty
|
const int NUM_CourseDifficulty = NUM_Difficulty;
|
||||||
#define FOREACH_ShownCourseDifficulty( cd ) for( Difficulty cd=GetNextShownCourseDifficulty((CourseDifficulty)-1); cd!=Difficulty_Invalid; cd=GetNextShownCourseDifficulty(cd) )
|
#define FOREACH_ShownCourseDifficulty( cd ) for( Difficulty cd=GetNextShownCourseDifficulty((CourseDifficulty)-1); cd!=Difficulty_Invalid; cd=GetNextShownCourseDifficulty(cd) )
|
||||||
|
|
||||||
const RString& CourseDifficultyToLocalizedString( Difficulty dc );
|
const RString& CourseDifficultyToLocalizedString( Difficulty dc );
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
|
|||||||
|
|
||||||
m_vpSteps.clear();
|
m_vpSteps.clear();
|
||||||
|
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
{
|
{
|
||||||
if( dc == Difficulty_Edit )
|
if( dc == Difficulty_Edit )
|
||||||
{
|
{
|
||||||
@@ -507,7 +507,7 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
|
|||||||
|
|
||||||
m_vpSourceSteps.clear();
|
m_vpSourceSteps.clear();
|
||||||
m_vpSourceSteps.push_back( StepsAndDifficulty(NULL,Difficulty_Invalid) ); // "blank"
|
m_vpSourceSteps.push_back( StepsAndDifficulty(NULL,Difficulty_Invalid) ); // "blank"
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
{
|
{
|
||||||
// fill in m_vpSourceSteps
|
// fill in m_vpSourceSteps
|
||||||
if( dc != Difficulty_Edit )
|
if( dc != Difficulty_Edit )
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ enum RadarCategory
|
|||||||
NUM_RadarCategory, // leave this at the end
|
NUM_RadarCategory, // leave this at the end
|
||||||
RadarCategory_Invalid
|
RadarCategory_Invalid
|
||||||
};
|
};
|
||||||
#define FOREACH_RadarCategory( rc ) FOREACH_ENUM( RadarCategory, rc )
|
|
||||||
const RString& RadarCategoryToString( RadarCategory cat );
|
const RString& RadarCategoryToString( RadarCategory cat );
|
||||||
const RString& RadarCategoryToLocalizedString( RadarCategory cat );
|
const RString& RadarCategoryToLocalizedString( RadarCategory cat );
|
||||||
LuaDeclareType( RadarCategory );
|
LuaDeclareType( RadarCategory );
|
||||||
@@ -73,7 +72,6 @@ enum StepsType
|
|||||||
NUM_StepsType, // leave this at the end
|
NUM_StepsType, // leave this at the end
|
||||||
StepsType_Invalid,
|
StepsType_Invalid,
|
||||||
};
|
};
|
||||||
#define FOREACH_StepsType( st ) FOREACH_ENUM( StepsType, st )
|
|
||||||
LuaDeclareType( StepsType );
|
LuaDeclareType( StepsType );
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -90,7 +88,6 @@ enum PlayMode
|
|||||||
NUM_PlayMode,
|
NUM_PlayMode,
|
||||||
PlayMode_Invalid
|
PlayMode_Invalid
|
||||||
};
|
};
|
||||||
#define FOREACH_PlayMode( pm ) FOREACH_ENUM( PlayMode, pm )
|
|
||||||
const RString& PlayModeToString( PlayMode pm );
|
const RString& PlayModeToString( PlayMode pm );
|
||||||
const RString& PlayModeToLocalizedString( PlayMode pm );
|
const RString& PlayModeToLocalizedString( PlayMode pm );
|
||||||
PlayMode StringToPlayMode( const RString& s );
|
PlayMode StringToPlayMode( const RString& s );
|
||||||
@@ -123,7 +120,6 @@ enum SortOrder
|
|||||||
SortOrder_Invalid
|
SortOrder_Invalid
|
||||||
};
|
};
|
||||||
const SortOrder MAX_SELECTABLE_SORT = (SortOrder)(SORT_ROULETTE-1);
|
const SortOrder MAX_SELECTABLE_SORT = (SortOrder)(SORT_ROULETTE-1);
|
||||||
#define FOREACH_SortOrder( so ) FOREACH_ENUM( SortOrder, so )
|
|
||||||
const RString& SortOrderToString( SortOrder so );
|
const RString& SortOrderToString( SortOrder so );
|
||||||
SortOrder StringToSortOrder( const RString& str );
|
SortOrder StringToSortOrder( const RString& str );
|
||||||
LuaDeclareType( SortOrder );
|
LuaDeclareType( SortOrder );
|
||||||
@@ -147,7 +143,6 @@ enum TapNoteScore {
|
|||||||
NUM_TapNoteScore,
|
NUM_TapNoteScore,
|
||||||
TapNoteScore_Invalid,
|
TapNoteScore_Invalid,
|
||||||
};
|
};
|
||||||
#define FOREACH_TapNoteScore( tns ) FOREACH_ENUM( TapNoteScore, tns )
|
|
||||||
const RString& TapNoteScoreToString( TapNoteScore tns );
|
const RString& TapNoteScoreToString( TapNoteScore tns );
|
||||||
const RString& TapNoteScoreToLocalizedString( TapNoteScore tns );
|
const RString& TapNoteScoreToLocalizedString( TapNoteScore tns );
|
||||||
TapNoteScore StringToTapNoteScore( const RString& str );
|
TapNoteScore StringToTapNoteScore( const RString& str );
|
||||||
@@ -162,7 +157,6 @@ enum HoldNoteScore
|
|||||||
NUM_HoldNoteScore,
|
NUM_HoldNoteScore,
|
||||||
HoldNoteScore_Invalid,
|
HoldNoteScore_Invalid,
|
||||||
};
|
};
|
||||||
#define FOREACH_HoldNoteScore( hns ) FOREACH_ENUM( HoldNoteScore, hns )
|
|
||||||
const RString& HoldNoteScoreToString( HoldNoteScore hns );
|
const RString& HoldNoteScoreToString( HoldNoteScore hns );
|
||||||
const RString& HoldNoteScoreToLocalizedString( HoldNoteScore hns );
|
const RString& HoldNoteScoreToLocalizedString( HoldNoteScore hns );
|
||||||
HoldNoteScore StringToHoldNoteScore( const RString& str );
|
HoldNoteScore StringToHoldNoteScore( const RString& str );
|
||||||
@@ -220,7 +214,6 @@ enum ProfileSlot
|
|||||||
NUM_ProfileSlot,
|
NUM_ProfileSlot,
|
||||||
ProfileSlot_Invalid
|
ProfileSlot_Invalid
|
||||||
};
|
};
|
||||||
#define FOREACH_ProfileSlot( slot ) FOREACH_ENUM( ProfileSlot, slot )
|
|
||||||
|
|
||||||
|
|
||||||
enum MemoryCardState
|
enum MemoryCardState
|
||||||
@@ -250,7 +243,6 @@ enum RankingCategory
|
|||||||
NUM_RankingCategory,
|
NUM_RankingCategory,
|
||||||
RankingCategory_Invalid
|
RankingCategory_Invalid
|
||||||
};
|
};
|
||||||
#define FOREACH_RankingCategory( rc ) FOREACH_ENUM( RankingCategory, rc )
|
|
||||||
const RString& RankingCategoryToString( RankingCategory rc );
|
const RString& RankingCategoryToString( RankingCategory rc );
|
||||||
RankingCategory StringToRankingCategory( const RString& rc );
|
RankingCategory StringToRankingCategory( const RString& rc );
|
||||||
|
|
||||||
@@ -315,7 +307,6 @@ enum CoinMode
|
|||||||
NUM_CoinMode,
|
NUM_CoinMode,
|
||||||
CoinMode_Invalid
|
CoinMode_Invalid
|
||||||
};
|
};
|
||||||
#define FOREACH_CoinMode( i ) FOREACH_ENUM( CoinMode, i )
|
|
||||||
const RString& CoinModeToString( CoinMode cm );
|
const RString& CoinModeToString( CoinMode cm );
|
||||||
LuaDeclareType( CoinMode );
|
LuaDeclareType( CoinMode );
|
||||||
|
|
||||||
@@ -331,7 +322,6 @@ enum Premium
|
|||||||
NUM_Premium,
|
NUM_Premium,
|
||||||
Premium_Invalid
|
Premium_Invalid
|
||||||
};
|
};
|
||||||
#define FOREACH_Premium( i ) FOREACH_ENUM( Premium, i )
|
|
||||||
const RString& PremiumToString( Premium p );
|
const RString& PremiumToString( Premium p );
|
||||||
LuaDeclareType( Premium );
|
LuaDeclareType( Premium );
|
||||||
|
|
||||||
@@ -355,7 +345,6 @@ enum PerDifficultyAward
|
|||||||
NUM_PerDifficultyAward,
|
NUM_PerDifficultyAward,
|
||||||
PerDifficultyAward_Invalid,
|
PerDifficultyAward_Invalid,
|
||||||
};
|
};
|
||||||
#define FOREACH_PerDifficultyAward( pma ) FOREACH_ENUM( PerDifficultyAward, pma )
|
|
||||||
const RString& PerDifficultyAwardToString( PerDifficultyAward pma );
|
const RString& PerDifficultyAwardToString( PerDifficultyAward pma );
|
||||||
const RString& PerDifficultyAwardToLocalizedString( PerDifficultyAward pma );
|
const RString& PerDifficultyAwardToLocalizedString( PerDifficultyAward pma );
|
||||||
PerDifficultyAward StringToPerDifficultyAward( const RString& pma );
|
PerDifficultyAward StringToPerDifficultyAward( const RString& pma );
|
||||||
@@ -377,7 +366,6 @@ enum PeakComboAward
|
|||||||
NUM_PeakComboAward,
|
NUM_PeakComboAward,
|
||||||
PeakComboAward_Invalid,
|
PeakComboAward_Invalid,
|
||||||
};
|
};
|
||||||
#define FOREACH_PeakComboAward( pca ) FOREACH_ENUM( PeakComboAward, pca )
|
|
||||||
const RString& PeakComboAwardToString( PeakComboAward pma );
|
const RString& PeakComboAwardToString( PeakComboAward pma );
|
||||||
const RString& PeakComboAwardToLocalizedString( PeakComboAward pma );
|
const RString& PeakComboAwardToLocalizedString( PeakComboAward pma );
|
||||||
PeakComboAward StringToPeakComboAward( const RString& pma );
|
PeakComboAward StringToPeakComboAward( const RString& pma );
|
||||||
@@ -416,7 +404,6 @@ enum GoalType
|
|||||||
NUM_GoalType,
|
NUM_GoalType,
|
||||||
GoalType_Invalid,
|
GoalType_Invalid,
|
||||||
};
|
};
|
||||||
#define FOREACH_GoalType( gt ) FOREACH_ENUM( GoalType, gt )
|
|
||||||
const RString& GoalTypeToString( GoalType gt );
|
const RString& GoalTypeToString( GoalType gt );
|
||||||
GoalType StringToGoalType( const RString& s );
|
GoalType StringToGoalType( const RString& s );
|
||||||
LuaDeclareType( GoalType );
|
LuaDeclareType( GoalType );
|
||||||
@@ -454,7 +441,6 @@ enum Stage
|
|||||||
NUM_Stage,
|
NUM_Stage,
|
||||||
Stage_Invalid,
|
Stage_Invalid,
|
||||||
};
|
};
|
||||||
#define FOREACH_Stage( s ) FOREACH_ENUM( Stage, s )
|
|
||||||
const RString& StageToString( Stage s );
|
const RString& StageToString( Stage s );
|
||||||
LuaDeclareType( Stage );
|
LuaDeclareType( Stage );
|
||||||
|
|
||||||
|
|||||||
@@ -2293,7 +2293,7 @@ const Style* GameManager::GetEditorStyleForStepsType( StepsType st ) const
|
|||||||
|
|
||||||
void GameManager::GetStepsTypesForGame( const Game *pGame, vector<StepsType>& aStepsTypeAddTo ) const
|
void GameManager::GetStepsTypesForGame( const Game *pGame, vector<StepsType>& aStepsTypeAddTo ) const
|
||||||
{
|
{
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType, st )
|
||||||
{
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for( unsigned s=0; !found && s<NUM_STYLES; s++ )
|
for( unsigned s=0; !found && s<NUM_STYLES; s++ )
|
||||||
|
|||||||
@@ -1446,7 +1446,7 @@ void GameState::GetRankingFeats( PlayerNumber pn, vector<RankingFeat> &asFeatsOu
|
|||||||
|
|
||||||
|
|
||||||
// Find Machine Category Records
|
// Find Machine Category Records
|
||||||
FOREACH_RankingCategory( rc )
|
FOREACH_ENUM( RankingCategory, rc )
|
||||||
{
|
{
|
||||||
HighScoreList &hsl = PROFILEMAN->GetMachineProfile()->GetCategoryHighScoreList( st, rc );
|
HighScoreList &hsl = PROFILEMAN->GetMachineProfile()->GetCategoryHighScoreList( st, rc );
|
||||||
for( unsigned j=0; j<hsl.vHighScores.size(); j++ )
|
for( unsigned j=0; j<hsl.vHighScores.size(); j++ )
|
||||||
@@ -1467,7 +1467,7 @@ void GameState::GetRankingFeats( PlayerNumber pn, vector<RankingFeat> &asFeatsOu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Find Personal Category Records
|
// Find Personal Category Records
|
||||||
FOREACH_RankingCategory( rc )
|
FOREACH_ENUM( RankingCategory, rc )
|
||||||
{
|
{
|
||||||
if( pProf )
|
if( pProf )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ RString GradeToOldString( Grade g ); // "AAA", "B", etc for backward compatibili
|
|||||||
RString GradeToLocalizedString( Grade g );
|
RString GradeToLocalizedString( Grade g );
|
||||||
Grade StringToGrade( const RString &s );
|
Grade StringToGrade( const RString &s );
|
||||||
LuaDeclareType( Grade );
|
LuaDeclareType( Grade );
|
||||||
#define FOREACH_Grade( g ) FOREACH_ENUM( Grade, g )
|
|
||||||
#define FOREACH_UsedGrade( g ) FOREACH_ENUM_N( Grade, THEME->GetMetricI("PlayerStageStats","NumGradeTiersUsed"), g )
|
#define FOREACH_UsedGrade( g ) FOREACH_ENUM_N( Grade, THEME->GetMetricI("PlayerStageStats","NumGradeTiersUsed"), g )
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -48,9 +48,9 @@ bool HighScoreImpl::operator==( const HighScoreImpl& other ) const
|
|||||||
COMPARE( sPlayerGuid );
|
COMPARE( sPlayerGuid );
|
||||||
COMPARE( sMachineGuid );
|
COMPARE( sMachineGuid );
|
||||||
COMPARE( iProductID );
|
COMPARE( iProductID );
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
COMPARE( iTapNoteScores[tns] );
|
COMPARE( iTapNoteScores[tns] );
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
COMPARE( iHoldNoteScores[hns] );
|
COMPARE( iHoldNoteScores[hns] );
|
||||||
COMPARE( radarValues );
|
COMPARE( radarValues );
|
||||||
COMPARE( fLifeRemainingSeconds );
|
COMPARE( fLifeRemainingSeconds );
|
||||||
@@ -95,11 +95,11 @@ XNode *HighScoreImpl::CreateNode() const
|
|||||||
pNode->AppendChild( "MachineGuid", sMachineGuid );
|
pNode->AppendChild( "MachineGuid", sMachineGuid );
|
||||||
pNode->AppendChild( "ProductID", iProductID );
|
pNode->AppendChild( "ProductID", iProductID );
|
||||||
XNode* pTapNoteScores = pNode->AppendChild( "TapNoteScores" );
|
XNode* pTapNoteScores = pNode->AppendChild( "TapNoteScores" );
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
if( tns != TNS_None ) // HACK: don't save meaningless "none" count
|
if( tns != TNS_None ) // HACK: don't save meaningless "none" count
|
||||||
pTapNoteScores->AppendChild( TapNoteScoreToString(tns), iTapNoteScores[tns] );
|
pTapNoteScores->AppendChild( TapNoteScoreToString(tns), iTapNoteScores[tns] );
|
||||||
XNode* pHoldNoteScores = pNode->AppendChild( "HoldNoteScores" );
|
XNode* pHoldNoteScores = pNode->AppendChild( "HoldNoteScores" );
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
if( hns != HNS_None ) // HACK: don't save meaningless "none" count
|
if( hns != HNS_None ) // HACK: don't save meaningless "none" count
|
||||||
pHoldNoteScores->AppendChild( HoldNoteScoreToString(hns), iHoldNoteScores[hns] );
|
pHoldNoteScores->AppendChild( HoldNoteScoreToString(hns), iHoldNoteScores[hns] );
|
||||||
pNode->AppendChild( radarValues.CreateNode(bWriteSimpleValues, bWriteComplexValues) );
|
pNode->AppendChild( radarValues.CreateNode(bWriteSimpleValues, bWriteComplexValues) );
|
||||||
@@ -127,11 +127,11 @@ void HighScoreImpl::LoadFromNode( const XNode *pNode )
|
|||||||
pNode->GetChildValue( "ProductID", iProductID );
|
pNode->GetChildValue( "ProductID", iProductID );
|
||||||
const XNode* pTapNoteScores = pNode->GetChild( "TapNoteScores" );
|
const XNode* pTapNoteScores = pNode->GetChild( "TapNoteScores" );
|
||||||
if( pTapNoteScores )
|
if( pTapNoteScores )
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
pTapNoteScores->GetChildValue( TapNoteScoreToString(tns), iTapNoteScores[tns] );
|
pTapNoteScores->GetChildValue( TapNoteScoreToString(tns), iTapNoteScores[tns] );
|
||||||
const XNode* pHoldNoteScores = pNode->GetChild( "HoldNoteScores" );
|
const XNode* pHoldNoteScores = pNode->GetChild( "HoldNoteScores" );
|
||||||
if( pHoldNoteScores )
|
if( pHoldNoteScores )
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
pHoldNoteScores->GetChildValue( HoldNoteScoreToString(hns), iHoldNoteScores[hns] );
|
pHoldNoteScores->GetChildValue( HoldNoteScoreToString(hns), iHoldNoteScores[hns] );
|
||||||
const XNode* pRadarValues = pNode->GetChild( "RadarValues" );
|
const XNode* pRadarValues = pNode->GetChild( "RadarValues" );
|
||||||
if( pRadarValues )
|
if( pRadarValues )
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ void MusicWheel::Load( RString sType )
|
|||||||
RString times;
|
RString times;
|
||||||
/* Build all of the wheel item data. Do this after selecting
|
/* Build all of the wheel item data. Do this after selecting
|
||||||
* the extra stage, so it knows to always display it. */
|
* the extra stage, so it knows to always display it. */
|
||||||
FOREACH_SortOrder( so )
|
FOREACH_ENUM( SortOrder, so )
|
||||||
{
|
{
|
||||||
BuildWheelItemDatas( m_WheelItemDatas[so], so );
|
BuildWheelItemDatas( m_WheelItemDatas[so], so );
|
||||||
times += ssprintf( "%i:%.3f ", so, timer.GetDeltaTime() );
|
times += ssprintf( "%i:%.3f ", so, timer.GetDeltaTime() );
|
||||||
@@ -187,7 +187,7 @@ void MusicWheel::BeginScreen()
|
|||||||
|
|
||||||
MusicWheel::~MusicWheel()
|
MusicWheel::~MusicWheel()
|
||||||
{
|
{
|
||||||
FOREACH_SortOrder( so )
|
FOREACH_ENUM( SortOrder, so )
|
||||||
FOREACH( WheelItemData*, m_WheelItemDatas[so], i )
|
FOREACH( WheelItemData*, m_WheelItemDatas[so], i )
|
||||||
delete *i;
|
delete *i;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -682,7 +682,7 @@ void NoteDataUtil::CalculateRadarValues( const NoteData &in, float fSongSeconds,
|
|||||||
{
|
{
|
||||||
// The for loop and the assert are used to ensure that all fields of
|
// The for loop and the assert are used to ensure that all fields of
|
||||||
// RadarValue get set in here.
|
// RadarValue get set in here.
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
{
|
{
|
||||||
switch( rc )
|
switch( rc )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ void NoteDataWithScoring::GetActualRadarValues( const NoteData &in, const Player
|
|||||||
{
|
{
|
||||||
// The for loop and the assert are used to ensure that all fields of
|
// The for loop and the assert are used to ensure that all fields of
|
||||||
// RadarValue get set in here.
|
// RadarValue get set in here.
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
{
|
{
|
||||||
switch( rc )
|
switch( rc )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -930,9 +930,9 @@ static void SlideDuplicateDifficulties( Song &p )
|
|||||||
* difficulties slid upwards due to (for example) having two beginner steps.
|
* difficulties slid upwards due to (for example) having two beginner steps.
|
||||||
* We do a second pass in Song::TidyUpData to eliminate any remaining duplicates
|
* We do a second pass in Song::TidyUpData to eliminate any remaining duplicates
|
||||||
* after this. */
|
* after this. */
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType,st )
|
||||||
{
|
{
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
{
|
{
|
||||||
if( dc == Difficulty_Edit )
|
if( dc == Difficulty_Edit )
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ static void LoadFromSMTokens(
|
|||||||
{
|
{
|
||||||
RadarValues v[NUM_PLAYERS];
|
RadarValues v[NUM_PLAYERS];
|
||||||
FOREACH_PlayerNumber( pn )
|
FOREACH_PlayerNumber( pn )
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
v[pn][rc] = StringToFloat( saValues[pn*NUM_RadarCategory + rc] );
|
v[pn][rc] = StringToFloat( saValues[pn*NUM_RadarCategory + rc] );
|
||||||
out.SetCachedRadarValues( v );
|
out.SetCachedRadarValues( v );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ static RString GetSMNotesTag( const Song &song, const Steps &in, bool bSavingCac
|
|||||||
FOREACH_PlayerNumber( pn )
|
FOREACH_PlayerNumber( pn )
|
||||||
{
|
{
|
||||||
const RadarValues &rv = in.GetRadarValues( pn );
|
const RadarValues &rv = in.GetRadarValues( pn );
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
asRadarValues.push_back( ssprintf("%.3f", rv[rc]) );
|
asRadarValues.push_back( ssprintf("%.3f", rv[rc]) );
|
||||||
}
|
}
|
||||||
lines.push_back( ssprintf( " %s:", join(",",asRadarValues).c_str() ) );
|
lines.push_back( ssprintf( " %s:", join(",",asRadarValues).c_str() ) );
|
||||||
|
|||||||
@@ -480,7 +480,7 @@ public:
|
|||||||
|
|
||||||
if( GAMESTATE->m_pCurSong )
|
if( GAMESTATE->m_pCurSong )
|
||||||
{
|
{
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
{
|
{
|
||||||
if( dc == Difficulty_Edit )
|
if( dc == Difficulty_Edit )
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ Grade GetGradeFromPercent( float fPercent, bool bMerciful )
|
|||||||
|
|
||||||
Grade grade = Grade_Failed;
|
Grade grade = Grade_Failed;
|
||||||
|
|
||||||
FOREACH_Grade(g)
|
FOREACH_ENUM( Grade,g)
|
||||||
{
|
{
|
||||||
if( fPercent >= GRADE_PERCENT_TIER(g) )
|
if( fPercent >= GRADE_PERCENT_TIER(g) )
|
||||||
{
|
{
|
||||||
@@ -160,14 +160,14 @@ Grade PlayerStageStats::GetGrade() const
|
|||||||
if( m_vpPlayedSteps.size() && !GAMESTATE->IsCourseMode() )
|
if( m_vpPlayedSteps.size() && !GAMESTATE->IsCourseMode() )
|
||||||
bIsBeginner = m_vpPlayedSteps[0]->GetDifficulty() == Difficulty_Beginner;
|
bIsBeginner = m_vpPlayedSteps[0]->GetDifficulty() == Difficulty_Beginner;
|
||||||
|
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
{
|
{
|
||||||
int iTapScoreValue = ScoreKeeperNormal::TapNoteScoreToGradePoints( tns, bIsBeginner );
|
int iTapScoreValue = ScoreKeeperNormal::TapNoteScoreToGradePoints( tns, bIsBeginner );
|
||||||
fActual += m_iTapNoteScores[tns] * iTapScoreValue;
|
fActual += m_iTapNoteScores[tns] * iTapScoreValue;
|
||||||
LOG->Trace( "GetGrade actual: %i * %i", m_iTapNoteScores[tns], iTapScoreValue );
|
LOG->Trace( "GetGrade actual: %i * %i", m_iTapNoteScores[tns], iTapScoreValue );
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
{
|
{
|
||||||
int iHoldScoreValue = ScoreKeeperNormal::HoldNoteScoreToGradePoints( hns, bIsBeginner );
|
int iHoldScoreValue = ScoreKeeperNormal::HoldNoteScoreToGradePoints( hns, bIsBeginner );
|
||||||
fActual += m_iHoldNoteScores[hns] * iHoldScoreValue;
|
fActual += m_iHoldNoteScores[hns] * iHoldScoreValue;
|
||||||
@@ -253,7 +253,7 @@ int PlayerStageStats::GetLessonScoreActual() const
|
|||||||
{
|
{
|
||||||
int iScore = 0;
|
int iScore = 0;
|
||||||
|
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
{
|
{
|
||||||
switch( tns )
|
switch( tns )
|
||||||
{
|
{
|
||||||
@@ -268,7 +268,7 @@ int PlayerStageStats::GetLessonScoreActual() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
{
|
{
|
||||||
switch( hns )
|
switch( hns )
|
||||||
{
|
{
|
||||||
@@ -295,9 +295,9 @@ void PlayerStageStats::ResetScoreForLesson()
|
|||||||
{
|
{
|
||||||
m_iCurPossibleDancePoints = 0;
|
m_iCurPossibleDancePoints = 0;
|
||||||
m_iActualDancePoints = 0;
|
m_iActualDancePoints = 0;
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
m_iTapNoteScores[tns] = 0;
|
m_iTapNoteScores[tns] = 0;
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
m_iHoldNoteScores[hns] = 0;
|
m_iHoldNoteScores[hns] = 0;
|
||||||
m_iCurCombo = 0;
|
m_iCurCombo = 0;
|
||||||
m_iMaxCombo = 0;
|
m_iMaxCombo = 0;
|
||||||
@@ -600,7 +600,7 @@ void PlayerStageStats::CalcAwards( PlayerNumber p, bool bGaveUp, bool bUsedAutop
|
|||||||
int iComboAtStartOfStage = GetComboAtStartOfStage();
|
int iComboAtStartOfStage = GetComboAtStartOfStage();
|
||||||
int iPeakCombo = GetMaxCombo().m_cnt;
|
int iPeakCombo = GetMaxCombo().m_cnt;
|
||||||
|
|
||||||
FOREACH_PeakComboAward( pca )
|
FOREACH_ENUM( PeakComboAward,pca )
|
||||||
{
|
{
|
||||||
int iLevel = 1000 * (pca+1);
|
int iLevel = 1000 * (pca+1);
|
||||||
bool bCrossedLevel = iComboAtStartOfStage < iLevel && iPeakCombo >= iLevel;
|
bool bCrossedLevel = iComboAtStartOfStage < iLevel && iPeakCombo >= iLevel;
|
||||||
|
|||||||
+19
-19
@@ -128,10 +128,10 @@ void Profile::InitGeneralData()
|
|||||||
m_iTotalMines = 0;
|
m_iTotalMines = 0;
|
||||||
m_iTotalHands = 0;
|
m_iTotalHands = 0;
|
||||||
|
|
||||||
FOREACH_PlayMode( i )
|
FOREACH_ENUM( PlayMode, i )
|
||||||
m_iNumSongsPlayedByPlayMode[i] = 0;
|
m_iNumSongsPlayedByPlayMode[i] = 0;
|
||||||
m_iNumSongsPlayedByStyle.clear();
|
m_iNumSongsPlayedByStyle.clear();
|
||||||
FOREACH_Difficulty( i )
|
FOREACH_ENUM( Difficulty, i )
|
||||||
m_iNumSongsPlayedByDifficulty[i] = 0;
|
m_iNumSongsPlayedByDifficulty[i] = 0;
|
||||||
for( int i=0; i<MAX_METER+1; i++ )
|
for( int i=0; i<MAX_METER+1; i++ )
|
||||||
m_iNumSongsPlayedByMeter[i] = 0;
|
m_iNumSongsPlayedByMeter[i] = 0;
|
||||||
@@ -152,8 +152,8 @@ void Profile::InitCourseScores()
|
|||||||
|
|
||||||
void Profile::InitCategoryScores()
|
void Profile::InitCategoryScores()
|
||||||
{
|
{
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType,st )
|
||||||
FOREACH_RankingCategory( rc )
|
FOREACH_ENUM( RankingCategory,rc )
|
||||||
m_CategoryHighScores[st][rc].Init();
|
m_CategoryHighScores[st][rc].Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,7 +232,7 @@ float Profile::GetCaloriesBurnedToday() const
|
|||||||
int Profile::GetTotalNumSongsPassed() const
|
int Profile::GetTotalNumSongsPassed() const
|
||||||
{
|
{
|
||||||
int iTotal = 0;
|
int iTotal = 0;
|
||||||
FOREACH_PlayMode( i )
|
FOREACH_ENUM( PlayMode, i )
|
||||||
iTotal += m_iNumStagesPassedByPlayMode[i];
|
iTotal += m_iNumStagesPassedByPlayMode[i];
|
||||||
return iTotal;
|
return iTotal;
|
||||||
}
|
}
|
||||||
@@ -448,12 +448,12 @@ float Profile::GetSongsAndCoursesPercentCompleteAllDifficulties( StepsType st )
|
|||||||
{
|
{
|
||||||
float fActual = 0;
|
float fActual = 0;
|
||||||
float fPossible = 0;
|
float fPossible = 0;
|
||||||
FOREACH_Difficulty( d )
|
FOREACH_ENUM( Difficulty, d )
|
||||||
{
|
{
|
||||||
fActual += GetSongsActual(st,d);
|
fActual += GetSongsActual(st,d);
|
||||||
fPossible += GetSongsPossible(st,d);
|
fPossible += GetSongsPossible(st,d);
|
||||||
}
|
}
|
||||||
FOREACH_CourseDifficulty( d )
|
FOREACH_ENUM( CourseDifficulty, d )
|
||||||
{
|
{
|
||||||
fActual += GetCoursesActual(st,d);
|
fActual += GetCoursesActual(st,d);
|
||||||
fPossible += GetCoursesPossible(st,d);
|
fPossible += GetCoursesPossible(st,d);
|
||||||
@@ -646,7 +646,7 @@ void Profile::GetGrades( const Song* pSong, StepsType st, int iCounts[NUM_Grade]
|
|||||||
if( hsSong == NULL )
|
if( hsSong == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FOREACH_Grade(g)
|
FOREACH_ENUM( Grade,g)
|
||||||
{
|
{
|
||||||
FOREACHM_CONST( StepsID, HighScoresForASteps, hsSong->m_StepsHighScores, it )
|
FOREACHM_CONST( StepsID, HighScoresForASteps, hsSong->m_StepsHighScores, it )
|
||||||
{
|
{
|
||||||
@@ -761,7 +761,7 @@ HighScoreList& Profile::GetCategoryHighScoreList( StepsType st, RankingCategory
|
|||||||
int Profile::GetCategoryNumTimesPlayed( StepsType st ) const
|
int Profile::GetCategoryNumTimesPlayed( StepsType st ) const
|
||||||
{
|
{
|
||||||
int iNumTimesPlayed = 0;
|
int iNumTimesPlayed = 0;
|
||||||
FOREACH_RankingCategory( rc )
|
FOREACH_ENUM( RankingCategory,rc )
|
||||||
iNumTimesPlayed += m_CategoryHighScores[st][rc].GetNumTimesPlayed();
|
iNumTimesPlayed += m_CategoryHighScores[st][rc].GetNumTimesPlayed();
|
||||||
return iNumTimesPlayed;
|
return iNumTimesPlayed;
|
||||||
}
|
}
|
||||||
@@ -1092,7 +1092,7 @@ XNode* Profile::SaveGeneralDataCreateNode() const
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNumSongsPlayedByPlayMode = pGeneralDataNode->AppendChild("NumSongsPlayedByPlayMode");
|
XNode* pNumSongsPlayedByPlayMode = pGeneralDataNode->AppendChild("NumSongsPlayedByPlayMode");
|
||||||
FOREACH_PlayMode( pm )
|
FOREACH_ENUM( PlayMode, pm )
|
||||||
{
|
{
|
||||||
/* Don't save unplayed PlayModes. */
|
/* Don't save unplayed PlayModes. */
|
||||||
if( !m_iNumSongsPlayedByPlayMode[pm] )
|
if( !m_iNumSongsPlayedByPlayMode[pm] )
|
||||||
@@ -1117,7 +1117,7 @@ XNode* Profile::SaveGeneralDataCreateNode() const
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNumSongsPlayedByDifficulty = pGeneralDataNode->AppendChild("NumSongsPlayedByDifficulty");
|
XNode* pNumSongsPlayedByDifficulty = pGeneralDataNode->AppendChild("NumSongsPlayedByDifficulty");
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
{
|
{
|
||||||
if( !m_iNumSongsPlayedByDifficulty[dc] )
|
if( !m_iNumSongsPlayedByDifficulty[dc] )
|
||||||
continue;
|
continue;
|
||||||
@@ -1139,7 +1139,7 @@ XNode* Profile::SaveGeneralDataCreateNode() const
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNumStagesPassedByPlayMode = pGeneralDataNode->AppendChild("NumStagesPassedByPlayMode");
|
XNode* pNumStagesPassedByPlayMode = pGeneralDataNode->AppendChild("NumStagesPassedByPlayMode");
|
||||||
FOREACH_PlayMode( pm )
|
FOREACH_ENUM( PlayMode, pm )
|
||||||
{
|
{
|
||||||
/* Don't save unplayed PlayModes. */
|
/* Don't save unplayed PlayModes. */
|
||||||
if( !m_iNumStagesPassedByPlayMode[pm] )
|
if( !m_iNumStagesPassedByPlayMode[pm] )
|
||||||
@@ -1150,7 +1150,7 @@ XNode* Profile::SaveGeneralDataCreateNode() const
|
|||||||
|
|
||||||
{
|
{
|
||||||
XNode* pNumStagesPassedByGrade = pGeneralDataNode->AppendChild("NumStagesPassedByGrade");
|
XNode* pNumStagesPassedByGrade = pGeneralDataNode->AppendChild("NumStagesPassedByGrade");
|
||||||
FOREACH_Grade( g )
|
FOREACH_ENUM( Grade, g )
|
||||||
{
|
{
|
||||||
if( !m_iNumStagesPassedByGrade[g] )
|
if( !m_iNumStagesPassedByGrade[g] )
|
||||||
continue;
|
continue;
|
||||||
@@ -1263,7 +1263,7 @@ void Profile::LoadGeneralDataFromNode( const XNode* pNode )
|
|||||||
{
|
{
|
||||||
const XNode* pNumSongsPlayedByPlayMode = pNode->GetChild("NumSongsPlayedByPlayMode");
|
const XNode* pNumSongsPlayedByPlayMode = pNode->GetChild("NumSongsPlayedByPlayMode");
|
||||||
if( pNumSongsPlayedByPlayMode )
|
if( pNumSongsPlayedByPlayMode )
|
||||||
FOREACH_PlayMode( pm )
|
FOREACH_ENUM( PlayMode, pm )
|
||||||
pNumSongsPlayedByPlayMode->GetChildValue( PlayModeToString(pm), m_iNumSongsPlayedByPlayMode[pm] );
|
pNumSongsPlayedByPlayMode->GetChildValue( PlayModeToString(pm), m_iNumSongsPlayedByPlayMode[pm] );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1290,7 +1290,7 @@ void Profile::LoadGeneralDataFromNode( const XNode* pNode )
|
|||||||
{
|
{
|
||||||
const XNode* pNumSongsPlayedByDifficulty = pNode->GetChild("NumSongsPlayedByDifficulty");
|
const XNode* pNumSongsPlayedByDifficulty = pNode->GetChild("NumSongsPlayedByDifficulty");
|
||||||
if( pNumSongsPlayedByDifficulty )
|
if( pNumSongsPlayedByDifficulty )
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
pNumSongsPlayedByDifficulty->GetChildValue( DifficultyToString(dc), m_iNumSongsPlayedByDifficulty[dc] );
|
pNumSongsPlayedByDifficulty->GetChildValue( DifficultyToString(dc), m_iNumSongsPlayedByDifficulty[dc] );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1306,14 +1306,14 @@ void Profile::LoadGeneralDataFromNode( const XNode* pNode )
|
|||||||
{
|
{
|
||||||
const XNode* pNumStagesPassedByGrade = pNode->GetChild("NumStagesPassedByGrade");
|
const XNode* pNumStagesPassedByGrade = pNode->GetChild("NumStagesPassedByGrade");
|
||||||
if( pNumStagesPassedByGrade )
|
if( pNumStagesPassedByGrade )
|
||||||
FOREACH_Grade( g )
|
FOREACH_ENUM( Grade, g )
|
||||||
pNumStagesPassedByGrade->GetChildValue( GradeToString(g), m_iNumStagesPassedByGrade[g] );
|
pNumStagesPassedByGrade->GetChildValue( GradeToString(g), m_iNumStagesPassedByGrade[g] );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const XNode* pNumStagesPassedByPlayMode = pNode->GetChild("NumStagesPassedByPlayMode");
|
const XNode* pNumStagesPassedByPlayMode = pNode->GetChild("NumStagesPassedByPlayMode");
|
||||||
if( pNumStagesPassedByPlayMode )
|
if( pNumStagesPassedByPlayMode )
|
||||||
FOREACH_PlayMode( pm )
|
FOREACH_ENUM( PlayMode, pm )
|
||||||
pNumStagesPassedByPlayMode->GetChildValue( PlayModeToString(pm), m_iNumStagesPassedByPlayMode[pm] );
|
pNumStagesPassedByPlayMode->GetChildValue( PlayModeToString(pm), m_iNumStagesPassedByPlayMode[pm] );
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1533,7 +1533,7 @@ XNode* Profile::SaveCategoryScoresCreateNode() const
|
|||||||
|
|
||||||
XNode* pNode = new XNode( "CategoryScores" );
|
XNode* pNode = new XNode( "CategoryScores" );
|
||||||
|
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType,st )
|
||||||
{
|
{
|
||||||
// skip steps types that have never been played
|
// skip steps types that have never been played
|
||||||
if( pProfile->GetCategoryNumTimesPlayed( st ) == 0 )
|
if( pProfile->GetCategoryNumTimesPlayed( st ) == 0 )
|
||||||
@@ -1542,7 +1542,7 @@ XNode* Profile::SaveCategoryScoresCreateNode() const
|
|||||||
XNode* pStepsTypeNode = pNode->AppendChild( "StepsType" );
|
XNode* pStepsTypeNode = pNode->AppendChild( "StepsType" );
|
||||||
pStepsTypeNode->AppendAttr( "Type", GameManager::StepsTypeToString(st) );
|
pStepsTypeNode->AppendAttr( "Type", GameManager::StepsTypeToString(st) );
|
||||||
|
|
||||||
FOREACH_RankingCategory( rc )
|
FOREACH_ENUM( RankingCategory,rc )
|
||||||
{
|
{
|
||||||
// skip steps types/categories that have never been played
|
// skip steps types/categories that have never been played
|
||||||
if( pProfile->GetCategoryHighScoreList(st,rc).GetNumTimesPlayed() == 0 )
|
if( pProfile->GetCategoryHighScoreList(st,rc).GetNumTimesPlayed() == 0 )
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ RadarValues::RadarValues()
|
|||||||
|
|
||||||
void RadarValues::MakeUnknown()
|
void RadarValues::MakeUnknown()
|
||||||
{
|
{
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
m_Values.f[rc] = RADAR_VAL_UNKNOWN;
|
m_Values.f[rc] = RADAR_VAL_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RadarValues::Zero()
|
void RadarValues::Zero()
|
||||||
{
|
{
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
m_Values.f[rc] = 0;
|
m_Values.f[rc] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ XNode* RadarValues::CreateNode( bool bIncludeSimpleValues, bool bIncludeComplexV
|
|||||||
XNode* pNode = new XNode( "RadarValues" );
|
XNode* pNode = new XNode( "RadarValues" );
|
||||||
|
|
||||||
// TRICKY: Don't print a remainder for the integer values.
|
// TRICKY: Don't print a remainder for the integer values.
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
{
|
{
|
||||||
if( rc >= RadarCategory_TapsAndHolds )
|
if( rc >= RadarCategory_TapsAndHolds )
|
||||||
{
|
{
|
||||||
@@ -50,7 +50,7 @@ void RadarValues::LoadFromNode( const XNode* pNode )
|
|||||||
|
|
||||||
Zero();
|
Zero();
|
||||||
|
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
pNode->GetChildValue( RadarCategoryToString(rc), m_Values.f[rc] );
|
pNode->GetChildValue( RadarCategoryToString(rc), m_Values.f[rc] );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ void RadarValues::FromString( RString sRadarValues )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_RadarCategory(rc)
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
m_Values.f[rc] = StringToFloat( saValues[rc] );
|
m_Values.f[rc] = StringToFloat( saValues[rc] );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,13 +41,13 @@ struct RadarValues
|
|||||||
|
|
||||||
RadarValues& operator+=( const RadarValues& other )
|
RadarValues& operator+=( const RadarValues& other )
|
||||||
{
|
{
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
m_Values.f[rc] += other.m_Values.f[rc];
|
m_Values.f[rc] += other.m_Values.f[rc];
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
bool operator==( const RadarValues& other ) const
|
bool operator==( const RadarValues& other ) const
|
||||||
{
|
{
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
{
|
{
|
||||||
if( m_Values.f[rc] != other.m_Values.f[rc] )
|
if( m_Values.f[rc] != other.m_Values.f[rc] )
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -39,13 +39,13 @@ void ScoreDisplayLifeTime::Init( const PlayerState* pPlayerState, const PlayerSt
|
|||||||
this->AddChild( &m_textDeltaSeconds );
|
this->AddChild( &m_textDeltaSeconds );
|
||||||
ActorUtil::LoadAllCommandsAndOnCommand( m_textDeltaSeconds, sType );
|
ActorUtil::LoadAllCommandsAndOnCommand( m_textDeltaSeconds, sType );
|
||||||
|
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
{
|
{
|
||||||
const RString &sCommand = TapNoteScoreToString(tns);
|
const RString &sCommand = TapNoteScoreToString(tns);
|
||||||
if( !m_textDeltaSeconds.HasCommand( sCommand ) )
|
if( !m_textDeltaSeconds.HasCommand( sCommand ) )
|
||||||
ActorUtil::LoadCommand( m_textDeltaSeconds, sType, sCommand );
|
ActorUtil::LoadCommand( m_textDeltaSeconds, sType, sCommand );
|
||||||
}
|
}
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
{
|
{
|
||||||
const RString &sCommand = HoldNoteScoreToString(hns);
|
const RString &sCommand = HoldNoteScoreToString(hns);
|
||||||
if( !m_textDeltaSeconds.HasCommand( sCommand ) )
|
if( !m_textDeltaSeconds.HasCommand( sCommand ) )
|
||||||
|
|||||||
@@ -675,12 +675,12 @@ static HighScore MakeRandomHighScore( float fPercentDP )
|
|||||||
hs.SetPlayerGuid( Profile::MakeGuid() );
|
hs.SetPlayerGuid( Profile::MakeGuid() );
|
||||||
hs.SetMachineGuid( Profile::MakeGuid() );
|
hs.SetMachineGuid( Profile::MakeGuid() );
|
||||||
hs.SetProductID( RandomInt(10) );
|
hs.SetProductID( RandomInt(10) );
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
hs.SetTapNoteScore( tns, RandomInt(100) );
|
hs.SetTapNoteScore( tns, RandomInt(100) );
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
hs.SetHoldNoteScore( hns, RandomInt(100) );
|
hs.SetHoldNoteScore( hns, RandomInt(100) );
|
||||||
RadarValues rv;
|
RadarValues rv;
|
||||||
FOREACH_RadarCategory( rc )
|
FOREACH_ENUM( RadarCategory, rc )
|
||||||
rv.m_Values.f[rc] = randomf( 0, 1 );
|
rv.m_Values.f[rc] = randomf( 0, 1 );
|
||||||
hs.SetRadarValues( rv );
|
hs.SetRadarValues( rv );
|
||||||
|
|
||||||
|
|||||||
@@ -2765,7 +2765,7 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
|
|||||||
float fMusicSeconds = m_soundMusic.GetLengthSeconds();
|
float fMusicSeconds = m_soundMusic.GetLengthSeconds();
|
||||||
|
|
||||||
g_StepsInformation.rows[difficulty].choices.clear();
|
g_StepsInformation.rows[difficulty].choices.clear();
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
g_StepsInformation.rows[difficulty].choices.push_back( "|" + DifficultyToLocalizedString(pSteps->GetDifficulty()) );
|
g_StepsInformation.rows[difficulty].choices.push_back( "|" + DifficultyToLocalizedString(pSteps->GetDifficulty()) );
|
||||||
g_StepsInformation.rows[difficulty].iDefaultChoice = pSteps->GetDifficulty();
|
g_StepsInformation.rows[difficulty].iDefaultChoice = pSteps->GetDifficulty();
|
||||||
g_StepsInformation.rows[difficulty].bEnabled = (EDIT_MODE.GetValue() >= EditMode_Full);
|
g_StepsInformation.rows[difficulty].bEnabled = (EDIT_MODE.GetValue() >= EditMode_Full);
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ void ScreenJukebox::SetSong()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
vDifficultiesToShow.push_back( dc );
|
vDifficultiesToShow.push_back( dc );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ Song::~Song()
|
|||||||
void Song::DetachSteps()
|
void Song::DetachSteps()
|
||||||
{
|
{
|
||||||
m_vpSteps.clear();
|
m_vpSteps.clear();
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType, st )
|
||||||
m_vpStepsByType[st].clear();
|
m_vpStepsByType[st].clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ void Song::Reset()
|
|||||||
FOREACH( Steps*, m_vpSteps, s )
|
FOREACH( Steps*, m_vpSteps, s )
|
||||||
SAFE_DELETE( *s );
|
SAFE_DELETE( *s );
|
||||||
m_vpSteps.clear();
|
m_vpSteps.clear();
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType, st )
|
||||||
m_vpStepsByType[st].clear();
|
m_vpStepsByType[st].clear();
|
||||||
|
|
||||||
Song empty;
|
Song empty;
|
||||||
@@ -288,7 +288,7 @@ bool Song::ReloadFromSongDir( RString sDir )
|
|||||||
|
|
||||||
// Now we wipe out the new pointers, which were shallow copied and not deep copied...
|
// Now we wipe out the new pointers, which were shallow copied and not deep copied...
|
||||||
m_vpSteps.clear();
|
m_vpSteps.clear();
|
||||||
FOREACH_StepsType( i )
|
FOREACH_ENUM( StepsType, i )
|
||||||
m_vpStepsByType[i].clear();
|
m_vpStepsByType[i].clear();
|
||||||
|
|
||||||
// Then we copy as many Steps as possible on top of the old pointers.
|
// Then we copy as many Steps as possible on top of the old pointers.
|
||||||
@@ -889,7 +889,7 @@ void Song::AddAutoGenNotes()
|
|||||||
HasNotes[st] = true;
|
HasNotes[st] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_StepsType( stMissing )
|
FOREACH_ENUM( StepsType, stMissing )
|
||||||
{
|
{
|
||||||
if( HasNotes[stMissing] )
|
if( HasNotes[stMissing] )
|
||||||
continue;
|
continue;
|
||||||
@@ -907,7 +907,7 @@ void Song::AddAutoGenNotes()
|
|||||||
StepsType stBestMatch = StepsType_Invalid;
|
StepsType stBestMatch = StepsType_Invalid;
|
||||||
int iBestTrackDifference = INT_MAX;
|
int iBestTrackDifference = INT_MAX;
|
||||||
|
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType, st )
|
||||||
{
|
{
|
||||||
if( !HasNotes[st] )
|
if( !HasNotes[st] )
|
||||||
continue;
|
continue;
|
||||||
@@ -945,7 +945,7 @@ void Song::AutoGen( StepsType ntTo, StepsType ntFrom )
|
|||||||
|
|
||||||
void Song::RemoveAutoGenNotes()
|
void Song::RemoveAutoGenNotes()
|
||||||
{
|
{
|
||||||
FOREACH_StepsType(st)
|
FOREACH_ENUM( StepsType, st )
|
||||||
{
|
{
|
||||||
for( int j=m_vpStepsByType[st].size()-1; j>=0; j-- )
|
for( int j=m_vpStepsByType[st].size()-1; j>=0; j-- )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1300,13 +1300,13 @@ void SongManager::UpdatePopular()
|
|||||||
SongUtil::SortSongPointerArrayByTitle( apBestSongs );
|
SongUtil::SortSongPointerArrayByTitle( apBestSongs );
|
||||||
|
|
||||||
vector<Course*> apBestCourses[NUM_CourseType];
|
vector<Course*> apBestCourses[NUM_CourseType];
|
||||||
FOREACH_CourseType( ct )
|
FOREACH_ENUM( CourseType, ct )
|
||||||
{
|
{
|
||||||
GetCourses( ct, apBestCourses[ct], PREFSMAN->m_bAutogenGroupCourses );
|
GetCourses( ct, apBestCourses[ct], PREFSMAN->m_bAutogenGroupCourses );
|
||||||
CourseUtil::SortCoursePointerArrayByTitle( apBestCourses[ct] );
|
CourseUtil::SortCoursePointerArrayByTitle( apBestCourses[ct] );
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_ProfileSlot( i )
|
FOREACH_ENUM( ProfileSlot, i )
|
||||||
{
|
{
|
||||||
m_pPopularSongs[i] = apBestSongs;
|
m_pPopularSongs[i] = apBestSongs;
|
||||||
|
|
||||||
|
|||||||
@@ -228,9 +228,9 @@ Steps* SongUtil::GetClosestNotes( const Song *pSong, StepsType st, Difficulty dc
|
|||||||
* on this; see BMSLoader::SlideDuplicateDifficulties.) */
|
* on this; see BMSLoader::SlideDuplicateDifficulties.) */
|
||||||
void SongUtil::AdjustDuplicateSteps( Song *pSong )
|
void SongUtil::AdjustDuplicateSteps( Song *pSong )
|
||||||
{
|
{
|
||||||
FOREACH_StepsType( st )
|
FOREACH_ENUM( StepsType, st )
|
||||||
{
|
{
|
||||||
FOREACH_Difficulty( dc )
|
FOREACH_ENUM( Difficulty, dc )
|
||||||
{
|
{
|
||||||
if( dc == Difficulty_Edit )
|
if( dc == Difficulty_Edit )
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -170,9 +170,9 @@ void StageStats::CommitScores( bool bSummary )
|
|||||||
hs.SetPlayerGuid( PROFILEMAN->IsPersistentProfile(p) ? PROFILEMAN->GetProfile(p)->m_sGuid : RString("") );
|
hs.SetPlayerGuid( PROFILEMAN->IsPersistentProfile(p) ? PROFILEMAN->GetProfile(p)->m_sGuid : RString("") );
|
||||||
hs.SetMachineGuid( PROFILEMAN->GetMachineProfile()->m_sGuid );
|
hs.SetMachineGuid( PROFILEMAN->GetMachineProfile()->m_sGuid );
|
||||||
hs.SetProductID( PREFSMAN->m_iProductID );
|
hs.SetProductID( PREFSMAN->m_iProductID );
|
||||||
FOREACH_TapNoteScore( tns )
|
FOREACH_ENUM( TapNoteScore, tns )
|
||||||
hs.SetTapNoteScore( tns, m_player[p].m_iTapNoteScores[tns] );
|
hs.SetTapNoteScore( tns, m_player[p].m_iTapNoteScores[tns] );
|
||||||
FOREACH_HoldNoteScore( hns )
|
FOREACH_ENUM( HoldNoteScore, hns )
|
||||||
hs.SetHoldNoteScore( hns, m_player[p].m_iHoldNoteScores[hns] );
|
hs.SetHoldNoteScore( hns, m_player[p].m_iHoldNoteScores[hns] );
|
||||||
hs.SetRadarValues( m_player[p].m_radarActual );
|
hs.SetRadarValues( m_player[p].m_radarActual );
|
||||||
hs.SetLifeRemainingSeconds( m_player[p].m_fLifeRemainingSeconds );
|
hs.SetLifeRemainingSeconds( m_player[p].m_fLifeRemainingSeconds );
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ static float GetArcadePoints( const Profile *pProfile )
|
|||||||
{
|
{
|
||||||
float fAP = 0;
|
float fAP = 0;
|
||||||
|
|
||||||
FOREACH_Grade(g)
|
FOREACH_ENUM( Grade, g )
|
||||||
{
|
{
|
||||||
switch(g)
|
switch(g)
|
||||||
{
|
{
|
||||||
@@ -223,7 +223,7 @@ static float GetArcadePoints( const Profile *pProfile )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_PlayMode(pm)
|
FOREACH_ENUM( PlayMode, pm )
|
||||||
{
|
{
|
||||||
switch(pm)
|
switch(pm)
|
||||||
{
|
{
|
||||||
@@ -243,7 +243,7 @@ static float GetSongPoints( const Profile *pProfile )
|
|||||||
{
|
{
|
||||||
float fSP = 0;
|
float fSP = 0;
|
||||||
|
|
||||||
FOREACH_Grade(g)
|
FOREACH_ENUM( Grade, g )
|
||||||
{
|
{
|
||||||
switch( g )
|
switch( g )
|
||||||
{
|
{
|
||||||
@@ -261,7 +261,7 @@ static float GetSongPoints( const Profile *pProfile )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_PlayMode(pm)
|
FOREACH_ENUM( PlayMode, pm )
|
||||||
{
|
{
|
||||||
switch(pm)
|
switch(pm)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user