SongSortOrder -> SortOrder
save/restore last sort with Profile clean up GameConstants
This commit is contained in:
@@ -15,109 +15,106 @@
|
|||||||
#include "RageUtil.h"
|
#include "RageUtil.h"
|
||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
|
|
||||||
|
const static CString EMPTY_STRING;
|
||||||
|
|
||||||
CString RadarCategoryToString( RadarCategory cat )
|
#define XToString(X) \
|
||||||
{
|
const CString& X##ToString( X x ) \
|
||||||
switch( cat )
|
{ \
|
||||||
{
|
if( x == ARRAYSIZE(X##Names)+1 ) \
|
||||||
case RADAR_STREAM: return "stream";
|
return EMPTY_STRING; \
|
||||||
case RADAR_VOLTAGE: return "voltage";
|
ASSERT(unsigned(x) < ARRAYSIZE(X##Names)); \
|
||||||
case RADAR_AIR: return "air";
|
return X##Names[x]; \
|
||||||
case RADAR_FREEZE: return "freeze";
|
|
||||||
case RADAR_CHAOS: return "chaos";
|
|
||||||
case RADAR_NUM_TAPS_AND_HOLDS: return "taps";
|
|
||||||
case RADAR_NUM_JUMPS: return "jumps";
|
|
||||||
case RADAR_NUM_HOLDS: return "holds";
|
|
||||||
case RADAR_NUM_MINES: return "mines";
|
|
||||||
case RADAR_NUM_HANDS: return "hands";
|
|
||||||
default: ASSERT(0); return ""; // invalid
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
CString DifficultyToString( Difficulty dc )
|
#define XToThemedString(X) \
|
||||||
{
|
CString X##ToThemedString( X x ) \
|
||||||
switch( dc )
|
{ \
|
||||||
{
|
return THEME->GetMetric( #X, X##ToString(x) ); \
|
||||||
case DIFFICULTY_BEGINNER: return "beginner";
|
|
||||||
case DIFFICULTY_EASY: return "easy";
|
|
||||||
case DIFFICULTY_MEDIUM: return "medium";
|
|
||||||
case DIFFICULTY_HARD: return "hard";
|
|
||||||
case DIFFICULTY_CHALLENGE: return "challenge";
|
|
||||||
case DIFFICULTY_EDIT: return "edit";
|
|
||||||
default: ASSERT(0); return ""; // invalid Difficulty
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
#define StringToX(X) \
|
||||||
|
X StringTo##X( const CString& s ) \
|
||||||
|
{ \
|
||||||
|
CString s2 = s; \
|
||||||
|
s2.MakeLower(); \
|
||||||
|
for( unsigned i = 0; i < ARRAYSIZE(X##Names); ++i ) \
|
||||||
|
if( !s2.CompareNoCase(X##Names[i]) ) \
|
||||||
|
return (X)i; \
|
||||||
|
return (X)(i+1); /*invalid*/ \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const CString RadarCategoryNames[NUM_RADAR_CATEGORIES] = {
|
||||||
|
"stream",
|
||||||
|
"voltage",
|
||||||
|
"air",
|
||||||
|
"freeze",
|
||||||
|
"chaos",
|
||||||
|
"taps",
|
||||||
|
"jumps",
|
||||||
|
"holds",
|
||||||
|
"mines",
|
||||||
|
"hands",
|
||||||
|
};
|
||||||
|
XToString( RadarCategory );
|
||||||
|
|
||||||
|
|
||||||
|
static const CString DifficultyNames[NUM_RADAR_CATEGORIES] = {
|
||||||
|
"beginner",
|
||||||
|
"easy",
|
||||||
|
"medium",
|
||||||
|
"hard",
|
||||||
|
"challenge",
|
||||||
|
"edit",
|
||||||
|
};
|
||||||
|
XToString( Difficulty );
|
||||||
|
|
||||||
/* We prefer the above names; recognize a number of others, too. (They'l
|
/* We prefer the above names; recognize a number of others, too. (They'l
|
||||||
* get normalized when written to SMs, etc.) */
|
* get normalized when written to SMs, etc.) */
|
||||||
Difficulty StringToDifficulty( CString sDC )
|
Difficulty StringToDifficulty( const CString& sDC )
|
||||||
{
|
{
|
||||||
sDC.MakeLower();
|
CString s2 = sDC;
|
||||||
|
s2.MakeLower();
|
||||||
if( sDC == "beginner" ) return DIFFICULTY_BEGINNER;
|
if( sDC == "beginner" ) return DIFFICULTY_BEGINNER;
|
||||||
else if( sDC == "easy" ) return DIFFICULTY_EASY;
|
else if( s2 == "easy" ) return DIFFICULTY_EASY;
|
||||||
else if( sDC == "basic" ) return DIFFICULTY_EASY;
|
else if( s2 == "basic" ) return DIFFICULTY_EASY;
|
||||||
else if( sDC == "light" ) return DIFFICULTY_EASY;
|
else if( s2 == "light" ) return DIFFICULTY_EASY;
|
||||||
else if( sDC == "medium" ) return DIFFICULTY_MEDIUM;
|
else if( s2 == "medium" ) return DIFFICULTY_MEDIUM;
|
||||||
else if( sDC == "another" ) return DIFFICULTY_MEDIUM;
|
else if( s2 == "another" ) return DIFFICULTY_MEDIUM;
|
||||||
else if( sDC == "trick" ) return DIFFICULTY_MEDIUM;
|
else if( s2 == "trick" ) return DIFFICULTY_MEDIUM;
|
||||||
else if( sDC == "standard" ) return DIFFICULTY_MEDIUM;
|
else if( s2 == "standard" ) return DIFFICULTY_MEDIUM;
|
||||||
else if( sDC == "difficult") return DIFFICULTY_MEDIUM;
|
else if( s2 == "difficult") return DIFFICULTY_MEDIUM;
|
||||||
else if( sDC == "hard" ) return DIFFICULTY_HARD;
|
else if( s2 == "hard" ) return DIFFICULTY_HARD;
|
||||||
else if( sDC == "ssr" ) return DIFFICULTY_HARD;
|
else if( s2 == "ssr" ) return DIFFICULTY_HARD;
|
||||||
else if( sDC == "maniac" ) return DIFFICULTY_HARD;
|
else if( s2 == "maniac" ) return DIFFICULTY_HARD;
|
||||||
else if( sDC == "heavy" ) return DIFFICULTY_HARD;
|
else if( s2 == "heavy" ) return DIFFICULTY_HARD;
|
||||||
else if( sDC == "smaniac" ) return DIFFICULTY_CHALLENGE;
|
else if( s2 == "smaniac" ) return DIFFICULTY_CHALLENGE;
|
||||||
else if( sDC == "challenge" ) return DIFFICULTY_CHALLENGE;
|
else if( s2 == "challenge" )return DIFFICULTY_CHALLENGE;
|
||||||
else if( sDC == "expert" ) return DIFFICULTY_CHALLENGE;
|
else if( s2 == "expert" ) return DIFFICULTY_CHALLENGE;
|
||||||
else if( sDC == "oni" ) return DIFFICULTY_CHALLENGE;
|
else if( s2 == "oni" ) return DIFFICULTY_CHALLENGE;
|
||||||
else if( sDC == "edit" ) return DIFFICULTY_EDIT;
|
else if( s2 == "edit" ) return DIFFICULTY_EDIT;
|
||||||
else return DIFFICULTY_INVALID;
|
else return DIFFICULTY_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CString CourseDifficultyToString( CourseDifficulty dc )
|
static const CString CourseDifficultyNames[NUM_COURSE_DIFFICULTIES] = {
|
||||||
{
|
"regular",
|
||||||
switch( dc )
|
"difficult",
|
||||||
{
|
};
|
||||||
case COURSE_DIFFICULTY_REGULAR: return "regular";
|
XToString( CourseDifficulty );
|
||||||
case COURSE_DIFFICULTY_DIFFICULT: return "difficult";
|
StringToX( CourseDifficulty );
|
||||||
default: ASSERT(0); return ""; // invalid Difficulty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We prefer the above names; recognize a number of others, too. (They'l
|
|
||||||
* get normalized when written to SMs, etc.) */
|
|
||||||
CourseDifficulty StringToCourseDifficulty( CString sDC )
|
|
||||||
{
|
|
||||||
sDC.MakeLower();
|
|
||||||
if( sDC == "regular" ) return COURSE_DIFFICULTY_REGULAR;
|
|
||||||
else if( sDC == "difficult" ) return COURSE_DIFFICULTY_DIFFICULT;
|
|
||||||
else return COURSE_DIFFICULTY_INVALID;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CString PlayModeToString( PlayMode pm )
|
static const CString PlayModeNames[NUM_PLAY_MODES] = {
|
||||||
{
|
"arcade",
|
||||||
switch( pm )
|
"oni",
|
||||||
{
|
"nonstop",
|
||||||
case PLAY_MODE_ARCADE: return "arcade";
|
"endless",
|
||||||
case PLAY_MODE_ONI: return "oni";
|
"battle",
|
||||||
case PLAY_MODE_NONSTOP: return "nonstop";
|
"rave",
|
||||||
case PLAY_MODE_ENDLESS: return "endless";
|
};
|
||||||
case PLAY_MODE_BATTLE: return "battle";
|
XToString( PlayMode );
|
||||||
case PLAY_MODE_RAVE: return "rave";
|
StringToX( PlayMode );
|
||||||
default: ASSERT(0); return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayMode StringToPlayMode( CString s )
|
|
||||||
{
|
|
||||||
for( int i=0; i<NUM_PLAY_MODES; i++ )
|
|
||||||
if( PlayModeToString((PlayMode)i).CompareNoCase(s) == 0 )
|
|
||||||
return (PlayMode)i;
|
|
||||||
return PLAY_MODE_INVALID;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RankingCategory AverageMeterToRankingCategory( float fAverageMeter )
|
RankingCategory AverageMeterToRankingCategory( float fAverageMeter )
|
||||||
@@ -128,39 +125,26 @@ RankingCategory AverageMeterToRankingCategory( float fAverageMeter )
|
|||||||
else return RANKING_D;
|
else return RANKING_D;
|
||||||
}
|
}
|
||||||
|
|
||||||
CString RankingCategoryToString( RankingCategory rc )
|
|
||||||
{
|
|
||||||
switch( rc )
|
|
||||||
{
|
|
||||||
case RANKING_A: return "A";
|
|
||||||
case RANKING_B: return "B";
|
|
||||||
case RANKING_C: return "C";
|
|
||||||
case RANKING_D: return "D";
|
|
||||||
default: FAIL_M( ssprintf("%i", rc) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RankingCategory StringToRankingCategory( CString rc )
|
static const CString RankingCategoryNames[NUM_RANKING_CATEGORIES] = {
|
||||||
{
|
"a",
|
||||||
if( rc == "A" ) return RANKING_A;
|
"b",
|
||||||
if( rc == "B" ) return RANKING_B;
|
"c",
|
||||||
if( rc == "C" ) return RANKING_C;
|
"d",
|
||||||
if( rc == "D" ) return RANKING_D;
|
};
|
||||||
return RANKING_INVALID;
|
XToString( RankingCategory );
|
||||||
}
|
StringToX( RankingCategory );
|
||||||
|
|
||||||
CString CoinModeToString( CoinMode cm )
|
|
||||||
{
|
|
||||||
switch( cm )
|
|
||||||
{
|
|
||||||
case COIN_HOME: return "home";
|
|
||||||
case COIN_PAY: return "pay";
|
|
||||||
case COIN_FREE: return "free";
|
|
||||||
default: ASSERT(0); return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *SongSortOrderNames[NUM_SORT_ORDERS] = {
|
static const CString CoinModeNames[NUM_COIN_MODES] = {
|
||||||
|
"home",
|
||||||
|
"pay",
|
||||||
|
"free",
|
||||||
|
};
|
||||||
|
XToString( CoinMode );
|
||||||
|
|
||||||
|
|
||||||
|
static const CString SortOrderNames[NUM_SORT_ORDERS] = {
|
||||||
"PREFERRED",
|
"PREFERRED",
|
||||||
"GROUP",
|
"GROUP",
|
||||||
"TITLE",
|
"TITLE",
|
||||||
@@ -180,78 +164,33 @@ static const char *SongSortOrderNames[NUM_SORT_ORDERS] = {
|
|||||||
"ENDLESS",
|
"ENDLESS",
|
||||||
"ROULETTE"
|
"ROULETTE"
|
||||||
};
|
};
|
||||||
|
XToString( SortOrder );
|
||||||
CString SongSortOrderToString( SongSortOrder so )
|
StringToX( SortOrder );
|
||||||
{
|
|
||||||
ASSERT(so < NUM_SORT_ORDERS);
|
|
||||||
return SongSortOrderNames[so];
|
|
||||||
}
|
|
||||||
|
|
||||||
SongSortOrder StringToSongSortOrder( CString str )
|
|
||||||
{
|
|
||||||
for( unsigned i = 0; i < NUM_SORT_ORDERS; ++i)
|
|
||||||
if( !str.CompareNoCase(SongSortOrderNames[i]) )
|
|
||||||
return (SongSortOrder)i;
|
|
||||||
|
|
||||||
return SORT_INVALID;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CString TapNoteScoreToString( TapNoteScore tns )
|
static const CString TapNoteScoreNames[NUM_TAP_NOTE_SCORES] = {
|
||||||
{
|
"None",
|
||||||
switch( tns )
|
"HitMine",
|
||||||
{
|
"Miss",
|
||||||
case TNS_NONE: return "None";
|
"Boo",
|
||||||
case TNS_HIT_MINE: return "HitMine";
|
"Good",
|
||||||
case TNS_MISS: return "Miss";
|
"Great",
|
||||||
case TNS_BOO: return "Boo";
|
"Perfect",
|
||||||
case TNS_GOOD: return "Good";
|
"Marvelous",
|
||||||
case TNS_GREAT: return "Great";
|
};
|
||||||
case TNS_PERFECT: return "Perfect";
|
XToString( TapNoteScore );
|
||||||
case TNS_MARVELOUS: return "Marvelous";
|
|
||||||
default: ASSERT(0); return ""; // invalid
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CString MemoryCardStateToString( MemoryCardState mcs )
|
|
||||||
{
|
|
||||||
switch( mcs )
|
|
||||||
{
|
|
||||||
case MEMORY_CARD_STATE_READY: return "ready";
|
|
||||||
case MEMORY_CARD_STATE_TOO_LATE: return "late";
|
|
||||||
case MEMORY_CARD_STATE_WRITE_ERROR: return "error";
|
|
||||||
case MEMORY_CARD_STATE_NO_CARD: return "none";
|
|
||||||
default: ASSERT(0); return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
static const CString MemoryCardStateNames[NUM_MEMORY_CARD_STATES] = {
|
||||||
#define XToString(X) \
|
"ready",
|
||||||
CString X##ToString( X x ) \
|
"late",
|
||||||
{ \
|
"error",
|
||||||
ASSERT(unsigned(x) < ARRAYSIZE(X##Names)); \
|
"none",
|
||||||
return X##Names[x]; \
|
};
|
||||||
}
|
XToString( MemoryCardState );
|
||||||
|
|
||||||
#define XToThemedString(X) \
|
|
||||||
CString X##ToThemedString( X x ) \
|
|
||||||
{ \
|
|
||||||
return THEME->GetMetric( #X, X##ToString(x) ); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define StringToX(X) \
|
|
||||||
X StringTo##X( CString s ) \
|
|
||||||
{ \
|
|
||||||
unsigned i; \
|
|
||||||
for( i = 0; i < ARRAYSIZE(X##Names); ++i ) \
|
|
||||||
if( !s.CompareNoCase(X##Names[i]) ) \
|
|
||||||
return (X)i; \
|
|
||||||
return (X)i; \
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static const char *PerDifficultyAwardNames[NUM_PER_DIFFICULTY_AWARDS] = {
|
static const CString PerDifficultyAwardNames[NUM_PER_DIFFICULTY_AWARDS] = {
|
||||||
"FullComboGreats",
|
"FullComboGreats",
|
||||||
"FullComboPerfects",
|
"FullComboPerfects",
|
||||||
"FullComboMarvelouses",
|
"FullComboMarvelouses",
|
||||||
@@ -261,15 +200,16 @@ static const char *PerDifficultyAwardNames[NUM_PER_DIFFICULTY_AWARDS] = {
|
|||||||
"Greats90Percent",
|
"Greats90Percent",
|
||||||
"Greats100Percent",
|
"Greats100Percent",
|
||||||
};
|
};
|
||||||
|
|
||||||
XToString( PerDifficultyAward );
|
XToString( PerDifficultyAward );
|
||||||
XToThemedString( PerDifficultyAward );
|
XToThemedString( PerDifficultyAward );
|
||||||
StringToX( PerDifficultyAward );
|
StringToX( PerDifficultyAward );
|
||||||
|
|
||||||
// The number is not at the front so that these strings can be used as XML entity names
|
|
||||||
// The number is not at the back so that "1000" and "10000" don't conflict when
|
// Numbers are intentially not at the front of these strings so that the
|
||||||
// searching for theme elements.
|
// strings can be used as XML entity names.
|
||||||
static const char *PeakComboAwardNames[NUM_PEAK_COMBO_AWARDS] = {
|
// Numbers are intentially not at the back so that "1000" and "10000" don't
|
||||||
|
// conflict when searching for theme elements.
|
||||||
|
static const CString PeakComboAwardNames[NUM_PEAK_COMBO_AWARDS] = {
|
||||||
"Peak1000Combo",
|
"Peak1000Combo",
|
||||||
"Peak2000Combo",
|
"Peak2000Combo",
|
||||||
"Peak3000Combo",
|
"Peak3000Combo",
|
||||||
@@ -281,7 +221,6 @@ static const char *PeakComboAwardNames[NUM_PEAK_COMBO_AWARDS] = {
|
|||||||
"Peak9000Combo",
|
"Peak9000Combo",
|
||||||
"Peak10000Combo",
|
"Peak10000Combo",
|
||||||
};
|
};
|
||||||
|
|
||||||
XToString( PeakComboAward );
|
XToString( PeakComboAward );
|
||||||
XToThemedString( PeakComboAward );
|
XToThemedString( PeakComboAward );
|
||||||
StringToX( PeakComboAward );
|
StringToX( PeakComboAward );
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ enum RadarCategory
|
|||||||
};
|
};
|
||||||
#define FOREACH_RadarCategory( rc ) FOREACH_ENUM( RadarCategory, NUM_RADAR_CATEGORIES, rc )
|
#define FOREACH_RadarCategory( rc ) FOREACH_ENUM( RadarCategory, NUM_RADAR_CATEGORIES, rc )
|
||||||
|
|
||||||
CString RadarCategoryToString( RadarCategory cat );
|
const CString& RadarCategoryToString( RadarCategory cat );
|
||||||
|
|
||||||
struct RadarValues
|
struct RadarValues
|
||||||
{
|
{
|
||||||
@@ -99,8 +99,8 @@ enum Difficulty
|
|||||||
};
|
};
|
||||||
#define FOREACH_Difficulty( dc ) FOREACH_ENUM( Difficulty, NUM_DIFFICULTIES, dc )
|
#define FOREACH_Difficulty( dc ) FOREACH_ENUM( Difficulty, NUM_DIFFICULTIES, dc )
|
||||||
|
|
||||||
CString DifficultyToString( Difficulty dc );
|
const CString& DifficultyToString( Difficulty dc );
|
||||||
Difficulty StringToDifficulty( CString sDC );
|
Difficulty StringToDifficulty( const CString& sDC );
|
||||||
|
|
||||||
|
|
||||||
enum CourseDifficulty
|
enum CourseDifficulty
|
||||||
@@ -112,8 +112,8 @@ enum CourseDifficulty
|
|||||||
};
|
};
|
||||||
#define FOREACH_CourseDifficulty( cd ) FOREACH_ENUM( CourseDifficulty, NUM_COURSE_DIFFICULTIES, cd )
|
#define FOREACH_CourseDifficulty( cd ) FOREACH_ENUM( CourseDifficulty, NUM_COURSE_DIFFICULTIES, cd )
|
||||||
|
|
||||||
CString CourseDifficultyToString( CourseDifficulty dc );
|
const CString& CourseDifficultyToString( CourseDifficulty dc );
|
||||||
CourseDifficulty StringToCourseDifficulty( CString sDC );
|
CourseDifficulty StringToCourseDifficulty( const CString& sDC );
|
||||||
|
|
||||||
|
|
||||||
enum StepsType
|
enum StepsType
|
||||||
@@ -166,13 +166,13 @@ enum PlayMode
|
|||||||
};
|
};
|
||||||
#define FOREACH_PlayMode( pm ) FOREACH_ENUM( PlayMode, NUM_PLAY_MODES, pm )
|
#define FOREACH_PlayMode( pm ) FOREACH_ENUM( PlayMode, NUM_PLAY_MODES, pm )
|
||||||
|
|
||||||
CString PlayModeToString( PlayMode pm );
|
const CString& PlayModeToString( PlayMode pm );
|
||||||
PlayMode StringToPlayMode( CString s );
|
PlayMode StringToPlayMode( const CString& s );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum SongSortOrder {
|
enum SortOrder {
|
||||||
SORT_PREFERRED,
|
SORT_PREFERRED,
|
||||||
SORT_GROUP,
|
SORT_GROUP,
|
||||||
SORT_TITLE,
|
SORT_TITLE,
|
||||||
@@ -194,13 +194,14 @@ enum SongSortOrder {
|
|||||||
NUM_SORT_ORDERS,
|
NUM_SORT_ORDERS,
|
||||||
SORT_INVALID
|
SORT_INVALID
|
||||||
};
|
};
|
||||||
const SongSortOrder MAX_SELECTABLE_SORT = (SongSortOrder)(SORT_ROULETTE-1);
|
const SortOrder MAX_SELECTABLE_SORT = (SortOrder)(SORT_ROULETTE-1);
|
||||||
|
|
||||||
#define FOREACH_SongSortOrder( so ) FOREACH_ENUM( SongSortOrder, NUM_SORT_ORDERS, so )
|
#define FOREACH_SortOrder( so ) FOREACH_ENUM( SortOrder, NUM_SORT_ORDERS, so )
|
||||||
|
|
||||||
CString SongSortOrderToString( SongSortOrder so );
|
const CString& SortOrderToString( SortOrder so );
|
||||||
SongSortOrder StringToSongSortOrder( CString str );
|
SortOrder StringToSortOrder( const CString& str );
|
||||||
|
|
||||||
|
inline bool IsSongSort( SortOrder so ) { return so >= SORT_PREFERRED && so <= SORT_CHALLENGE_METER; }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Scoring stuff
|
// Scoring stuff
|
||||||
@@ -219,7 +220,7 @@ enum TapNoteScore {
|
|||||||
};
|
};
|
||||||
#define FOREACH_TapNoteScore( tns ) FOREACH_ENUM( TapNoteScore, NUM_TAP_NOTE_SCORES, tns )
|
#define FOREACH_TapNoteScore( tns ) FOREACH_ENUM( TapNoteScore, NUM_TAP_NOTE_SCORES, tns )
|
||||||
|
|
||||||
CString TapNoteScoreToString( TapNoteScore tns );
|
const CString& TapNoteScoreToString( TapNoteScore tns );
|
||||||
|
|
||||||
//enum TapNoteTiming {
|
//enum TapNoteTiming {
|
||||||
// TNT_NONE,
|
// TNT_NONE,
|
||||||
@@ -262,7 +263,7 @@ enum MemoryCardState
|
|||||||
MEMORY_CARD_STATE_INVALID,
|
MEMORY_CARD_STATE_INVALID,
|
||||||
};
|
};
|
||||||
|
|
||||||
CString MemoryCardStateToString( MemoryCardState mcs );
|
const CString& MemoryCardStateToString( MemoryCardState mcs );
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -278,11 +279,11 @@ enum RankingCategory
|
|||||||
RANKING_INVALID
|
RANKING_INVALID
|
||||||
};
|
};
|
||||||
#define FOREACH_RankingCategory( rc ) FOREACH_ENUM( RankingCategory, NUM_RANKING_CATEGORIES, rc )
|
#define FOREACH_RankingCategory( rc ) FOREACH_ENUM( RankingCategory, NUM_RANKING_CATEGORIES, rc )
|
||||||
CString RankingCategoryToString( RankingCategory rc );
|
const CString& RankingCategoryToString( RankingCategory rc );
|
||||||
RankingCategory StringToRankingCategory( CString rc );
|
RankingCategory StringToRankingCategory( const CString& rc );
|
||||||
|
|
||||||
const CString RANKING_TO_FILL_IN_MARKER[NUM_PLAYERS] = {"#P1#","#P2#"};
|
const CString RANKING_TO_FILL_IN_MARKER[NUM_PLAYERS] = {"#P1#","#P2#"};
|
||||||
inline bool IsRankingToFillIn( CString sName ) { return !sName.empty() && sName[0]=='#'; }
|
inline bool IsRankingToFillIn( const CString& sName ) { return !sName.empty() && sName[0]=='#'; }
|
||||||
|
|
||||||
RankingCategory AverageMeterToRankingCategory( float fAverageMeter );
|
RankingCategory AverageMeterToRankingCategory( float fAverageMeter );
|
||||||
|
|
||||||
@@ -345,7 +346,7 @@ const int ITEM_NONE = -1;
|
|||||||
|
|
||||||
enum CoinMode { COIN_HOME, COIN_PAY, COIN_FREE, NUM_COIN_MODES };
|
enum CoinMode { COIN_HOME, COIN_PAY, COIN_FREE, NUM_COIN_MODES };
|
||||||
|
|
||||||
CString CoinModeToString( CoinMode cm );
|
const CString& CoinModeToString( CoinMode cm );
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -366,9 +367,9 @@ enum PerDifficultyAward
|
|||||||
PER_DIFFICULTY_AWARD_INVALID,
|
PER_DIFFICULTY_AWARD_INVALID,
|
||||||
};
|
};
|
||||||
#define FOREACH_PerDifficultyAward( pma ) FOREACH_ENUM( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS, pma )
|
#define FOREACH_PerDifficultyAward( pma ) FOREACH_ENUM( PerDifficultyAward, NUM_PER_DIFFICULTY_AWARDS, pma )
|
||||||
CString PerDifficultyAwardToString( PerDifficultyAward pma );
|
const CString& PerDifficultyAwardToString( PerDifficultyAward pma );
|
||||||
CString PerDifficultyAwardToThemedString( PerDifficultyAward pma );
|
CString PerDifficultyAwardToThemedString( PerDifficultyAward pma );
|
||||||
PerDifficultyAward StringToPerDifficultyAward( CString pma );
|
PerDifficultyAward StringToPerDifficultyAward( const CString& pma );
|
||||||
|
|
||||||
|
|
||||||
enum PeakComboAward
|
enum PeakComboAward
|
||||||
@@ -387,9 +388,9 @@ enum PeakComboAward
|
|||||||
PEAK_COMBO_AWARD_INVALID,
|
PEAK_COMBO_AWARD_INVALID,
|
||||||
};
|
};
|
||||||
#define FOREACH_PeakComboAward( pca ) FOREACH_ENUM( PeakComboAward, NUM_PEAK_COMBO_AWARDS, pca )
|
#define FOREACH_PeakComboAward( pca ) FOREACH_ENUM( PeakComboAward, NUM_PEAK_COMBO_AWARDS, pca )
|
||||||
CString PeakComboAwardToString( PeakComboAward pma );
|
const CString& PeakComboAwardToString( PeakComboAward pma );
|
||||||
CString PeakComboAwardToThemedString( PeakComboAward pma );
|
CString PeakComboAwardToThemedString( PeakComboAward pma );
|
||||||
PeakComboAward StringToPeakComboAward( CString pma );
|
PeakComboAward StringToPeakComboAward( const CString& pma );
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ void GameState::Reset()
|
|||||||
m_PreferredDifficulty[p] = DIFFICULTY_INVALID;
|
m_PreferredDifficulty[p] = DIFFICULTY_INVALID;
|
||||||
m_CourseDifficulty[p] = COURSE_DIFFICULTY_REGULAR;
|
m_CourseDifficulty[p] = COURSE_DIFFICULTY_REGULAR;
|
||||||
}
|
}
|
||||||
m_SongSortOrder = SORT_INVALID;
|
m_SortOrder = SORT_INVALID;
|
||||||
m_PlayMode = PLAY_MODE_INVALID;
|
m_PlayMode = PLAY_MODE_INVALID;
|
||||||
m_bEditing = false;
|
m_bEditing = false;
|
||||||
m_bDemonstrationOrJukebox = false;
|
m_bDemonstrationOrJukebox = false;
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public:
|
|||||||
CString m_sPreferredGroup; // GROUP_ALL_MUSIC denotes no preferred group
|
CString m_sPreferredGroup; // GROUP_ALL_MUSIC denotes no preferred group
|
||||||
bool m_bChangedFailType; // true if FailType was changed in the song options screen
|
bool m_bChangedFailType; // true if FailType was changed in the song options screen
|
||||||
Difficulty m_PreferredDifficulty[NUM_PLAYERS];
|
Difficulty m_PreferredDifficulty[NUM_PLAYERS];
|
||||||
SongSortOrder m_SongSortOrder; // used by MusicWheel
|
SortOrder m_SortOrder; // used by MusicWheel
|
||||||
bool m_bEditing; // NoteField does special stuff when this is true
|
bool m_bEditing; // NoteField does special stuff when this is true
|
||||||
bool m_bDemonstrationOrJukebox; // ScreenGameplay does special stuff when this is true
|
bool m_bDemonstrationOrJukebox; // ScreenGameplay does special stuff when this is true
|
||||||
bool m_bJukeboxUsesModifiers;
|
bool m_bJukeboxUsesModifiers;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ MusicSortDisplay::MusicSortDisplay()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void MusicSortDisplay::Set( SongSortOrder so )
|
void MusicSortDisplay::Set( SortOrder so )
|
||||||
{
|
{
|
||||||
Load( THEME->GetPathToG(ssprintf("MusicSortDisplay %s",SongSortOrderToString(so).c_str())) );
|
Load( THEME->GetPathToG(ssprintf("MusicSortDisplay %s",SortOrderToString(so).c_str())) );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class MusicSortDisplay : public Sprite
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MusicSortDisplay();
|
MusicSortDisplay();
|
||||||
void Set( SongSortOrder so );
|
void Set( SortOrder so );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
#include "UnlockSystem.h"
|
#include "UnlockSystem.h"
|
||||||
#include "ModeChoice.h"
|
#include "ModeChoice.h"
|
||||||
#include "ActorUtil.h"
|
#include "ActorUtil.h"
|
||||||
|
#include "ProfileManager.h"
|
||||||
|
|
||||||
|
|
||||||
#define FADE_SECONDS THEME->GetMetricF("MusicWheel","FadeSeconds")
|
#define FADE_SECONDS THEME->GetMetricF("MusicWheel","FadeSeconds")
|
||||||
@@ -72,7 +73,7 @@ CachedThemeMetricI NUM_WHEEL_ITEMS_METRIC ("MusicWheel","NumWheelItems");
|
|||||||
const int MAX_WHEEL_SOUND_SPEED = 15;
|
const int MAX_WHEEL_SOUND_SPEED = 15;
|
||||||
|
|
||||||
|
|
||||||
static const SongSortOrder SortOrder[] =
|
static const SortOrder SORT_ORDERS[] =
|
||||||
{
|
{
|
||||||
SORT_GROUP,
|
SORT_GROUP,
|
||||||
SORT_TITLE,
|
SORT_TITLE,
|
||||||
@@ -130,7 +131,7 @@ void MusicWheel::Load()
|
|||||||
|
|
||||||
|
|
||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
m_LastSongSortOrder = SORT_INVALID;
|
m_LastSortOrder = SORT_INVALID;
|
||||||
|
|
||||||
m_WheelState = STATE_SELECTING_MUSIC;
|
m_WheelState = STATE_SELECTING_MUSIC;
|
||||||
m_fTimeLeftInState = 0;
|
m_fTimeLeftInState = 0;
|
||||||
@@ -172,16 +173,32 @@ void MusicWheel::Load()
|
|||||||
GAMESTATE->m_SongOptions = so;
|
GAMESTATE->m_SongOptions = so;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( GAMESTATE->m_SongSortOrder == SORT_INVALID )
|
if( GAMESTATE->m_SortOrder == SORT_INVALID )
|
||||||
{
|
{
|
||||||
switch( GAMESTATE->m_PlayMode )
|
switch( GAMESTATE->m_PlayMode )
|
||||||
{
|
{
|
||||||
case PLAY_MODE_ONI: GAMESTATE->m_SongSortOrder = SORT_ONI_COURSES; break;
|
case PLAY_MODE_ONI: GAMESTATE->m_SortOrder = SORT_ONI_COURSES; break;
|
||||||
case PLAY_MODE_NONSTOP: GAMESTATE->m_SongSortOrder = SORT_NONSTOP_COURSES; break;
|
case PLAY_MODE_NONSTOP: GAMESTATE->m_SortOrder = SORT_NONSTOP_COURSES; break;
|
||||||
case PLAY_MODE_ENDLESS: GAMESTATE->m_SongSortOrder = SORT_ENDLESS_COURSES; break;
|
case PLAY_MODE_ENDLESS: GAMESTATE->m_SortOrder = SORT_ENDLESS_COURSES; break;
|
||||||
default:
|
default:
|
||||||
GAMESTATE->m_SongSortOrder = StringToSongSortOrder( DEFAULT_SORT );
|
// look for a player's saved sort
|
||||||
ASSERT( GAMESTATE->m_SongSortOrder != SORT_INVALID );
|
FOREACH_HumanPlayer( pn )
|
||||||
|
{
|
||||||
|
if( PROFILEMAN->IsUsingProfile(pn) )
|
||||||
|
{
|
||||||
|
GAMESTATE->m_SortOrder = PROFILEMAN->GetProfile(pn)->m_SortOrder;
|
||||||
|
if( GAMESTATE->m_SortOrder != SORT_INVALID ) // we found one
|
||||||
|
break; // stop searching
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no player preferred sort, fall back to theme default
|
||||||
|
if( GAMESTATE->m_SortOrder == SORT_INVALID )
|
||||||
|
{
|
||||||
|
GAMESTATE->m_SortOrder = StringToSortOrder( DEFAULT_SORT );
|
||||||
|
ASSERT( GAMESTATE->m_SortOrder != SORT_INVALID );
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,7 +217,7 @@ void MusicWheel::Load()
|
|||||||
* the extra stage, so it knows to always display it. */
|
* the extra stage, so it knows to always display it. */
|
||||||
for( int so=0; so<NUM_SORT_ORDERS; so++ )
|
for( int so=0; so<NUM_SORT_ORDERS; so++ )
|
||||||
{
|
{
|
||||||
BuildWheelItemDatas( m_WheelItemDatas[so], SongSortOrder(so) );
|
BuildWheelItemDatas( m_WheelItemDatas[so], SortOrder(so) );
|
||||||
times += ssprintf( "%i:%.3f ", so, timer.GetDeltaTime() );
|
times += ssprintf( "%i:%.3f ", so, timer.GetDeltaTime() );
|
||||||
}
|
}
|
||||||
LOG->Trace( "took: %s", times.c_str() );
|
LOG->Trace( "took: %s", times.c_str() );
|
||||||
@@ -238,7 +255,7 @@ bool MusicWheel::SelectSongOrCourse()
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Select the first selectable song based on the sort order...
|
// Select the first selectable song based on the sort order...
|
||||||
vector<WheelItemData> &wiWheelItems = m_WheelItemDatas[GAMESTATE->m_SongSortOrder];
|
vector<WheelItemData> &wiWheelItems = m_WheelItemDatas[GAMESTATE->m_SortOrder];
|
||||||
for( unsigned i = 0; i < wiWheelItems.size(); i++ )
|
for( unsigned i = 0; i < wiWheelItems.size(); i++ )
|
||||||
{
|
{
|
||||||
if( wiWheelItems[i].m_pSong )
|
if( wiWheelItems[i].m_pSong )
|
||||||
@@ -259,7 +276,7 @@ bool MusicWheel::SelectSong( Song *p )
|
|||||||
GAMESTATE->m_pCurSong = p;
|
GAMESTATE->m_pCurSong = p;
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
vector<WheelItemData> &from = m_WheelItemDatas[GAMESTATE->m_SongSortOrder];
|
vector<WheelItemData> &from = m_WheelItemDatas[GAMESTATE->m_SortOrder];
|
||||||
for( i=0; i<from.size(); i++ )
|
for( i=0; i<from.size(); i++ )
|
||||||
{
|
{
|
||||||
if( from[i].m_pSong == p )
|
if( from[i].m_pSong == p )
|
||||||
@@ -289,7 +306,7 @@ bool MusicWheel::SelectCourse( Course *p )
|
|||||||
GAMESTATE->m_pCurCourse = p;
|
GAMESTATE->m_pCurCourse = p;
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
vector<WheelItemData> &from = m_WheelItemDatas[GAMESTATE->m_SongSortOrder];
|
vector<WheelItemData> &from = m_WheelItemDatas[GAMESTATE->m_SortOrder];
|
||||||
for( i=0; i<from.size(); i++ )
|
for( i=0; i<from.size(); i++ )
|
||||||
{
|
{
|
||||||
if( from[i].m_pCourse == p )
|
if( from[i].m_pCourse == p )
|
||||||
@@ -312,16 +329,16 @@ bool MusicWheel::SelectCourse( Course *p )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MusicWheel::SelectSort( SongSortOrder so )
|
bool MusicWheel::SelectSort( SortOrder so )
|
||||||
{
|
{
|
||||||
if(so == SORT_INVALID)
|
if(so == SORT_INVALID)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
vector<WheelItemData> &from = m_WheelItemDatas[GAMESTATE->m_SongSortOrder];
|
vector<WheelItemData> &from = m_WheelItemDatas[GAMESTATE->m_SortOrder];
|
||||||
for( i=0; i<from.size(); i++ )
|
for( i=0; i<from.size(); i++ )
|
||||||
{
|
{
|
||||||
if( from[i].m_SongSortOrder != so )
|
if( from[i].m_SortOrder != so )
|
||||||
continue;
|
continue;
|
||||||
if( !from[i].m_Action.DescribesCurrentModeForAllPlayers() )
|
if( !from[i].m_Action.DescribesCurrentModeForAllPlayers() )
|
||||||
continue;
|
continue;
|
||||||
@@ -336,7 +353,7 @@ bool MusicWheel::SelectSort( SongSortOrder so )
|
|||||||
|
|
||||||
for( i=0; i<m_CurWheelItemData.size(); i++ )
|
for( i=0; i<m_CurWheelItemData.size(); i++ )
|
||||||
{
|
{
|
||||||
if( m_CurWheelItemData[i]->m_SongSortOrder != so )
|
if( m_CurWheelItemData[i]->m_SortOrder != so )
|
||||||
continue;
|
continue;
|
||||||
if( !m_CurWheelItemData[i]->m_Action.DescribesCurrentModeForAllPlayers() )
|
if( !m_CurWheelItemData[i]->m_Action.DescribesCurrentModeForAllPlayers() )
|
||||||
continue;
|
continue;
|
||||||
@@ -347,7 +364,7 @@ bool MusicWheel::SelectSort( SongSortOrder so )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MusicWheel::GetSongList(vector<Song*> &arraySongs, SongSortOrder so, CString sPreferredGroup )
|
void MusicWheel::GetSongList(vector<Song*> &arraySongs, SortOrder so, CString sPreferredGroup )
|
||||||
{
|
{
|
||||||
vector<Song*> apAllSongs;
|
vector<Song*> apAllSongs;
|
||||||
// if( so==SORT_PREFERRED && GAMESTATE->m_sPreferredGroup!=GROUP_ALL_MUSIC)
|
// if( so==SORT_PREFERRED && GAMESTATE->m_sPreferredGroup!=GROUP_ALL_MUSIC)
|
||||||
@@ -393,7 +410,7 @@ void MusicWheel::GetSongList(vector<Song*> &arraySongs, SongSortOrder so, CStrin
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void MusicWheel::BuildWheelItemDatas( vector<WheelItemData> &arrayWheelItemDatas, SongSortOrder so )
|
void MusicWheel::BuildWheelItemDatas( vector<WheelItemData> &arrayWheelItemDatas, SortOrder so )
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
@@ -417,13 +434,13 @@ void MusicWheel::BuildWheelItemDatas( vector<WheelItemData> &arrayWheelItemDatas
|
|||||||
vector<CString> parts;
|
vector<CString> parts;
|
||||||
split( Actions[i], ";", parts );
|
split( Actions[i], ";", parts );
|
||||||
|
|
||||||
SongSortOrder so = SORT_GROUP;
|
SortOrder so = SORT_GROUP;
|
||||||
for( unsigned j = 0; j < parts.size(); ++j )
|
for( unsigned j = 0; j < parts.size(); ++j )
|
||||||
{
|
{
|
||||||
CStringArray asBits;
|
CStringArray asBits;
|
||||||
split( parts[j], ",", asBits );
|
split( parts[j], ",", asBits );
|
||||||
if( !asBits[0].CompareNoCase("sort") )
|
if( !asBits[0].CompareNoCase("sort") )
|
||||||
so = StringToSongSortOrder( asBits[1] );
|
so = StringToSortOrder( asBits[1] );
|
||||||
}
|
}
|
||||||
|
|
||||||
WheelItemData wid( TYPE_SORT, NULL, "", NULL, SORT_MENU_COLOR, so );
|
WheelItemData wid( TYPE_SORT, NULL, "", NULL, SORT_MENU_COLOR, so );
|
||||||
@@ -894,14 +911,14 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
|
|
||||||
SCREENMAN->PostMessageToTopScreen( SM_SortOrderChanged, 0 );
|
SCREENMAN->PostMessageToTopScreen( SM_SortOrderChanged, 0 );
|
||||||
|
|
||||||
SetOpenGroup(GetSectionNameFromSongAndSort( pPrevSelectedSong, GAMESTATE->m_SongSortOrder ));
|
SetOpenGroup(GetSectionNameFromSongAndSort( pPrevSelectedSong, GAMESTATE->m_SortOrder ));
|
||||||
|
|
||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Select the previously selected item
|
// Select the previously selected item
|
||||||
//
|
//
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
// Look for the last selected song or course
|
// Look for the last selected song or course
|
||||||
@@ -909,7 +926,7 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
break;
|
break;
|
||||||
case SORT_SORT_MENU:
|
case SORT_SORT_MENU:
|
||||||
case SORT_MODE_MENU:
|
case SORT_MODE_MENU:
|
||||||
SelectSort( m_LastSongSortOrder );
|
SelectSort( m_LastSortOrder );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -917,7 +934,7 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
// Change difficulty for sorts by meter
|
// Change difficulty for sorts by meter
|
||||||
//
|
//
|
||||||
Difficulty dc = DIFFICULTY_INVALID;
|
Difficulty dc = DIFFICULTY_INVALID;
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_EASY_METER: dc = DIFFICULTY_EASY; break;
|
case SORT_EASY_METER: dc = DIFFICULTY_EASY; break;
|
||||||
case SORT_MEDIUM_METER: dc = DIFFICULTY_MEDIUM; break;
|
case SORT_MEDIUM_METER: dc = DIFFICULTY_MEDIUM; break;
|
||||||
@@ -939,7 +956,7 @@ void MusicWheel::Update( float fDeltaTime )
|
|||||||
* back on the default song. From the CVS commit, this looks like it
|
* back on the default song. From the CVS commit, this looks like it
|
||||||
* was originally to fix ScreenOptionsMaster difficulty display, and
|
* was originally to fix ScreenOptionsMaster difficulty display, and
|
||||||
* isn't needed anymore ... -glenn */
|
* isn't needed anymore ... -glenn */
|
||||||
/* switch( GAMESTATE->m_SongSortOrder )
|
/* switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_PREFERRED:
|
case SORT_PREFERRED:
|
||||||
case SORT_GROUP:
|
case SORT_GROUP:
|
||||||
@@ -1130,10 +1147,10 @@ void MusicWheel::ChangeMusic(int dist)
|
|||||||
m_soundChangeMusic.Play();
|
m_soundChangeMusic.Play();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MusicWheel::ChangeSort( SongSortOrder new_so ) // return true if change successful
|
bool MusicWheel::ChangeSort( SortOrder new_so ) // return true if change successful
|
||||||
{
|
{
|
||||||
ASSERT( new_so < NUM_SORT_ORDERS );
|
ASSERT( new_so < NUM_SORT_ORDERS );
|
||||||
if( GAMESTATE->m_SongSortOrder == new_so )
|
if( GAMESTATE->m_SortOrder == new_so )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch( m_WheelState )
|
switch( m_WheelState )
|
||||||
@@ -1151,8 +1168,19 @@ bool MusicWheel::ChangeSort( SongSortOrder new_so ) // return true if change suc
|
|||||||
|
|
||||||
TweenOffScreen(true);
|
TweenOffScreen(true);
|
||||||
|
|
||||||
m_LastSongSortOrder = GAMESTATE->m_SongSortOrder;
|
m_LastSortOrder = GAMESTATE->m_SortOrder;
|
||||||
GAMESTATE->m_SongSortOrder = new_so;
|
GAMESTATE->m_SortOrder = new_so;
|
||||||
|
|
||||||
|
// Save the new sort to all profiles
|
||||||
|
// HACK: Don't save course sorts
|
||||||
|
if( IsSongSort(new_so) )
|
||||||
|
{
|
||||||
|
FOREACH_HumanPlayer( pn )
|
||||||
|
{
|
||||||
|
if( PROFILEMAN->IsUsingProfile(pn) )
|
||||||
|
PROFILEMAN->GetProfile(pn)->m_SortOrder = new_so;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_WheelState = STATE_FLYING_OFF_BEFORE_NEXT_SORT;
|
m_WheelState = STATE_FLYING_OFF_BEFORE_NEXT_SORT;
|
||||||
return true;
|
return true;
|
||||||
@@ -1161,7 +1189,7 @@ bool MusicWheel::ChangeSort( SongSortOrder new_so ) // return true if change suc
|
|||||||
bool MusicWheel::NextSort() // return true if change successful
|
bool MusicWheel::NextSort() // return true if change successful
|
||||||
{
|
{
|
||||||
// don't allow NextSort when on the sort menu or mode menu
|
// don't allow NextSort when on the sort menu or mode menu
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_SORT_MENU:
|
case SORT_SORT_MENU:
|
||||||
case SORT_MODE_MENU:
|
case SORT_MODE_MENU:
|
||||||
@@ -1170,15 +1198,15 @@ bool MusicWheel::NextSort() // return true if change successful
|
|||||||
|
|
||||||
// find the index of the current sort
|
// find the index of the current sort
|
||||||
int cur = 0;
|
int cur = 0;
|
||||||
while( cur < int(ARRAYSIZE(SortOrder)) && SortOrder[cur] != GAMESTATE->m_SongSortOrder )
|
while( cur < int(ARRAYSIZE(SORT_ORDERS)) && SORT_ORDERS[cur] != GAMESTATE->m_SortOrder )
|
||||||
++cur;
|
++cur;
|
||||||
|
|
||||||
// move to the next sort with wrapping
|
// move to the next sort with wrapping
|
||||||
++cur;
|
++cur;
|
||||||
wrap( cur, ARRAYSIZE(SortOrder) );
|
wrap( cur, ARRAYSIZE(SORT_ORDERS) );
|
||||||
|
|
||||||
// apply new sort
|
// apply new sort
|
||||||
SongSortOrder soNew = SortOrder[cur];
|
SortOrder soNew = SORT_ORDERS[cur];
|
||||||
return ChangeSort( soNew );
|
return ChangeSort( soNew );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1239,8 +1267,8 @@ bool MusicWheel::Select() // return true if this selection ends the screen
|
|||||||
return true;
|
return true;
|
||||||
case TYPE_SORT:
|
case TYPE_SORT:
|
||||||
m_CurWheelItemData[m_iSelection]->m_Action.ApplyToAllPlayers();
|
m_CurWheelItemData[m_iSelection]->m_Action.ApplyToAllPlayers();
|
||||||
LOG->Trace("New sort order selected: %s - %d", m_CurWheelItemData[m_iSelection]->m_sLabel.c_str(), m_CurWheelItemData[m_iSelection]->m_SongSortOrder );
|
LOG->Trace("New sort order selected: %s - %d", m_CurWheelItemData[m_iSelection]->m_sLabel.c_str(), m_CurWheelItemData[m_iSelection]->m_SortOrder );
|
||||||
ChangeSort( m_CurWheelItemData[m_iSelection]->m_SongSortOrder );
|
ChangeSort( m_CurWheelItemData[m_iSelection]->m_SortOrder );
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
@@ -1254,7 +1282,7 @@ void MusicWheel::StartRoulette()
|
|||||||
m_Moving = 1;
|
m_Moving = 1;
|
||||||
m_TimeBeforeMovingBegins = 0;
|
m_TimeBeforeMovingBegins = 0;
|
||||||
m_SpinSpeed = 1.0f/ROULETTE_SWITCH_SECONDS;
|
m_SpinSpeed = 1.0f/ROULETTE_SWITCH_SECONDS;
|
||||||
SetOpenGroup("", SongSortOrder(SORT_ROULETTE));
|
SetOpenGroup("", SortOrder(SORT_ROULETTE));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MusicWheel::StartRandom()
|
void MusicWheel::StartRandom()
|
||||||
@@ -1265,7 +1293,7 @@ void MusicWheel::StartRandom()
|
|||||||
RandomGen rnd;
|
RandomGen rnd;
|
||||||
random_shuffle( m_WheelItemDatas[SORT_ROULETTE].begin(), m_WheelItemDatas[SORT_ROULETTE].end(), rnd );
|
random_shuffle( m_WheelItemDatas[SORT_ROULETTE].begin(), m_WheelItemDatas[SORT_ROULETTE].end(), rnd );
|
||||||
|
|
||||||
SetOpenGroup("", SongSortOrder(SORT_ROULETTE));
|
SetOpenGroup("", SortOrder(SORT_ROULETTE));
|
||||||
|
|
||||||
m_Moving = -1;
|
m_Moving = -1;
|
||||||
m_TimeBeforeMovingBegins = 0;
|
m_TimeBeforeMovingBegins = 0;
|
||||||
@@ -1287,10 +1315,10 @@ void MusicWheel::StartRandom()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MusicWheel::SetOpenGroup(CString group, SongSortOrder so)
|
void MusicWheel::SetOpenGroup(CString group, SortOrder so)
|
||||||
{
|
{
|
||||||
if( so == SORT_INVALID)
|
if( so == SORT_INVALID)
|
||||||
so = GAMESTATE->m_SongSortOrder;
|
so = GAMESTATE->m_SortOrder;
|
||||||
|
|
||||||
m_sExpandedSectionName = group;
|
m_sExpandedSectionName = group;
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public:
|
|||||||
virtual void TweenOffScreen() { TweenOffScreen(false); }
|
virtual void TweenOffScreen() { TweenOffScreen(false); }
|
||||||
|
|
||||||
void Move(int n);
|
void Move(int n);
|
||||||
bool ChangeSort( SongSortOrder new_so ); // return true if change successful
|
bool ChangeSort( SortOrder new_so ); // return true if change successful
|
||||||
bool NextSort(); // return true if change successful
|
bool NextSort(); // return true if change successful
|
||||||
void StartRoulette();
|
void StartRoulette();
|
||||||
void StartRandom();
|
void StartRandom();
|
||||||
@@ -77,13 +77,13 @@ public:
|
|||||||
void RebuildMusicWheelItems();
|
void RebuildMusicWheelItems();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void GetSongList(vector<Song*> &arraySongs, SongSortOrder so, CString sPreferredGroup );
|
void GetSongList(vector<Song*> &arraySongs, SortOrder so, CString sPreferredGroup );
|
||||||
void BuildWheelItemDatas( vector<WheelItemData> &arrayWheelItems, SongSortOrder so );
|
void BuildWheelItemDatas( vector<WheelItemData> &arrayWheelItems, SortOrder so );
|
||||||
void SetOpenGroup(CString group, SongSortOrder so = SORT_INVALID);
|
void SetOpenGroup(CString group, SortOrder so = SORT_INVALID);
|
||||||
bool SelectSongOrCourse();
|
bool SelectSongOrCourse();
|
||||||
bool SelectSong( Song *p );
|
bool SelectSong( Song *p );
|
||||||
bool SelectCourse( Course *p );
|
bool SelectCourse( Course *p );
|
||||||
bool SelectSort( SongSortOrder so );
|
bool SelectSort( SortOrder so );
|
||||||
void ChangeMusic(int dist); /* +1 or -1 */
|
void ChangeMusic(int dist); /* +1 or -1 */
|
||||||
|
|
||||||
ScrollBar m_ScrollBar;
|
ScrollBar m_ScrollBar;
|
||||||
@@ -96,7 +96,7 @@ protected:
|
|||||||
|
|
||||||
int m_iSelection; // index into m_CurWheelItemData
|
int m_iSelection; // index into m_CurWheelItemData
|
||||||
CString m_sExpandedSectionName;
|
CString m_sExpandedSectionName;
|
||||||
SongSortOrder m_LastSongSortOrder;
|
SortOrder m_LastSortOrder;
|
||||||
|
|
||||||
int m_iSwitchesLeftInSpinDown;
|
int m_iSwitchesLeftInSpinDown;
|
||||||
float m_fLockedWheelVelocity;
|
float m_fLockedWheelVelocity;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
WheelItemData::WheelItemData( WheelItemType wit, Song* pSong, CString sSectionName, Course* pCourse, RageColor color, SongSortOrder so )
|
WheelItemData::WheelItemData( WheelItemType wit, Song* pSong, CString sSectionName, Course* pCourse, RageColor color, SortOrder so )
|
||||||
{
|
{
|
||||||
m_Type = wit;
|
m_Type = wit;
|
||||||
m_pSong = pSong;
|
m_pSong = pSong;
|
||||||
@@ -50,7 +50,7 @@ WheelItemData::WheelItemData( WheelItemType wit, Song* pSong, CString sSectionNa
|
|||||||
m_pCourse = pCourse;
|
m_pCourse = pCourse;
|
||||||
m_color = color;
|
m_color = color;
|
||||||
m_Flags = WheelNotifyIcon::Flags();
|
m_Flags = WheelNotifyIcon::Flags();
|
||||||
m_SongSortOrder = so;
|
m_SortOrder = so;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ enum WheelItemType { TYPE_SECTION, TYPE_SONG, TYPE_ROULETTE, TYPE_RANDOM, TYPE_C
|
|||||||
struct WheelItemData
|
struct WheelItemData
|
||||||
{
|
{
|
||||||
WheelItemData() {}
|
WheelItemData() {}
|
||||||
WheelItemData( WheelItemType wit, Song* pSong, CString sSectionName, Course* pCourse, RageColor color, SongSortOrder so );
|
WheelItemData( WheelItemType wit, Song* pSong, CString sSectionName, Course* pCourse, RageColor color, SortOrder so );
|
||||||
|
|
||||||
bool HasBanner() const;
|
bool HasBanner() const;
|
||||||
CString GetBanner() const;
|
CString GetBanner() const;
|
||||||
@@ -80,7 +80,7 @@ struct WheelItemData
|
|||||||
// for TYPE_SORT
|
// for TYPE_SORT
|
||||||
CString m_sLabel;
|
CString m_sLabel;
|
||||||
ModeChoice m_Action;
|
ModeChoice m_Action;
|
||||||
SongSortOrder m_SongSortOrder;
|
SortOrder m_SortOrder;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -344,7 +344,7 @@ void PaneDisplay::SetFromGameState()
|
|||||||
|
|
||||||
PaneModes PaneDisplay::GetMode() const
|
PaneModes PaneDisplay::GetMode() const
|
||||||
{
|
{
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_ALL_COURSES:
|
case SORT_ALL_COURSES:
|
||||||
case SORT_NONSTOP_COURSES:
|
case SORT_NONSTOP_COURSES:
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ void Profile::InitGeneralData()
|
|||||||
{
|
{
|
||||||
m_bUsingProfileDefaultModifiers = false;
|
m_bUsingProfileDefaultModifiers = false;
|
||||||
m_sDefaultModifiers = "";
|
m_sDefaultModifiers = "";
|
||||||
|
m_SortOrder = SORT_INVALID;
|
||||||
m_iTotalPlays = 0;
|
m_iTotalPlays = 0;
|
||||||
m_iTotalPlaySeconds = 0;
|
m_iTotalPlaySeconds = 0;
|
||||||
m_iTotalGameplaySeconds = 0;
|
m_iTotalGameplaySeconds = 0;
|
||||||
@@ -566,6 +567,7 @@ XNode* Profile::SaveGeneralDataCreateNode() const
|
|||||||
|
|
||||||
pGeneralDataNode->AppendChild( "UsingProfileDefaultModifiers", m_bUsingProfileDefaultModifiers );
|
pGeneralDataNode->AppendChild( "UsingProfileDefaultModifiers", m_bUsingProfileDefaultModifiers );
|
||||||
pGeneralDataNode->AppendChild( "DefaultModifiers", m_sDefaultModifiers );
|
pGeneralDataNode->AppendChild( "DefaultModifiers", m_sDefaultModifiers );
|
||||||
|
pGeneralDataNode->AppendChild( "SortOrder", SortOrderToString(m_SortOrder) );
|
||||||
pGeneralDataNode->AppendChild( "TotalPlays", m_iTotalPlays );
|
pGeneralDataNode->AppendChild( "TotalPlays", m_iTotalPlays );
|
||||||
pGeneralDataNode->AppendChild( "TotalPlaySeconds", m_iTotalPlaySeconds );
|
pGeneralDataNode->AppendChild( "TotalPlaySeconds", m_iTotalPlaySeconds );
|
||||||
pGeneralDataNode->AppendChild( "TotalGameplaySeconds", m_iTotalGameplaySeconds );
|
pGeneralDataNode->AppendChild( "TotalGameplaySeconds", m_iTotalGameplaySeconds );
|
||||||
@@ -700,6 +702,9 @@ void Profile::LoadGeneralDataFromNode( const XNode* pNode )
|
|||||||
|
|
||||||
pNode->GetChildValue( "UsingProfileDefaultModifiers", m_bUsingProfileDefaultModifiers );
|
pNode->GetChildValue( "UsingProfileDefaultModifiers", m_bUsingProfileDefaultModifiers );
|
||||||
pNode->GetChildValue( "DefaultModifiers", m_sDefaultModifiers );
|
pNode->GetChildValue( "DefaultModifiers", m_sDefaultModifiers );
|
||||||
|
CString sSortOrder;
|
||||||
|
pNode->GetChildValue( "SortOrder", sSortOrder );
|
||||||
|
m_SortOrder = StringToSortOrder( sSortOrder );
|
||||||
pNode->GetChildValue( "TotalPlays", m_iTotalPlays );
|
pNode->GetChildValue( "TotalPlays", m_iTotalPlays );
|
||||||
pNode->GetChildValue( "TotalPlaySeconds", m_iTotalPlaySeconds );
|
pNode->GetChildValue( "TotalPlaySeconds", m_iTotalPlaySeconds );
|
||||||
pNode->GetChildValue( "TotalGameplaySeconds", m_iTotalGameplaySeconds );
|
pNode->GetChildValue( "TotalGameplaySeconds", m_iTotalGameplaySeconds );
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ public:
|
|||||||
//
|
//
|
||||||
bool m_bUsingProfileDefaultModifiers;
|
bool m_bUsingProfileDefaultModifiers;
|
||||||
CString m_sDefaultModifiers;
|
CString m_sDefaultModifiers;
|
||||||
|
SortOrder m_SortOrder;
|
||||||
int m_iTotalPlays;
|
int m_iTotalPlays;
|
||||||
int m_iTotalPlaySeconds;
|
int m_iTotalPlaySeconds;
|
||||||
int m_iTotalGameplaySeconds;
|
int m_iTotalGameplaySeconds;
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ ScreenSelectMusic::ScreenSelectMusic( CString sClassName ) : Screen( sClassName
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_MusicSortDisplay.SetName( "SortIcon" );
|
m_MusicSortDisplay.SetName( "SortIcon" );
|
||||||
m_MusicSortDisplay.Set( GAMESTATE->m_SongSortOrder );
|
m_MusicSortDisplay.Set( GAMESTATE->m_SortOrder );
|
||||||
SET_XY( m_MusicSortDisplay );
|
SET_XY( m_MusicSortDisplay );
|
||||||
this->AddChild( &m_MusicSortDisplay );
|
this->AddChild( &m_MusicSortDisplay );
|
||||||
|
|
||||||
@@ -499,7 +499,7 @@ void ScreenSelectMusic::TweenOnScreen()
|
|||||||
TweenSongPartsOnScreen( true );
|
TweenSongPartsOnScreen( true );
|
||||||
TweenCoursePartsOnScreen( true );
|
TweenCoursePartsOnScreen( true );
|
||||||
|
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_ALL_COURSES:
|
case SORT_ALL_COURSES:
|
||||||
case SORT_NONSTOP_COURSES:
|
case SORT_NONSTOP_COURSES:
|
||||||
@@ -552,7 +552,7 @@ void ScreenSelectMusic::TweenOnScreen()
|
|||||||
|
|
||||||
void ScreenSelectMusic::TweenOffScreen()
|
void ScreenSelectMusic::TweenOffScreen()
|
||||||
{
|
{
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_ALL_COURSES:
|
case SORT_ALL_COURSES:
|
||||||
case SORT_NONSTOP_COURSES:
|
case SORT_NONSTOP_COURSES:
|
||||||
@@ -632,7 +632,7 @@ void ScreenSelectMusic::TweenScoreOnAndOffAfterChangeSort()
|
|||||||
m_sprHighScoreFrame[p].Command( SCORE_FRAME_SORT_CHANGE_COMMAND(p) );
|
m_sprHighScoreFrame[p].Command( SCORE_FRAME_SORT_CHANGE_COMMAND(p) );
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_ALL_COURSES:
|
case SORT_ALL_COURSES:
|
||||||
case SORT_NONSTOP_COURSES:
|
case SORT_NONSTOP_COURSES:
|
||||||
@@ -1498,9 +1498,9 @@ void ScreenSelectMusic::UpdateOptionsDisplays()
|
|||||||
|
|
||||||
void ScreenSelectMusic::SortOrderChanged()
|
void ScreenSelectMusic::SortOrderChanged()
|
||||||
{
|
{
|
||||||
m_MusicSortDisplay.Set( GAMESTATE->m_SongSortOrder );
|
m_MusicSortDisplay.Set( GAMESTATE->m_SortOrder );
|
||||||
|
|
||||||
switch( GAMESTATE->m_SongSortOrder )
|
switch( GAMESTATE->m_SortOrder )
|
||||||
{
|
{
|
||||||
case SORT_ALL_COURSES:
|
case SORT_ALL_COURSES:
|
||||||
case SORT_NONSTOP_COURSES:
|
case SORT_NONSTOP_COURSES:
|
||||||
|
|||||||
@@ -1393,7 +1393,7 @@ void SortSongPointerArrayByNumPlays( vector<Song*> &arraySongPointers, const Pro
|
|||||||
song_sort_val.clear();
|
song_sort_val.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
CString GetSectionNameFromSongAndSort( const Song* pSong, SongSortOrder so )
|
CString GetSectionNameFromSongAndSort( const Song* pSong, SortOrder so )
|
||||||
{
|
{
|
||||||
if( pSong == NULL )
|
if( pSong == NULL )
|
||||||
return "";
|
return "";
|
||||||
@@ -1488,7 +1488,7 @@ CString GetSectionNameFromSongAndSort( const Song* pSong, SongSortOrder so )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SortSongPointerArrayBySectionName( vector<Song*> &arraySongPointers, SongSortOrder so )
|
void SortSongPointerArrayBySectionName( vector<Song*> &arraySongPointers, SortOrder so )
|
||||||
{
|
{
|
||||||
for(unsigned i = 0; i < arraySongPointers.size(); ++i)
|
for(unsigned i = 0; i < arraySongPointers.size(); ++i)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -215,8 +215,8 @@ void SortSongPointerArrayByGroupAndTitle( vector<Song*> &arraySongPointers );
|
|||||||
void SortSongPointerArrayByNumPlays( vector<Song*> &arraySongPointers, ProfileSlot slot, bool bDescending );
|
void SortSongPointerArrayByNumPlays( vector<Song*> &arraySongPointers, ProfileSlot slot, bool bDescending );
|
||||||
void SortSongPointerArrayByNumPlays( vector<Song*> &arraySongPointers, const Profile* pProfile, bool bDescending );
|
void SortSongPointerArrayByNumPlays( vector<Song*> &arraySongPointers, const Profile* pProfile, bool bDescending );
|
||||||
void SortSongPointerArrayByMeter( vector<Song*> &arraySongPointers, Difficulty dc );
|
void SortSongPointerArrayByMeter( vector<Song*> &arraySongPointers, Difficulty dc );
|
||||||
CString GetSectionNameFromSongAndSort( const Song* pSong, SongSortOrder so );
|
CString GetSectionNameFromSongAndSort( const Song* pSong, SortOrder so );
|
||||||
void SortSongPointerArrayBySectionName( vector<Song*> &arraySongPointers, SongSortOrder so );
|
void SortSongPointerArrayBySectionName( vector<Song*> &arraySongPointers, SortOrder so );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user