cleanup:
"GroupName" -> "SongGroup" to make room for CourseGroup replace checks for "cvs" with a call to StripCvs() m_Rows -> m_pRows broadcast on preferred group changes
This commit is contained in:
@@ -19,11 +19,9 @@ void AnnouncerManager::GetAnnouncerNames( CStringArray& AddTo )
|
|||||||
{
|
{
|
||||||
GetDirListing( ANNOUNCERS_DIR+"*", AddTo, true );
|
GetDirListing( ANNOUNCERS_DIR+"*", AddTo, true );
|
||||||
|
|
||||||
// strip out the folder called "CVS" and EMPTY_ANNOUNCER_NAME
|
StripCvs( AddTo );
|
||||||
for( int i=AddTo.size()-1; i>=0; i-- )
|
|
||||||
if( !stricmp( AddTo[i], "cvs" ) )
|
|
||||||
AddTo.erase(AddTo.begin()+i, AddTo.begin()+i+1 );
|
|
||||||
|
|
||||||
|
// strip out the empty announcer folder
|
||||||
for( int i=AddTo.size()-1; i>=0; i-- )
|
for( int i=AddTo.size()-1; i>=0; i-- )
|
||||||
if( !stricmp( AddTo[i], EMPTY_ANNOUNCER_NAME ) )
|
if( !stricmp( AddTo[i], EMPTY_ANNOUNCER_NAME ) )
|
||||||
AddTo.erase(AddTo.begin()+i, AddTo.begin()+i+1 );
|
AddTo.erase(AddTo.begin()+i, AddTo.begin()+i+1 );
|
||||||
|
|||||||
@@ -100,9 +100,9 @@ void Banner::LoadMode()
|
|||||||
m_bScrolling = false;
|
m_bScrolling = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Banner::LoadFromGroup( CString sGroupName )
|
void Banner::LoadFromSongGroup( CString sSongGroup )
|
||||||
{
|
{
|
||||||
CString sGroupBannerPath = SONGMAN->GetGroupBannerPath( sGroupName );
|
CString sGroupBannerPath = SONGMAN->GetSongGroupBannerPath( sSongGroup );
|
||||||
if( sGroupBannerPath != "" ) Load( sGroupBannerPath );
|
if( sGroupBannerPath != "" ) Load( sGroupBannerPath );
|
||||||
else LoadFallback();
|
else LoadFallback();
|
||||||
m_bScrolling = false;
|
m_bScrolling = false;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public:
|
|||||||
void LoadFromSong( Song* pSong ); // NULL means no song
|
void LoadFromSong( Song* pSong ); // NULL means no song
|
||||||
void LoadAllMusic();
|
void LoadAllMusic();
|
||||||
void LoadMode();
|
void LoadMode();
|
||||||
void LoadFromGroup( CString sGroupName );
|
void LoadFromSongGroup( CString sSongGroup );
|
||||||
void LoadFromCourse( Course* pCourse );
|
void LoadFromCourse( Course* pCourse );
|
||||||
void LoadCardFromCharacter( Character* pCharacter );
|
void LoadCardFromCharacter( Character* pCharacter );
|
||||||
void LoadIconFromCharacter( Character* pCharacter );
|
void LoadIconFromCharacter( Character* pCharacter );
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ void SaveCatalogXml( LoadingWindow *loading_window )
|
|||||||
int iTotalSongs = 0;
|
int iTotalSongs = 0;
|
||||||
int iTotalSteps = 0;
|
int iTotalSteps = 0;
|
||||||
vector<CString> vsGroups;
|
vector<CString> vsGroups;
|
||||||
SONGMAN->GetGroupNames( vsGroups );
|
SONGMAN->GetSongGroupNames( vsGroups );
|
||||||
FOREACH_CONST( CString, vsGroups, sGroup )
|
FOREACH_CONST( CString, vsGroups, sGroup )
|
||||||
{
|
{
|
||||||
XNode* p1 = pNumSongsByGroup->AppendChild( "Group" );
|
XNode* p1 = pNumSongsByGroup->AppendChild( "Group" );
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ void Course::LoadFromCRSFile( CString sPath )
|
|||||||
LOG->Warn( "Course file '%s' contains a random_within_group entry '%s' that is invalid. "
|
LOG->Warn( "Course file '%s' contains a random_within_group entry '%s' that is invalid. "
|
||||||
"Song should be in the format '<group>/*'.",
|
"Song should be in the format '<group>/*'.",
|
||||||
sPath.c_str(), sSong.c_str());
|
sPath.c_str(), sSong.c_str());
|
||||||
if( !SONGMAN->DoesGroupExist(new_entry.group_name) )
|
if( !SONGMAN->DoesSongGroupExist(new_entry.group_name) )
|
||||||
{
|
{
|
||||||
/* XXX: We need a place to put "user warnings". This is too loud for info.txt--
|
/* XXX: We need a place to put "user warnings". This is too loud for info.txt--
|
||||||
* it obscures important warnings--and regular users never look there, anyway. */
|
* it obscures important warnings--and regular users never look there, anyway. */
|
||||||
@@ -545,9 +545,11 @@ void Course::AutogenEndlessFromGroup( CString sGroupName, Difficulty diff )
|
|||||||
{
|
{
|
||||||
m_sMainTitle = "All Songs";
|
m_sMainTitle = "All Songs";
|
||||||
// m_sBannerPath = ""; // XXX
|
// m_sBannerPath = ""; // XXX
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
m_sMainTitle = SONGMAN->ShortenGroupName( sGroupName );
|
m_sMainTitle = SONGMAN->ShortenGroupName( sGroupName );
|
||||||
m_sBannerPath = SONGMAN->GetGroupBannerPath( sGroupName );
|
m_sBannerPath = SONGMAN->GetSongGroupBannerPath( sGroupName );
|
||||||
}
|
}
|
||||||
|
|
||||||
// We want multiple songs, so we can try to prevent repeats during
|
// We want multiple songs, so we can try to prevent repeats during
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ EditCoursesSongMenu::EditCoursesSongMenu()
|
|||||||
m_soundChangeValue.Load( THEME->GetPathS("EditCoursesSongMenu","value") );
|
m_soundChangeValue.Load( THEME->GetPathS("EditCoursesSongMenu","value") );
|
||||||
|
|
||||||
// fill in data structures
|
// fill in data structures
|
||||||
SONGMAN->GetGroupNames( m_aGroups );
|
SONGMAN->GetSongGroupNames( m_aGroups );
|
||||||
|
|
||||||
m_SelectedRow = (Row)0;
|
m_SelectedRow = (Row)0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ static void GetSongsToShowForGroup( const CString &sGroup, vector<Song*> &vpSong
|
|||||||
static void GetGroupsToShow( vector<CString> &vsGroupsOut )
|
static void GetGroupsToShow( vector<CString> &vsGroupsOut )
|
||||||
{
|
{
|
||||||
vsGroupsOut.clear();
|
vsGroupsOut.clear();
|
||||||
SONGMAN->GetGroupNames( vsGroupsOut );
|
SONGMAN->GetSongGroupNames( vsGroupsOut );
|
||||||
for( int i = vsGroupsOut.size()-1; i>=0; i-- )
|
for( int i = vsGroupsOut.size()-1; i>=0; i-- )
|
||||||
{
|
{
|
||||||
const CString &sGroup = vsGroupsOut[i];
|
const CString &sGroup = vsGroupsOut[i];
|
||||||
@@ -320,7 +320,7 @@ void EditMenu::OnRowValueChanged( EditMenuRow row )
|
|||||||
{
|
{
|
||||||
case ROW_GROUP:
|
case ROW_GROUP:
|
||||||
m_textValue[ROW_GROUP].SetText( SONGMAN->ShortenGroupName(GetSelectedGroup()) );
|
m_textValue[ROW_GROUP].SetText( SONGMAN->ShortenGroupName(GetSelectedGroup()) );
|
||||||
m_GroupBanner.LoadFromGroup( GetSelectedGroup() );
|
m_GroupBanner.LoadFromSongGroup( GetSelectedGroup() );
|
||||||
m_GroupBanner.ScaleToClipped( GROUP_BANNER_WIDTH, GROUP_BANNER_HEIGHT );
|
m_GroupBanner.ScaleToClipped( GROUP_BANNER_WIDTH, GROUP_BANNER_HEIGHT );
|
||||||
m_pSongs.clear();
|
m_pSongs.clear();
|
||||||
GetSongsToShowForGroup( GetSelectedGroup(), m_pSongs );
|
GetSongsToShowForGroup( GetSelectedGroup(), m_pSongs );
|
||||||
|
|||||||
@@ -178,9 +178,9 @@ void FadingBanner::LoadMode()
|
|||||||
m_Banner[m_iIndexLatest].LoadMode();
|
m_Banner[m_iIndexLatest].LoadMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FadingBanner::LoadFromGroup( CString sGroupName )
|
void FadingBanner::LoadFromSongGroup( CString sSongGroup )
|
||||||
{
|
{
|
||||||
const CString sGroupBannerPath = SONGMAN->GetGroupBannerPath( sGroupName );
|
const CString sGroupBannerPath = SONGMAN->GetSongGroupBannerPath( sSongGroup );
|
||||||
LoadFromCachedBanner( sGroupBannerPath );
|
LoadFromCachedBanner( sGroupBannerPath );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public:
|
|||||||
void LoadFromSong( const Song* pSong ); // NULL means no song
|
void LoadFromSong( const Song* pSong ); // NULL means no song
|
||||||
void LoadAllMusic();
|
void LoadAllMusic();
|
||||||
void LoadMode();
|
void LoadMode();
|
||||||
void LoadFromGroup( CString sGroupName );
|
void LoadFromSongGroup( CString sSongGroup );
|
||||||
void LoadFromCourse( const Course* pCourse );
|
void LoadFromCourse( const Course* pCourse );
|
||||||
void LoadRoulette();
|
void LoadRoulette();
|
||||||
void LoadRandom();
|
void LoadRandom();
|
||||||
|
|||||||
@@ -761,7 +761,7 @@ void GameCommand::ApplySelf( const vector<PlayerNumber> &vpns ) const
|
|||||||
for( map<CString,CString>::const_iterator i = m_SetEnv.begin(); i != m_SetEnv.end(); i++ )
|
for( map<CString,CString>::const_iterator i = m_SetEnv.begin(); i != m_SetEnv.end(); i++ )
|
||||||
GAMESTATE->m_mapEnv[ i->first ] = i->second;
|
GAMESTATE->m_mapEnv[ i->first ] = i->second;
|
||||||
if( !m_sSongGroup.empty() )
|
if( !m_sSongGroup.empty() )
|
||||||
GAMESTATE->m_sPreferredSongGroup = m_sSongGroup;
|
GAMESTATE->m_sPreferredSongGroup.Set( m_sSongGroup );
|
||||||
if( m_SortOrder != SORT_INVALID )
|
if( m_SortOrder != SORT_INVALID )
|
||||||
GAMESTATE->m_PreferredSortOrder = m_SortOrder;
|
GAMESTATE->m_PreferredSortOrder = m_SortOrder;
|
||||||
if( m_iUnlockIndex != -1 )
|
if( m_iUnlockIndex != -1 )
|
||||||
|
|||||||
@@ -64,8 +64,10 @@ Song* GetDefaultSong()
|
|||||||
|
|
||||||
GameState::GameState() :
|
GameState::GameState() :
|
||||||
m_pCurStyle( MESSAGE_CURRENT_STYLE_CHANGED ),
|
m_pCurStyle( MESSAGE_CURRENT_STYLE_CHANGED ),
|
||||||
m_PreferredCourseDifficulty( MESSAGE_EDIT_PREFERRED_COURSE_DIFFICULTY_P1_CHANGED ),
|
m_sPreferredSongGroup( MESSAGE_PREFERRED_SONG_GROUP_CHANGED ),
|
||||||
m_PreferredDifficulty( MESSAGE_EDIT_PREFERRED_DIFFICULTY_P1_CHANGED ),
|
m_sPreferredCourseGroup(MESSAGE_PREFERRED_COURSE_GROUP_CHANGED ),
|
||||||
|
m_PreferredCourseDifficulty( MESSAGE_EDIT_PREFERRED_COURSE_DIFFICULTY_P1_CHANGED ),
|
||||||
|
m_PreferredDifficulty( MESSAGE_EDIT_PREFERRED_DIFFICULTY_P1_CHANGED ),
|
||||||
m_pCurSong( MESSAGE_CURRENT_SONG_CHANGED ),
|
m_pCurSong( MESSAGE_CURRENT_SONG_CHANGED ),
|
||||||
m_pCurSteps( MESSAGE_CURRENT_STEPS_P1_CHANGED ),
|
m_pCurSteps( MESSAGE_CURRENT_STEPS_P1_CHANGED ),
|
||||||
m_pCurCourse( MESSAGE_CURRENT_COURSE_CHANGED ),
|
m_pCurCourse( MESSAGE_CURRENT_COURSE_CHANGED ),
|
||||||
@@ -167,7 +169,8 @@ void GameState::Reset()
|
|||||||
// m_iCoins = 0; // don't reset coin count!
|
// m_iCoins = 0; // don't reset coin count!
|
||||||
m_MasterPlayerNumber = PLAYER_INVALID;
|
m_MasterPlayerNumber = PLAYER_INVALID;
|
||||||
m_mapEnv.clear();
|
m_mapEnv.clear();
|
||||||
m_sPreferredSongGroup = GROUP_ALL_MUSIC;
|
m_sPreferredSongGroup.Set( GROUP_ALL_MUSIC );
|
||||||
|
m_sPreferredCourseGroup.Set( "" );
|
||||||
m_bChangedFailTypeOnScreenSongOptions = false;
|
m_bChangedFailTypeOnScreenSongOptions = false;
|
||||||
FOREACH_PlayerNumber( p )
|
FOREACH_PlayerNumber( p )
|
||||||
{
|
{
|
||||||
@@ -610,6 +613,8 @@ void GameState::ReloadCharacters()
|
|||||||
|
|
||||||
CStringArray as;
|
CStringArray as;
|
||||||
GetDirListing( CHARACTERS_DIR "*", as, true, true );
|
GetDirListing( CHARACTERS_DIR "*", as, true, true );
|
||||||
|
StripCvs( as );
|
||||||
|
|
||||||
bool FoundDefault = false;
|
bool FoundDefault = false;
|
||||||
for( unsigned i=0; i<as.size(); i++ )
|
for( unsigned i=0; i<as.size(); i++ )
|
||||||
{
|
{
|
||||||
@@ -617,9 +622,6 @@ void GameState::ReloadCharacters()
|
|||||||
splitpath(as[i], sDummy, sCharName, sDummy);
|
splitpath(as[i], sDummy, sCharName, sDummy);
|
||||||
sCharName.MakeLower();
|
sCharName.MakeLower();
|
||||||
|
|
||||||
if( sCharName == "cvs" ) // the directory called "CVS"
|
|
||||||
continue; // ignore it
|
|
||||||
|
|
||||||
if( sCharName.CompareNoCase("default")==0 )
|
if( sCharName.CompareNoCase("default")==0 )
|
||||||
FoundDefault = true;
|
FoundDefault = true;
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,8 @@ public:
|
|||||||
bool ShowMarvelous() const;
|
bool ShowMarvelous() const;
|
||||||
|
|
||||||
CString m_sLoadingMessage; // used in loading screen
|
CString m_sLoadingMessage; // used in loading screen
|
||||||
CString m_sPreferredSongGroup; // GROUP_ALL_MUSIC denotes no preferred group
|
BroadcastOnChange<CString> m_sPreferredSongGroup; // GROUP_ALL_MUSIC denotes no preferred group
|
||||||
|
BroadcastOnChange<CString> m_sPreferredCourseGroup;
|
||||||
bool m_bChangedFailTypeOnScreenSongOptions; // true if FailType was changed in the song options screen
|
bool m_bChangedFailTypeOnScreenSongOptions; // true if FailType was changed in the song options screen
|
||||||
BroadcastOnChange1D<Difficulty,NUM_PLAYERS> m_PreferredDifficulty;
|
BroadcastOnChange1D<Difficulty,NUM_PLAYERS> m_PreferredDifficulty;
|
||||||
SortOrder m_SortOrder; // set by MusicWheel
|
SortOrder m_SortOrder; // set by MusicWheel
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ static const CString MessageNames[] = {
|
|||||||
"PlayersFinalized",
|
"PlayersFinalized",
|
||||||
"AssistTickChanged",
|
"AssistTickChanged",
|
||||||
"AutosyncChanged",
|
"AutosyncChanged",
|
||||||
|
"PreferredSongGroupChanged",
|
||||||
|
"PreferredCourseGroupChanged",
|
||||||
};
|
};
|
||||||
XToString( Message, NUM_MESSAGES );
|
XToString( Message, NUM_MESSAGES );
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,9 @@ enum Message
|
|||||||
MESSAGE_PLAYERS_FINALIZED,
|
MESSAGE_PLAYERS_FINALIZED,
|
||||||
MESSAGE_ASSIST_TICK_CHANGED,
|
MESSAGE_ASSIST_TICK_CHANGED,
|
||||||
MESSAGE_AUTOSYNC_CHANGED,
|
MESSAGE_AUTOSYNC_CHANGED,
|
||||||
NUM_MESSAGES,
|
MESSAGE_PREFERRED_SONG_GROUP_CHANGED,
|
||||||
|
MESSAGE_PREFERRED_COURSE_GROUP_CHANGED,
|
||||||
|
NUM_MESSAGES, // leave this at the end
|
||||||
MESSAGE_INVALID
|
MESSAGE_INVALID
|
||||||
};
|
};
|
||||||
const CString& MessageToString( Message m );
|
const CString& MessageToString( Message m );
|
||||||
@@ -96,6 +98,8 @@ public:
|
|||||||
const T Get() const { return val; }
|
const T Get() const { return val; }
|
||||||
void Set( T t ) { val = t; MESSAGEMAN->Broadcast( MessageToString(mSendWhenChanged) ); }
|
void Set( T t ) { val = t; MESSAGEMAN->Broadcast( MessageToString(mSendWhenChanged) ); }
|
||||||
operator T () const { return val; }
|
operator T () const { return val; }
|
||||||
|
bool operator == ( const T &other ) const { return val == other; }
|
||||||
|
bool operator != ( const T &other ) const { return val != other; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T, int N>
|
template<class T, int N>
|
||||||
|
|||||||
@@ -114,10 +114,10 @@ void MusicWheel::Load( CString sType )
|
|||||||
if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() )
|
if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() )
|
||||||
{
|
{
|
||||||
// make the preferred group the group of the last song played.
|
// make the preferred group the group of the last song played.
|
||||||
if( GAMESTATE->m_sPreferredSongGroup==GROUP_ALL_MUSIC && !PREFSMAN->m_bPickExtraStage )
|
if( GAMESTATE->m_sPreferredSongGroup == GROUP_ALL_MUSIC && !PREFSMAN->m_bPickExtraStage )
|
||||||
{
|
{
|
||||||
ASSERT(GAMESTATE->m_pCurSong);
|
ASSERT(GAMESTATE->m_pCurSong);
|
||||||
GAMESTATE->m_sPreferredSongGroup = GAMESTATE->m_pCurSong->m_sGroupName;
|
GAMESTATE->m_sPreferredSongGroup.Set( GAMESTATE->m_pCurSong->m_sGroupName );
|
||||||
}
|
}
|
||||||
|
|
||||||
Song* pSong;
|
Song* pSong;
|
||||||
|
|||||||
@@ -43,10 +43,7 @@ void NoteSkinManager::RefreshNoteSkinData( const Game* pGame )
|
|||||||
CStringArray asNoteSkinNames;
|
CStringArray asNoteSkinNames;
|
||||||
GetDirListing( sBaseSkinFolder + "*", asNoteSkinNames, true );
|
GetDirListing( sBaseSkinFolder + "*", asNoteSkinNames, true );
|
||||||
|
|
||||||
// strip out "CVS"
|
StripCvs( asNoteSkinNames );
|
||||||
for( int i=asNoteSkinNames.size()-1; i>=0; i-- )
|
|
||||||
if( 0 == stricmp("cvs", asNoteSkinNames[i]) )
|
|
||||||
asNoteSkinNames.erase( asNoteSkinNames.begin()+i, asNoteSkinNames.begin()+i+1 );
|
|
||||||
|
|
||||||
m_mapNameToData.clear();
|
m_mapNameToData.clear();
|
||||||
for( unsigned j=0; j<asNoteSkinNames.size(); j++ )
|
for( unsigned j=0; j<asNoteSkinNames.size(); j++ )
|
||||||
@@ -119,11 +116,7 @@ void NoteSkinManager::GetNoteSkinNames( const Game* pGame, CStringArray &AddTo,
|
|||||||
{
|
{
|
||||||
CString sBaseSkinFolder = NOTESKINS_DIR + pGame->m_szName + "/";
|
CString sBaseSkinFolder = NOTESKINS_DIR + pGame->m_szName + "/";
|
||||||
GetDirListing( sBaseSkinFolder + "*", AddTo, true );
|
GetDirListing( sBaseSkinFolder + "*", AddTo, true );
|
||||||
|
StripCvs( AddTo );
|
||||||
// strip out "CVS"
|
|
||||||
for( int i=AddTo.size()-1; i>=0; i-- )
|
|
||||||
if( 0 == stricmp("cvs", AddTo[i]) )
|
|
||||||
AddTo.erase( AddTo.begin()+i, AddTo.begin()+i+1 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move "default" to the front if it exists. */
|
/* Move "default" to the front if it exists. */
|
||||||
|
|||||||
@@ -412,9 +412,9 @@ public:
|
|||||||
defOut.name = "Group";
|
defOut.name = "Group";
|
||||||
Default.m_sSongGroup = GROUP_ALL_MUSIC;
|
Default.m_sSongGroup = GROUP_ALL_MUSIC;
|
||||||
|
|
||||||
vector<CString> vGroups;
|
vector<CString> vSongGroups;
|
||||||
SONGMAN->GetGroupNames( vGroups );
|
SONGMAN->GetSongGroupNames( vSongGroups );
|
||||||
ASSERT( vGroups.size() );
|
ASSERT( vSongGroups.size() );
|
||||||
|
|
||||||
{
|
{
|
||||||
defOut.choices.push_back( "AllGroups" );
|
defOut.choices.push_back( "AllGroups" );
|
||||||
@@ -423,7 +423,7 @@ public:
|
|||||||
ListEntries.push_back( mc );
|
ListEntries.push_back( mc );
|
||||||
}
|
}
|
||||||
|
|
||||||
FOREACH_CONST( CString, vGroups, g )
|
FOREACH_CONST( CString, vSongGroups, g )
|
||||||
{
|
{
|
||||||
defOut.choices.push_back( *g );
|
defOut.choices.push_back( *g );
|
||||||
GameCommand mc;
|
GameCommand mc;
|
||||||
|
|||||||
@@ -658,6 +658,15 @@ void StripCrnl(CString &s)
|
|||||||
s.erase(s.size()-1);
|
s.erase(s.size()-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StripCvs( vector<CString> &vs )
|
||||||
|
{
|
||||||
|
for( unsigned i=0; i<vs.size(); i++ )
|
||||||
|
{
|
||||||
|
if( vs[i].Right(3).CompareNoCase("CVS") == 0 )
|
||||||
|
vs.erase( vs.begin()+i );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* path is a .redir pathname. Read it and return the real one. */
|
/* path is a .redir pathname. Read it and return the real one. */
|
||||||
CString DerefRedir(const CString &_path)
|
CString DerefRedir(const CString &_path)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -309,6 +309,8 @@ void TrimLeft(CString &str, const char *s = "\r\n\t ");
|
|||||||
void TrimRight(CString &str, const char *s = "\r\n\t ");
|
void TrimRight(CString &str, const char *s = "\r\n\t ");
|
||||||
void StripCrnl(CString &s);
|
void StripCrnl(CString &s);
|
||||||
|
|
||||||
|
void StripCvs( vector<CString> &vs ); // remove all items that end in "cvs"
|
||||||
|
|
||||||
CString DerefRedir( const CString &sPath );
|
CString DerefRedir( const CString &sPath );
|
||||||
bool GetFileContents( const CString &sPath, CString &sOut, bool bOneLine = false );
|
bool GetFileContents( const CString &sPath, CString &sOut, bool bOneLine = false );
|
||||||
|
|
||||||
|
|||||||
@@ -92,13 +92,13 @@ void ScreenMiniMenu::OnChange( PlayerNumber pn )
|
|||||||
|
|
||||||
vector<PlayerNumber> vpns;
|
vector<PlayerNumber> vpns;
|
||||||
vpns.push_back( GAMESTATE->m_MasterPlayerNumber );
|
vpns.push_back( GAMESTATE->m_MasterPlayerNumber );
|
||||||
for( unsigned i=0; i<m_Rows.size(); i++ )
|
for( unsigned i=0; i<m_pRows.size(); i++ )
|
||||||
ExportOptions( i, vpns );
|
ExportOptions( i, vpns );
|
||||||
|
|
||||||
for( unsigned i=0; i<m_Rows.size(); i++ )
|
for( unsigned i=0; i<m_pRows.size(); i++ )
|
||||||
{
|
{
|
||||||
MenuRow &mr = m_vMenuRows[i];
|
MenuRow &mr = m_vMenuRows[i];
|
||||||
OptionRow &optrow = *m_Rows[i];
|
OptionRow &optrow = *m_pRows[i];
|
||||||
if( mr.pfnEnabled )
|
if( mr.pfnEnabled )
|
||||||
{
|
{
|
||||||
optrow.GetRowDef().m_vEnabledForPlayers.clear();
|
optrow.GetRowDef().m_vEnabledForPlayers.clear();
|
||||||
@@ -111,7 +111,7 @@ void ScreenMiniMenu::OnChange( PlayerNumber pn )
|
|||||||
|
|
||||||
void ScreenMiniMenu::ImportOptions( int r, const vector<PlayerNumber> &vpns )
|
void ScreenMiniMenu::ImportOptions( int r, const vector<PlayerNumber> &vpns )
|
||||||
{
|
{
|
||||||
OptionRow &optrow = *m_Rows[r];
|
OptionRow &optrow = *m_pRows[r];
|
||||||
MenuRow &mr = m_vMenuRows[r];
|
MenuRow &mr = m_vMenuRows[r];
|
||||||
if( !mr.choices.empty() )
|
if( !mr.choices.empty() )
|
||||||
optrow.SetOneSharedSelection( mr.iDefaultChoice );
|
optrow.SetOneSharedSelection( mr.iDefaultChoice );
|
||||||
@@ -122,7 +122,7 @@ void ScreenMiniMenu::ExportOptions( int r, const vector<PlayerNumber> &vpns )
|
|||||||
if( r == GetCurrentRow() )
|
if( r == GetCurrentRow() )
|
||||||
s_iLastRowCode = m_vMenuRows[r].iRowCode;
|
s_iLastRowCode = m_vMenuRows[r].iRowCode;
|
||||||
s_viLastAnswers.resize( m_vMenuRows.size() );
|
s_viLastAnswers.resize( m_vMenuRows.size() );
|
||||||
s_viLastAnswers[r] = m_Rows[r]->GetOneSharedSelection( true );
|
s_viLastAnswers[r] = m_pRows[r]->GetOneSharedSelection( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenMiniMenu::GoToNextScreen()
|
void ScreenMiniMenu::GoToNextScreen()
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ void ScreenNetworkOptions::MenuStart( PlayerNumber pn, const InputEventType type
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PO_SERVER:
|
case PO_SERVER:
|
||||||
switch (m_Rows[GetCurrentRow()]->GetOneSharedSelection())
|
switch( m_pRows[GetCurrentRow()]->GetOneSharedSelection() )
|
||||||
{
|
{
|
||||||
case NO_START_SERVER:
|
case NO_START_SERVER:
|
||||||
if (!NSMAN->isLanServer)
|
if (!NSMAN->isLanServer)
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ void ScreenOptions::Init()
|
|||||||
|
|
||||||
void ScreenOptions::LoadOptionIcon( PlayerNumber pn, int iRow, CString sText )
|
void ScreenOptions::LoadOptionIcon( PlayerNumber pn, int iRow, CString sText )
|
||||||
{
|
{
|
||||||
m_Rows[iRow]->LoadOptionIcon( pn, sText );
|
m_pRows[iRow]->LoadOptionIcon( pn, sText );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &vDefs, const vector<OptionRowHandler*> &vHands )
|
void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &vDefs, const vector<OptionRowHandler*> &vHands )
|
||||||
@@ -143,8 +143,8 @@ void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &v
|
|||||||
|
|
||||||
for( unsigned r=0; r<vDefs.size(); r++ ) // foreach row
|
for( unsigned r=0; r<vDefs.size(); r++ ) // foreach row
|
||||||
{
|
{
|
||||||
m_Rows.push_back( new OptionRow() );
|
m_pRows.push_back( new OptionRow() );
|
||||||
OptionRow &row = *m_Rows.back();
|
OptionRow &row = *m_pRows.back();
|
||||||
const OptionRowDefinition &def = vDefs[r];
|
const OptionRowDefinition &def = vDefs[r];
|
||||||
OptionRowHandler* hand = vHands[r];
|
OptionRowHandler* hand = vHands[r];
|
||||||
|
|
||||||
@@ -186,17 +186,17 @@ void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &v
|
|||||||
m_framePage.AddChild( &m_Cursor[p] );
|
m_framePage.AddChild( &m_Cursor[p] );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ ) // foreach row
|
for( unsigned r=0; r<m_pRows.size(); r++ ) // foreach row
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
m_framePage.AddChild( &row );
|
m_framePage.AddChild( &row );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( SHOW_EXIT_ROW )
|
if( SHOW_EXIT_ROW )
|
||||||
{
|
{
|
||||||
// TRICKY: Add "EXIT" item
|
// TRICKY: Add "EXIT" item
|
||||||
m_Rows.push_back( new OptionRow() );
|
m_pRows.push_back( new OptionRow() );
|
||||||
OptionRow &row = *m_Rows.back();
|
OptionRow &row = *m_pRows.back();
|
||||||
row.LoadMetrics( m_sName );
|
row.LoadMetrics( m_sName );
|
||||||
row.LoadExit();
|
row.LoadExit();
|
||||||
m_framePage.AddChild( &row );
|
m_framePage.AddChild( &row );
|
||||||
@@ -254,7 +254,7 @@ void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &v
|
|||||||
}
|
}
|
||||||
|
|
||||||
// poke once at all the explanation metrics so that we catch missing ones early
|
// poke once at all the explanation metrics so that we catch missing ones early
|
||||||
for( int r=0; r<(int)m_Rows.size(); r++ ) // foreach row
|
for( int r=0; r<(int)m_pRows.size(); r++ ) // foreach row
|
||||||
{
|
{
|
||||||
GetExplanationText( r );
|
GetExplanationText( r );
|
||||||
}
|
}
|
||||||
@@ -262,9 +262,9 @@ void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &v
|
|||||||
// put focus on the first enabled row
|
// put focus on the first enabled row
|
||||||
FOREACH_PlayerNumber( p )
|
FOREACH_PlayerNumber( p )
|
||||||
{
|
{
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ )
|
for( unsigned r=0; r<m_pRows.size(); r++ )
|
||||||
{
|
{
|
||||||
const OptionRow &row = *m_Rows[r];
|
const OptionRow &row = *m_pRows[r];
|
||||||
if( row.GetRowDef().IsEnabledForPlayer(p) )
|
if( row.GetRowDef().IsEnabledForPlayer(p) )
|
||||||
{
|
{
|
||||||
m_iCurrentRow[p] = r;
|
m_iCurrentRow[p] = r;
|
||||||
@@ -296,9 +296,9 @@ void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &v
|
|||||||
/* It's tweening into position, but on the initial tween-in we only want to
|
/* It's tweening into position, but on the initial tween-in we only want to
|
||||||
* tween in the whole page at once. Since the tweens are nontrivial, it's
|
* tween in the whole page at once. Since the tweens are nontrivial, it's
|
||||||
* easiest to queue the tweens and then force them to finish. */
|
* easiest to queue the tweens and then force them to finish. */
|
||||||
for( int r=0; r<(int) m_Rows.size(); r++ ) // foreach options line
|
for( int r=0; r<(int) m_pRows.size(); r++ ) // foreach options line
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
row.FinishTweening();
|
row.FinishTweening();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,13 +310,13 @@ void ScreenOptions::InitMenu( InputMode im, const vector<OptionRowDefinition> &v
|
|||||||
ScreenOptions::~ScreenOptions()
|
ScreenOptions::~ScreenOptions()
|
||||||
{
|
{
|
||||||
LOG->Trace( "ScreenOptions::~ScreenOptions()" );
|
LOG->Trace( "ScreenOptions::~ScreenOptions()" );
|
||||||
for( unsigned i=0; i<m_Rows.size(); i++ )
|
for( unsigned i=0; i<m_pRows.size(); i++ )
|
||||||
SAFE_DELETE( m_Rows[i] );
|
SAFE_DELETE( m_pRows[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
CString ScreenOptions::GetExplanationText( int iRow ) const
|
CString ScreenOptions::GetExplanationText( int iRow ) const
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[iRow];
|
OptionRow &row = *m_pRows[iRow];
|
||||||
|
|
||||||
CString sLineName = row.GetRowDef().name;
|
CString sLineName = row.GetRowDef().name;
|
||||||
ASSERT( !sLineName.empty() );
|
ASSERT( !sLineName.empty() );
|
||||||
@@ -325,36 +325,36 @@ CString ScreenOptions::GetExplanationText( int iRow ) const
|
|||||||
|
|
||||||
BitmapText &ScreenOptions::GetTextItemForRow( PlayerNumber pn, int iRow, int iChoiceOnRow )
|
BitmapText &ScreenOptions::GetTextItemForRow( PlayerNumber pn, int iRow, int iChoiceOnRow )
|
||||||
{
|
{
|
||||||
ASSERT_M( iRow < (int)m_Rows.size(), ssprintf("%i < %i", iRow, (int)m_Rows.size() ) );
|
ASSERT_M( iRow < (int)m_pRows.size(), ssprintf("%i < %i", iRow, (int)m_pRows.size() ) );
|
||||||
OptionRow &row = *m_Rows[iRow];
|
OptionRow &row = *m_pRows[iRow];
|
||||||
return row.GetTextItemForRow( pn, iChoiceOnRow );
|
return row.GetTextItemForRow( pn, iChoiceOnRow );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptions::GetWidthXY( PlayerNumber pn, int iRow, int iChoiceOnRow, int &iWidthOut, int &iXOut, int &iYOut )
|
void ScreenOptions::GetWidthXY( PlayerNumber pn, int iRow, int iChoiceOnRow, int &iWidthOut, int &iXOut, int &iYOut )
|
||||||
{
|
{
|
||||||
ASSERT_M( iRow < (int)m_Rows.size(), ssprintf("%i < %i", iRow, (int)m_Rows.size() ) );
|
ASSERT_M( iRow < (int)m_pRows.size(), ssprintf("%i < %i", iRow, (int)m_pRows.size() ) );
|
||||||
OptionRow &row = *m_Rows[iRow];
|
OptionRow &row = *m_pRows[iRow];
|
||||||
row.GetWidthXY( pn, iChoiceOnRow, iWidthOut, iXOut, iYOut );
|
row.GetWidthXY( pn, iChoiceOnRow, iWidthOut, iXOut, iYOut );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptions::PositionUnderlines( int r, PlayerNumber pn )
|
void ScreenOptions::PositionUnderlines( int r, PlayerNumber pn )
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
row.PositionUnderlines( pn );
|
row.PositionUnderlines( pn );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptions::PositionAllUnderlines()
|
void ScreenOptions::PositionAllUnderlines()
|
||||||
{
|
{
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ )
|
for( unsigned r=0; r<m_pRows.size(); r++ )
|
||||||
FOREACH_HumanPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
PositionUnderlines( r, p );
|
PositionUnderlines( r, p );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptions::PositionIcons()
|
void ScreenOptions::PositionIcons()
|
||||||
{
|
{
|
||||||
for( unsigned i=0; i<m_Rows.size(); i++ ) // foreach options line
|
for( unsigned i=0; i<m_pRows.size(); i++ ) // foreach options line
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[i];
|
OptionRow &row = *m_pRows[i];
|
||||||
row.PositionIcons();
|
row.PositionIcons();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -368,7 +368,7 @@ void ScreenOptions::RefreshIcons( int row, PlayerNumber pn )
|
|||||||
void ScreenOptions::RefreshAllIcons()
|
void ScreenOptions::RefreshAllIcons()
|
||||||
{
|
{
|
||||||
FOREACH_HumanPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
for( unsigned r=0; r<m_Rows.size(); ++r )
|
for( unsigned r=0; r<m_pRows.size(); ++r )
|
||||||
this->RefreshIcons( r, p );
|
this->RefreshIcons( r, p );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,8 +382,8 @@ void ScreenOptions::PositionCursors()
|
|||||||
if( iRow == -1 )
|
if( iRow == -1 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ASSERT_M( iRow >= 0 && iRow < (int)m_Rows.size(), ssprintf("%i < %i", iRow, (int)m_Rows.size() ) );
|
ASSERT_M( iRow >= 0 && iRow < (int)m_pRows.size(), ssprintf("%i < %i", iRow, (int)m_pRows.size() ) );
|
||||||
OptionRow &OptionRow = *m_Rows[iRow];
|
OptionRow &OptionRow = *m_pRows[iRow];
|
||||||
OptionsCursor &cursor = m_Cursor[pn];
|
OptionsCursor &cursor = m_Cursor[pn];
|
||||||
|
|
||||||
const int iChoiceWithFocus = OptionRow.GetChoiceInRowWithFocus(pn);
|
const int iChoiceWithFocus = OptionRow.GetChoiceInRowWithFocus(pn);
|
||||||
@@ -401,9 +401,9 @@ void ScreenOptions::TweenCursor( PlayerNumber pn )
|
|||||||
{
|
{
|
||||||
// Set the position of the cursor showing the current option the user is changing.
|
// Set the position of the cursor showing the current option the user is changing.
|
||||||
const int iRow = m_iCurrentRow[pn];
|
const int iRow = m_iCurrentRow[pn];
|
||||||
ASSERT_M( iRow < (int)m_Rows.size(), ssprintf("%i < %i", iRow, (int)m_Rows.size() ) );
|
ASSERT_M( iRow < (int)m_pRows.size(), ssprintf("%i < %i", iRow, (int)m_pRows.size() ) );
|
||||||
|
|
||||||
const OptionRow &row = *m_Rows[iRow];
|
const OptionRow &row = *m_pRows[iRow];
|
||||||
const int iChoiceWithFocus = row.GetChoiceInRowWithFocus(pn);
|
const int iChoiceWithFocus = row.GetChoiceInRowWithFocus(pn);
|
||||||
|
|
||||||
int iWidth, iX, iY;
|
int iWidth, iX, iY;
|
||||||
@@ -436,13 +436,13 @@ void ScreenOptions::TweenCursor( PlayerNumber pn )
|
|||||||
* Update the whole row. */
|
* Update the whole row. */
|
||||||
void ScreenOptions::UpdateText( int iRow )
|
void ScreenOptions::UpdateText( int iRow )
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[iRow];
|
OptionRow &row = *m_pRows[iRow];
|
||||||
row.UpdateText();
|
row.UpdateText();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptions::UpdateEnabledDisabled( int r )
|
void ScreenOptions::UpdateEnabledDisabled( int r )
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
|
|
||||||
bool bRowHasFocus[NUM_PLAYERS];
|
bool bRowHasFocus[NUM_PLAYERS];
|
||||||
FOREACH_PlayerNumber( pn )
|
FOREACH_PlayerNumber( pn )
|
||||||
@@ -454,7 +454,7 @@ void ScreenOptions::UpdateEnabledDisabled( int r )
|
|||||||
|
|
||||||
void ScreenOptions::UpdateEnabledDisabled()
|
void ScreenOptions::UpdateEnabledDisabled()
|
||||||
{
|
{
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ )
|
for( unsigned r=0; r<m_pRows.size(); r++ )
|
||||||
UpdateEnabledDisabled( r );
|
UpdateEnabledDisabled( r );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -512,7 +512,7 @@ void ScreenOptions::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
this->GoToPrevScreen();
|
this->GoToPrevScreen();
|
||||||
break;
|
break;
|
||||||
case SM_GoToNextScreen:
|
case SM_GoToNextScreen:
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ ) // foreach row
|
for( unsigned r=0; r<m_pRows.size(); r++ ) // foreach row
|
||||||
{
|
{
|
||||||
vector<PlayerNumber> vpns;
|
vector<PlayerNumber> vpns;
|
||||||
FOREACH_HumanPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
@@ -551,7 +551,7 @@ void ScreenOptions::PositionItems()
|
|||||||
int P1Choice = GAMESTATE->IsHumanPlayer(PLAYER_1)? m_iCurrentRow[PLAYER_1]: m_iCurrentRow[PLAYER_2];
|
int P1Choice = GAMESTATE->IsHumanPlayer(PLAYER_1)? m_iCurrentRow[PLAYER_1]: m_iCurrentRow[PLAYER_2];
|
||||||
int P2Choice = GAMESTATE->IsHumanPlayer(PLAYER_2)? m_iCurrentRow[PLAYER_2]: m_iCurrentRow[PLAYER_1];
|
int P2Choice = GAMESTATE->IsHumanPlayer(PLAYER_2)? m_iCurrentRow[PLAYER_2]: m_iCurrentRow[PLAYER_1];
|
||||||
|
|
||||||
vector<OptionRow*> Rows( m_Rows );
|
vector<OptionRow*> Rows( m_pRows );
|
||||||
OptionRow *ExitRow = NULL;
|
OptionRow *ExitRow = NULL;
|
||||||
|
|
||||||
if( (bool)SEPARATE_EXIT_ROW && Rows.back()->GetRowType() == OptionRow::ROW_EXIT )
|
if( (bool)SEPARATE_EXIT_ROW && Rows.back()->GetRowType() == OptionRow::ROW_EXIT )
|
||||||
@@ -670,14 +670,14 @@ void ScreenOptions::OnChange( PlayerNumber pn )
|
|||||||
if( SHOW_SCROLL_BAR )
|
if( SHOW_SCROLL_BAR )
|
||||||
{
|
{
|
||||||
float fPercent = 0;
|
float fPercent = 0;
|
||||||
if( m_Rows.size() > 1 )
|
if( m_pRows.size() > 1 )
|
||||||
fPercent = m_iCurrentRow[pn] / float(m_Rows.size()-1);
|
fPercent = m_iCurrentRow[pn] / float(m_pRows.size()-1);
|
||||||
m_ScrollBar.SetPercentage( pn, fPercent );
|
m_ScrollBar.SetPercentage( pn, fPercent );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* If the last row is EXIT, and is hidden, then show MORE. */
|
/* If the last row is EXIT, and is hidden, then show MORE. */
|
||||||
const bool ShowMore = m_Rows.back()->GetRowType() == OptionRow::ROW_EXIT && m_Rows.back()->GetRowHidden();
|
const bool ShowMore = m_pRows.back()->GetRowType() == OptionRow::ROW_EXIT && m_pRows.back()->GetRowHidden();
|
||||||
if( m_bMoreShown != ShowMore )
|
if( m_bMoreShown != ShowMore )
|
||||||
{
|
{
|
||||||
m_bMoreShown = ShowMore;
|
m_bMoreShown = ShowMore;
|
||||||
@@ -691,7 +691,7 @@ void ScreenOptions::OnChange( PlayerNumber pn )
|
|||||||
TweenCursor( p );
|
TweenCursor( p );
|
||||||
|
|
||||||
int iCurrentRow = m_iCurrentRow[pn];
|
int iCurrentRow = m_iCurrentRow[pn];
|
||||||
OptionRow &row = *m_Rows[iCurrentRow];
|
OptionRow &row = *m_pRows[iCurrentRow];
|
||||||
const bool ExitSelected = row.GetRowType() == OptionRow::ROW_EXIT;
|
const bool ExitSelected = row.GetRowType() == OptionRow::ROW_EXIT;
|
||||||
if( p == pn || GAMESTATE->GetNumHumanPlayers() == 1 )
|
if( p == pn || GAMESTATE->GetNumHumanPlayers() == 1 )
|
||||||
{
|
{
|
||||||
@@ -740,7 +740,7 @@ void ScreenOptions::MenuBack( PlayerNumber pn )
|
|||||||
bool ScreenOptions::IsOnLastRow( PlayerNumber pn ) const
|
bool ScreenOptions::IsOnLastRow( PlayerNumber pn ) const
|
||||||
{
|
{
|
||||||
int iCurRow = m_iCurrentRow[pn];
|
int iCurRow = m_iCurrentRow[pn];
|
||||||
return iCurRow == (int)(m_Rows.size()-1);
|
return iCurRow == (int)(m_pRows.size()-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScreenOptions::AllAreOnLastRow() const
|
bool ScreenOptions::AllAreOnLastRow() const
|
||||||
@@ -769,7 +769,7 @@ void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type )
|
|||||||
}
|
}
|
||||||
|
|
||||||
int iCurRow = m_iCurrentRow[pn];
|
int iCurRow = m_iCurrentRow[pn];
|
||||||
OptionRow &row = *m_Rows[iCurRow];
|
OptionRow &row = *m_pRows[iCurRow];
|
||||||
|
|
||||||
|
|
||||||
/* If we are in a three-button mode, check to see if MENU_BUTTON_LEFT and
|
/* If we are in a three-button mode, check to see if MENU_BUTTON_LEFT and
|
||||||
@@ -851,7 +851,7 @@ void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type )
|
|||||||
{
|
{
|
||||||
case NAV_THREE_KEY:
|
case NAV_THREE_KEY:
|
||||||
// don't wrap
|
// don't wrap
|
||||||
if( iCurRow == (int)m_Rows.size()-1 )
|
if( iCurRow == (int)m_pRows.size()-1 )
|
||||||
return;
|
return;
|
||||||
MenuDown( pn, type );
|
MenuDown( pn, type );
|
||||||
break;
|
break;
|
||||||
@@ -878,7 +878,7 @@ void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type )
|
|||||||
case NAV_FIVE_KEY:
|
case NAV_FIVE_KEY:
|
||||||
/* Jump to the exit row. (If everyone's already on the exit row, then
|
/* Jump to the exit row. (If everyone's already on the exit row, then
|
||||||
* we'll have already gone to the next screen above.) */
|
* we'll have already gone to the next screen above.) */
|
||||||
MoveRow( pn, m_Rows.size()-m_iCurrentRow[pn]-1, type != IET_FIRST_PRESS );
|
MoveRow( pn, m_pRows.size()-m_iCurrentRow[pn]-1, type != IET_FIRST_PRESS );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -888,7 +888,7 @@ void ScreenOptions::StoreFocus( PlayerNumber pn )
|
|||||||
{
|
{
|
||||||
/* Long rows always put us in the center, so don't update the focus. */
|
/* Long rows always put us in the center, so don't update the focus. */
|
||||||
int iCurrentRow = m_iCurrentRow[pn];
|
int iCurrentRow = m_iCurrentRow[pn];
|
||||||
const OptionRow &row = *m_Rows[iCurrentRow];
|
const OptionRow &row = *m_pRows[iCurrentRow];
|
||||||
if( row.GetRowDef().layoutType == LAYOUT_SHOW_ONE_IN_ROW )
|
if( row.GetRowDef().layoutType == LAYOUT_SHOW_ONE_IN_ROW )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -905,7 +905,7 @@ void ScreenOptions::ChangeValueInRow( PlayerNumber pn, int iDelta, bool Repeat )
|
|||||||
if( iCurRow == -1 ) // no row selected
|
if( iCurRow == -1 ) // no row selected
|
||||||
return; // don't allow a move
|
return; // don't allow a move
|
||||||
|
|
||||||
OptionRow &row = *m_Rows[iCurRow];
|
OptionRow &row = *m_pRows[iCurRow];
|
||||||
|
|
||||||
const int iNumChoices = row.GetRowDef().choices.size();
|
const int iNumChoices = row.GetRowDef().choices.size();
|
||||||
|
|
||||||
@@ -1018,7 +1018,7 @@ void ScreenOptions::ChangeValueInRow( PlayerNumber pn, int iDelta, bool Repeat )
|
|||||||
void ScreenOptions::MoveRow( PlayerNumber pn, int dir, bool Repeat )
|
void ScreenOptions::MoveRow( PlayerNumber pn, int dir, bool Repeat )
|
||||||
{
|
{
|
||||||
const int iCurrentRow = m_iCurrentRow[pn];
|
const int iCurrentRow = m_iCurrentRow[pn];
|
||||||
OptionRow &row = *m_Rows[iCurrentRow];
|
OptionRow &row = *m_pRows[iCurrentRow];
|
||||||
|
|
||||||
if( row.GetFirstItemGoesDown() )
|
if( row.GetFirstItemGoesDown() )
|
||||||
{
|
{
|
||||||
@@ -1035,19 +1035,19 @@ void ScreenOptions::MoveRow( PlayerNumber pn, int dir, bool Repeat )
|
|||||||
continue; // skip
|
continue; // skip
|
||||||
|
|
||||||
int r = m_iCurrentRow[p] + dir;
|
int r = m_iCurrentRow[p] + dir;
|
||||||
if( Repeat && ( r == -1 || r == (int) m_Rows.size() ) )
|
if( Repeat && ( r == -1 || r == (int) m_pRows.size() ) )
|
||||||
continue; // don't wrap while repeating
|
continue; // don't wrap while repeating
|
||||||
|
|
||||||
wrap( r, m_Rows.size() );
|
wrap( r, m_pRows.size() );
|
||||||
|
|
||||||
const unsigned iOldSelection = row.GetChoiceInRowWithFocus(p);
|
const unsigned iOldSelection = row.GetChoiceInRowWithFocus(p);
|
||||||
if( m_iCurrentRow[p] == r )
|
if( m_iCurrentRow[p] == r )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
m_iCurrentRow[p] = r;
|
m_iCurrentRow[p] = r;
|
||||||
ASSERT( r >= 0 && r < (int)m_Rows.size() );
|
ASSERT( r >= 0 && r < (int)m_pRows.size() );
|
||||||
|
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
|
|
||||||
switch( m_OptionsNavigation )
|
switch( m_OptionsNavigation )
|
||||||
{
|
{
|
||||||
@@ -1123,20 +1123,20 @@ void ScreenOptions::MenuUpDown( PlayerNumber pn, const InputEventType type, int
|
|||||||
bool bRepeat = type != IET_FIRST_PRESS;
|
bool bRepeat = type != IET_FIRST_PRESS;
|
||||||
|
|
||||||
int iDest = -1;
|
int iDest = -1;
|
||||||
for( int r=1; r<(int)m_Rows.size(); r++ )
|
for( int r=1; r<(int)m_pRows.size(); r++ )
|
||||||
{
|
{
|
||||||
int iDelta = r*iDir;
|
int iDelta = r*iDir;
|
||||||
iDest = m_iCurrentRow[pn] + iDelta;
|
iDest = m_iCurrentRow[pn] + iDelta;
|
||||||
int iOldDest = iDest;
|
int iOldDest = iDest;
|
||||||
ASSERT( m_Rows.size() );
|
ASSERT( m_pRows.size() );
|
||||||
wrap( iDest, m_Rows.size() );
|
wrap( iDest, m_pRows.size() );
|
||||||
|
|
||||||
// Don't wrap on repeating inputs.
|
// Don't wrap on repeating inputs.
|
||||||
bool bWrapped = iOldDest != iDest;
|
bool bWrapped = iOldDest != iDest;
|
||||||
if( bRepeat && bWrapped )
|
if( bRepeat && bWrapped )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
OptionRow &row = *m_Rows[iDest];
|
OptionRow &row = *m_pRows[iDest];
|
||||||
|
|
||||||
if( row.GetRowDef().IsEnabledForPlayer(pn) )
|
if( row.GetRowDef().IsEnabledForPlayer(pn) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ protected: // derived classes need access to these
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
/* Map menu lines to m_OptionRow entries. */
|
/* Map menu lines to m_OptionRow entries. */
|
||||||
vector<OptionRow*> m_Rows;
|
vector<OptionRow*> m_pRows;
|
||||||
|
|
||||||
Navigation m_OptionsNavigation;
|
Navigation m_OptionsNavigation;
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ void ScreenOptionsMaster::Init()
|
|||||||
|
|
||||||
ScreenOptionsMaster::~ScreenOptionsMaster()
|
ScreenOptionsMaster::~ScreenOptionsMaster()
|
||||||
{
|
{
|
||||||
FOREACH( OptionRow*, m_Rows, r )
|
FOREACH( OptionRow*, m_pRows, r )
|
||||||
(*r)->DetachHandler();
|
(*r)->DetachHandler();
|
||||||
FOREACH( OptionRowHandler*, OptionRowHandlers, h )
|
FOREACH( OptionRowHandler*, OptionRowHandlers, h )
|
||||||
SAFE_DELETE( *h );
|
SAFE_DELETE( *h );
|
||||||
@@ -110,13 +110,13 @@ void ScreenOptionsMaster::ImportOptions( int r, const vector<PlayerNumber> &vpns
|
|||||||
{
|
{
|
||||||
FOREACH_CONST( PlayerNumber, vpns, pn )
|
FOREACH_CONST( PlayerNumber, vpns, pn )
|
||||||
ASSERT( GAMESTATE->IsHumanPlayer(*pn) );
|
ASSERT( GAMESTATE->IsHumanPlayer(*pn) );
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
row.ImportOptions( vpns );
|
row.ImportOptions( vpns );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenOptionsMaster::ExportOptions( int r, const vector<PlayerNumber> &vpns )
|
void ScreenOptionsMaster::ExportOptions( int r, const vector<PlayerNumber> &vpns )
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
bool bRowHasFocus[NUM_PLAYERS];
|
bool bRowHasFocus[NUM_PLAYERS];
|
||||||
ZERO( bRowHasFocus );
|
ZERO( bRowHasFocus );
|
||||||
FOREACH_CONST( PlayerNumber, vpns, p )
|
FOREACH_CONST( PlayerNumber, vpns, p )
|
||||||
@@ -134,8 +134,8 @@ void ScreenOptionsMaster::BeginFadingOut()
|
|||||||
m_bExportWillSetANewScreen = false;
|
m_bExportWillSetANewScreen = false;
|
||||||
|
|
||||||
int iCurRow = this->GetCurrentRow();
|
int iCurRow = this->GetCurrentRow();
|
||||||
ASSERT( iCurRow >= 0 && iCurRow < (int)m_Rows.size() );
|
ASSERT( iCurRow >= 0 && iCurRow < (int)m_pRows.size() );
|
||||||
OptionRow &row = *m_Rows[iCurRow];
|
OptionRow &row = *m_pRows[iCurRow];
|
||||||
|
|
||||||
if( row.GetRowType() != OptionRow::ROW_EXIT )
|
if( row.GetRowType() != OptionRow::ROW_EXIT )
|
||||||
{
|
{
|
||||||
@@ -181,7 +181,7 @@ void ScreenOptionsMaster::GoToPrevScreen()
|
|||||||
|
|
||||||
void ScreenOptionsMaster::RefreshIcons( int r, PlayerNumber pn )
|
void ScreenOptionsMaster::RefreshIcons( int r, PlayerNumber pn )
|
||||||
{
|
{
|
||||||
OptionRow &row = *m_Rows[r];
|
OptionRow &row = *m_pRows[r];
|
||||||
|
|
||||||
if( row.GetRowType() == OptionRow::ROW_EXIT )
|
if( row.GetRowType() == OptionRow::ROW_EXIT )
|
||||||
return; // skip
|
return; // skip
|
||||||
|
|||||||
@@ -67,8 +67,8 @@ void ScreenPlayerOptions::Init()
|
|||||||
|
|
||||||
FOREACH_HumanPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
{
|
{
|
||||||
m_bRowCausesDisqualified[p].resize( m_Rows.size(), false );
|
m_bRowCausesDisqualified[p].resize( m_pRows.size(), false );
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ )
|
for( unsigned r=0; r<m_pRows.size(); r++ )
|
||||||
UpdateDisqualified( r, p );
|
UpdateDisqualified( r, p );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,7 +146,7 @@ void ScreenPlayerOptions::Input( const DeviceInput& DeviceI, const InputEventTyp
|
|||||||
|
|
||||||
COMMAND( m_sprCancelAll[pn], "Show" );
|
COMMAND( m_sprCancelAll[pn], "Show" );
|
||||||
|
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ )
|
for( unsigned r=0; r<m_pRows.size(); r++ )
|
||||||
{
|
{
|
||||||
vector<PlayerNumber> v;
|
vector<PlayerNumber> v;
|
||||||
v.push_back( pn );
|
v.push_back( pn );
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ void ScreenProfileOptions::ImportOptions( int row, const vector<PlayerNumber> &v
|
|||||||
vsProfiles.end(),
|
vsProfiles.end(),
|
||||||
PREFSMAN->GetDefaultLocalProfileID(pn).Get() );
|
PREFSMAN->GetDefaultLocalProfileID(pn).Get() );
|
||||||
if( iter != vsProfiles.end() )
|
if( iter != vsProfiles.end() )
|
||||||
m_Rows[row]->SetOneSharedSelection( iter - vsProfiles.begin() + 1 );
|
m_pRows[row]->SetOneSharedSelection( iter - vsProfiles.begin() + 1 );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -117,8 +117,8 @@ void ScreenProfileOptions::ExportOptions( int row, const vector<PlayerNumber> &v
|
|||||||
vector<CString> vsProfiles;
|
vector<CString> vsProfiles;
|
||||||
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
||||||
|
|
||||||
if( m_Rows[row]->GetOneSharedSelection() > 0 )
|
if( m_pRows[row]->GetOneSharedSelection() > 0 )
|
||||||
PREFSMAN->GetDefaultLocalProfileID(pn).Set( vsProfiles[m_Rows[row]->GetOneSharedSelection()-1] );
|
PREFSMAN->GetDefaultLocalProfileID(pn).Set( vsProfiles[m_pRows[row]->GetOneSharedSelection()-1] );
|
||||||
else
|
else
|
||||||
PREFSMAN->GetDefaultLocalProfileID(pn).Set( "" );
|
PREFSMAN->GetDefaultLocalProfileID(pn).Set( "" );
|
||||||
}
|
}
|
||||||
@@ -222,7 +222,7 @@ CString ScreenProfileOptions::GetSelectedProfileID()
|
|||||||
vector<CString> vsProfiles;
|
vector<CString> vsProfiles;
|
||||||
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
||||||
|
|
||||||
const OptionRow &row = *m_Rows[GetCurrentRow()];
|
const OptionRow &row = *m_pRows[GetCurrentRow()];
|
||||||
const int Selection = row.GetOneSharedSelection();
|
const int Selection = row.GetOneSharedSelection();
|
||||||
if( !Selection )
|
if( !Selection )
|
||||||
return "";
|
return "";
|
||||||
@@ -231,7 +231,7 @@ CString ScreenProfileOptions::GetSelectedProfileID()
|
|||||||
|
|
||||||
CString ScreenProfileOptions::GetSelectedProfileName()
|
CString ScreenProfileOptions::GetSelectedProfileName()
|
||||||
{
|
{
|
||||||
const OptionRow &row = *m_Rows[GetCurrentRow()];
|
const OptionRow &row = *m_pRows[GetCurrentRow()];
|
||||||
const int Selection = row.GetOneSharedSelection();
|
const int Selection = row.GetOneSharedSelection();
|
||||||
if( !Selection )
|
if( !Selection )
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ void ScreenSMOnlineLogin::Init()
|
|||||||
|
|
||||||
InitMenu( INPUTMODE_SHARE_CURSOR, vDefs, vHands );
|
InitMenu( INPUTMODE_SHARE_CURSOR, vDefs, vHands );
|
||||||
SOUND->PlayMusic( THEME->GetPathS("ScreenMachineOptions", "music"));
|
SOUND->PlayMusic( THEME->GetPathS("ScreenMachineOptions", "music"));
|
||||||
OptionRow &row = *m_Rows.back();
|
OptionRow &row = *m_pRows.back();
|
||||||
row.SetExitText("Login");
|
row.SetExitText("Login");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ void ScreenSMOnlineLogin::ImportOptions( int row, const vector<PlayerNumber> &vp
|
|||||||
{
|
{
|
||||||
iter = find(vsProfiles.begin(), vsProfiles.end(), PREFSMAN->GetDefaultLocalProfileID(pn).Get() );
|
iter = find(vsProfiles.begin(), vsProfiles.end(), PREFSMAN->GetDefaultLocalProfileID(pn).Get() );
|
||||||
if( iter != vsProfiles.end() )
|
if( iter != vsProfiles.end() )
|
||||||
m_Rows[0]->SetOneSelection((PlayerNumber) pn, iter - vsProfiles.begin());
|
m_pRows[0]->SetOneSelection((PlayerNumber) pn, iter - vsProfiles.begin());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -89,7 +89,7 @@ void ScreenSMOnlineLogin::ExportOptions( int row, const vector<PlayerNumber> &vp
|
|||||||
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
||||||
|
|
||||||
FOREACH_EnabledPlayer( pn )
|
FOREACH_EnabledPlayer( pn )
|
||||||
PREFSMAN->GetDefaultLocalProfileID(pn).Set( vsProfiles[m_Rows[0]->GetOneSelection(pn)] );
|
PREFSMAN->GetDefaultLocalProfileID(pn).Set( vsProfiles[m_pRows[0]->GetOneSelection(pn)] );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -104,7 +104,7 @@ void ScreenSMOnlineLogin::GoToNextScreen()
|
|||||||
{
|
{
|
||||||
vector<PlayerNumber> v;
|
vector<PlayerNumber> v;
|
||||||
v.push_back( GAMESTATE->m_MasterPlayerNumber );
|
v.push_back( GAMESTATE->m_MasterPlayerNumber );
|
||||||
for( unsigned r=0; r<m_Rows.size(); r++ )
|
for( unsigned r=0; r<m_pRows.size(); r++ )
|
||||||
ExportOptions( r, v );
|
ExportOptions( r, v );
|
||||||
|
|
||||||
PREFSMAN->SaveGlobalPrefsToDisk();
|
PREFSMAN->SaveGlobalPrefsToDisk();
|
||||||
@@ -172,7 +172,7 @@ CString ScreenSMOnlineLogin::GetSelectedProfileID()
|
|||||||
vector<CString> vsProfiles;
|
vector<CString> vsProfiles;
|
||||||
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
PROFILEMAN->GetLocalProfileIDs( vsProfiles );
|
||||||
|
|
||||||
const OptionRow &row = *m_Rows[GetCurrentRow()];
|
const OptionRow &row = *m_pRows[GetCurrentRow()];
|
||||||
const int Selection = row.GetOneSharedSelection();
|
const int Selection = row.GetOneSharedSelection();
|
||||||
if( !Selection )
|
if( !Selection )
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ void ScreenSelectGroup::Init()
|
|||||||
{
|
{
|
||||||
if( !PREFSMAN->m_bShowSelectGroup )
|
if( !PREFSMAN->m_bShowSelectGroup )
|
||||||
{
|
{
|
||||||
GAMESTATE->m_sPreferredSongGroup = GROUP_ALL_MUSIC;
|
GAMESTATE->m_sPreferredSongGroup.Set( GROUP_ALL_MUSIC );
|
||||||
HandleScreenMessage( SM_GoToNextScreen );
|
HandleScreenMessage( SM_GoToNextScreen );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -172,7 +172,7 @@ void ScreenSelectGroup::AfterChange()
|
|||||||
if( sSelectedGroupName == "ALL MUSIC" )
|
if( sSelectedGroupName == "ALL MUSIC" )
|
||||||
m_Banner.LoadAllMusic();
|
m_Banner.LoadAllMusic();
|
||||||
else
|
else
|
||||||
m_Banner.LoadFromGroup( sSelectedGroupName );
|
m_Banner.LoadFromSongGroup( sSelectedGroupName );
|
||||||
|
|
||||||
const int iNumSongs = m_MusicList.GetNumSongs();
|
const int iNumSongs = m_MusicList.GetNumSongs();
|
||||||
m_textNumber.SetText( ssprintf("%d", iNumSongs) );
|
m_textNumber.SetText( ssprintf("%d", iNumSongs) );
|
||||||
@@ -224,7 +224,7 @@ void ScreenSelectGroup::MenuStart( PlayerNumber pn )
|
|||||||
m_bChosen = true;
|
m_bChosen = true;
|
||||||
|
|
||||||
GAMESTATE->m_pCurSong.Set( NULL );
|
GAMESTATE->m_pCurSong.Set( NULL );
|
||||||
GAMESTATE->m_sPreferredSongGroup = (m_GroupList.GetSelectionName()=="ALL MUSIC" ? GROUP_ALL_MUSIC : m_GroupList.GetSelectionName() );
|
GAMESTATE->m_sPreferredSongGroup.Set( m_GroupList.GetSelectionName()=="ALL MUSIC" ? GROUP_ALL_MUSIC : m_GroupList.GetSelectionName() );
|
||||||
|
|
||||||
if( GAMESTATE->m_sPreferredSongGroup == GROUP_ALL_MUSIC )
|
if( GAMESTATE->m_sPreferredSongGroup == GROUP_ALL_MUSIC )
|
||||||
SOUND->PlayOnceFromAnnouncer( "select group comment all music" );
|
SOUND->PlayOnceFromAnnouncer( "select group comment all music" );
|
||||||
|
|||||||
@@ -1582,7 +1582,7 @@ void ScreenSelectMusic::AfterMusicChange()
|
|||||||
switch( m_MusicWheel.GetSelectedType() )
|
switch( m_MusicWheel.GetSelectedType() )
|
||||||
{
|
{
|
||||||
case TYPE_SECTION:
|
case TYPE_SECTION:
|
||||||
g_sBannerPath = SONGMAN->GetGroupBannerPath( sGroup );
|
g_sBannerPath = SONGMAN->GetSongGroupBannerPath( sGroup );
|
||||||
m_sSampleMusicToPlay = m_sSectionMusicPath;
|
m_sSampleMusicToPlay = m_sSectionMusicPath;
|
||||||
break;
|
break;
|
||||||
case TYPE_SORT:
|
case TYPE_SORT:
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ void ScreenTitleMenu::Init()
|
|||||||
|
|
||||||
m_textSongs.LoadFromFont( THEME->GetPathF("Common","normal") );
|
m_textSongs.LoadFromFont( THEME->GetPathF("Common","normal") );
|
||||||
m_textSongs.SetName( "Songs" );
|
m_textSongs.SetName( "Songs" );
|
||||||
CString text = ssprintf("%d songs in %d groups, %d courses", SONGMAN->GetNumSongs(), SONGMAN->GetNumGroups(), SONGMAN->GetNumCourses() );
|
CString text = ssprintf("%d songs in %d groups, %d courses in %d groups", SONGMAN->GetNumSongs(), SONGMAN->GetNumSongGroups(), SONGMAN->GetNumCourses(), SONGMAN->GetNumCourseGroups() );
|
||||||
if( PREFSMAN->m_bUseUnlockSystem )
|
if( PREFSMAN->m_bUseUnlockSystem )
|
||||||
text += ssprintf(", %d unlocks", UNLOCKMAN->GetNumUnlocks() );
|
text += ssprintf(", %d unlocks", UNLOCKMAN->GetNumUnlocks() );
|
||||||
m_textSongs.SetText( text );
|
m_textSongs.SetText( text );
|
||||||
|
|||||||
@@ -171,19 +171,18 @@ void SongManager::LoadStepManiaSongDir( CString sDir, LoadingWindow *ld )
|
|||||||
CStringArray arrayGroupDirs;
|
CStringArray arrayGroupDirs;
|
||||||
GetDirListing( sDir+"*", arrayGroupDirs, true );
|
GetDirListing( sDir+"*", arrayGroupDirs, true );
|
||||||
SortCStringArray( arrayGroupDirs );
|
SortCStringArray( arrayGroupDirs );
|
||||||
|
StripCvs( arrayGroupDirs );
|
||||||
|
|
||||||
for( unsigned i=0; i< arrayGroupDirs.size(); i++ ) // for each dir in /Songs/
|
FOREACH_CONST( CString, arrayGroupDirs, s ) // foreach dir in /Songs/
|
||||||
{
|
{
|
||||||
CString sGroupDirName = arrayGroupDirs[i];
|
CString sGroupDirName = *s;
|
||||||
|
|
||||||
if( 0 == stricmp( sGroupDirName, "cvs" ) ) // the directory called "CVS"
|
|
||||||
continue; // ignore it
|
|
||||||
|
|
||||||
SanityCheckGroupDir(sDir+sGroupDirName);
|
SanityCheckGroupDir(sDir+sGroupDirName);
|
||||||
|
|
||||||
// Find all Song folders in this group directory
|
// Find all Song folders in this group directory
|
||||||
CStringArray arraySongDirs;
|
CStringArray arraySongDirs;
|
||||||
GetDirListing( sDir+sGroupDirName + "/*", arraySongDirs, true, true );
|
GetDirListing( sDir+sGroupDirName + "/*", arraySongDirs, true, true );
|
||||||
|
StripCvs( arraySongDirs );
|
||||||
SortCStringArray( arraySongDirs );
|
SortCStringArray( arraySongDirs );
|
||||||
|
|
||||||
LOG->Trace("Attempting to load %i songs from \"%s\"", int(arraySongDirs.size()),
|
LOG->Trace("Attempting to load %i songs from \"%s\"", int(arraySongDirs.size()),
|
||||||
@@ -194,9 +193,6 @@ void SongManager::LoadStepManiaSongDir( CString sDir, LoadingWindow *ld )
|
|||||||
{
|
{
|
||||||
CString sSongDirName = arraySongDirs[j];
|
CString sSongDirName = arraySongDirs[j];
|
||||||
|
|
||||||
if( 0 == stricmp( Basename(sSongDirName), "cvs" ) ) // the directory called "CVS"
|
|
||||||
continue; // ignore it
|
|
||||||
|
|
||||||
// this is a song directory. Load a new song!
|
// this is a song directory. Load a new song!
|
||||||
if( ld )
|
if( ld )
|
||||||
{
|
{
|
||||||
@@ -226,7 +222,7 @@ void SongManager::LoadStepManiaSongDir( CString sDir, LoadingWindow *ld )
|
|||||||
AddGroup(sDir, sGroupDirName);
|
AddGroup(sDir, sGroupDirName);
|
||||||
|
|
||||||
/* Cache and load the group banner. */
|
/* Cache and load the group banner. */
|
||||||
BANNERCACHE->CacheBanner( GetGroupBannerPath(sGroupDirName) );
|
BANNERCACHE->CacheBanner( GetSongGroupBannerPath(sGroupDirName) );
|
||||||
|
|
||||||
/* Load the group sym links (if any)*/
|
/* Load the group sym links (if any)*/
|
||||||
LoadGroupSymLinks(sDir, sGroupDirName);
|
LoadGroupSymLinks(sDir, sGroupDirName);
|
||||||
@@ -312,44 +308,38 @@ void SongManager::FreeSongs()
|
|||||||
m_pShuffledSongs.clear();
|
m_pShuffledSongs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
CString SongManager::GetGroupBannerPath( CString sGroupName )
|
CString SongManager::GetSongGroupBannerPath( CString sSongGroup )
|
||||||
{
|
{
|
||||||
unsigned i;
|
for( unsigned i = 0; i < m_sSongGroupNames.size(); ++i )
|
||||||
for(i = 0; i < m_sSongGroupNames.size(); ++i)
|
{
|
||||||
if( sGroupName == m_sSongGroupNames[i] ) break;
|
if( sSongGroup == m_sSongGroupNames[i] )
|
||||||
|
return m_sSongGroupBannerPaths[i];
|
||||||
|
}
|
||||||
|
|
||||||
if( i == m_sSongGroupNames.size() )
|
ASSERT_M( 0, ssprintf("requested banner for song group '%s' that doesn't exist",sSongGroup.c_str()) );
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
return m_sSongGroupBannerPaths[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SongManager::GetGroupNames( CStringArray &AddTo )
|
void SongManager::GetSongGroupNames( CStringArray &AddTo )
|
||||||
{
|
{
|
||||||
AddTo.insert(AddTo.end(), m_sSongGroupNames.begin(), m_sSongGroupNames.end() );
|
AddTo.insert(AddTo.end(), m_sSongGroupNames.begin(), m_sSongGroupNames.end() );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SongManager::DoesGroupExist( CString sGroupName )
|
bool SongManager::DoesSongGroupExist( CString sSongGroup )
|
||||||
{
|
{
|
||||||
for( unsigned i = 0; i < m_sSongGroupNames.size(); ++i )
|
return find( m_sSongGroupNames.begin(), m_sSongGroupNames.end(), sSongGroup ) != m_sSongGroupNames.end();
|
||||||
if( !m_sSongGroupNames[i].CompareNoCase(sGroupName) )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RageColor SongManager::GetSongGroupColor( const CString &sSongGroupName )
|
RageColor SongManager::GetSongGroupColor( const CString &sSongGroup )
|
||||||
{
|
{
|
||||||
// search for the group index
|
for( unsigned i=0; i<m_sSongGroupNames.size(); i++ )
|
||||||
unsigned i;
|
|
||||||
for( i=0; i<m_sSongGroupNames.size(); i++ )
|
|
||||||
{
|
{
|
||||||
if( m_sSongGroupNames[i] == sSongGroupName )
|
if( m_sSongGroupNames[i] == sSongGroup )
|
||||||
break;
|
return SONG_GROUP_COLOR.GetValue( i%NUM_SONG_GROUP_COLORS ); // TODO: Add course group colors?
|
||||||
}
|
}
|
||||||
ASSERT_M( i != m_sSongGroupNames.size(), sSongGroupName ); // this is not a valid group
|
|
||||||
|
|
||||||
return SONG_GROUP_COLOR.GetValue( i%NUM_SONG_GROUP_COLORS );
|
ASSERT_M( 0, ssprintf("requested color for song group '%s' that doesn't exist",sSongGroup.c_str()) );
|
||||||
|
return RageColor(1,1,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
RageColor SongManager::GetSongColor( const Song* pSong )
|
RageColor SongManager::GetSongColor( const Song* pSong )
|
||||||
@@ -390,17 +380,38 @@ RageColor SongManager::GetSongColor( const Song* pSong )
|
|||||||
return GetSongGroupColor( pSong->m_sGroupName );
|
return GetSongGroupColor( pSong->m_sGroupName );
|
||||||
}
|
}
|
||||||
|
|
||||||
RageColor SongManager::GetCourseGroupColor( const CString &sCourseGroupName )
|
CString SongManager::GetCourseGroupBannerPath( CString sCourseGroup )
|
||||||
{
|
{
|
||||||
// search for the group index
|
for( unsigned i = 0; i < m_sCourseGroupNames.size(); ++i )
|
||||||
unsigned i;
|
|
||||||
for( i=0; i<m_sCourseGroupNames.size(); i++ )
|
|
||||||
{
|
{
|
||||||
if( m_sCourseGroupNames[i] == sCourseGroupName )
|
if( sCourseGroup == m_sCourseGroupNames[i] )
|
||||||
break;
|
return m_sCourseGroupBannerPaths[i];
|
||||||
}
|
}
|
||||||
ASSERT_M( i != m_sCourseGroupNames.size(), "Course: '" + sCourseGroupName + "' is not a valid group." ); // this is not a valid group
|
|
||||||
return COURSE_GROUP_COLOR.GetValue( i%NUM_COURSE_GROUP_COLORS.GetValue() );
|
ASSERT_M( 0, ssprintf("requested banner for course group '%s' that doesn't exist",sCourseGroup.c_str()) );
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void SongManager::GetCourseGroupNames( CStringArray &AddTo )
|
||||||
|
{
|
||||||
|
AddTo.insert(AddTo.end(), m_sCourseGroupNames.begin(), m_sCourseGroupNames.end() );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SongManager::DoesCourseGroupExist( CString sCourseGroup )
|
||||||
|
{
|
||||||
|
return find( m_sCourseGroupNames.begin(), m_sCourseGroupNames.end(), sCourseGroup ) != m_sCourseGroupNames.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
RageColor SongManager::GetCourseGroupColor( const CString &sCourseGroup )
|
||||||
|
{
|
||||||
|
for( unsigned i=0; i<m_sCourseGroupNames.size(); i++ )
|
||||||
|
{
|
||||||
|
if( m_sCourseGroupNames[i] == sCourseGroup )
|
||||||
|
return SONG_GROUP_COLOR.GetValue( i%NUM_SONG_GROUP_COLORS );
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT_M( 0, ssprintf("requested color for course group '%s' that doesn't exist",sCourseGroup.c_str()) );
|
||||||
|
return RageColor(1,1,1,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
RageColor SongManager::GetCourseColor( const Course* pCourse )
|
RageColor SongManager::GetCourseColor( const Course* pCourse )
|
||||||
@@ -447,7 +458,7 @@ int SongManager::GetNumSongs() const
|
|||||||
return m_pSongs.size();
|
return m_pSongs.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int SongManager::GetNumGroups() const
|
int SongManager::GetNumSongGroups() const
|
||||||
{
|
{
|
||||||
return m_sSongGroupNames.size();
|
return m_sSongGroupNames.size();
|
||||||
}
|
}
|
||||||
@@ -457,6 +468,11 @@ int SongManager::GetNumCourses() const
|
|||||||
return m_pCourses.size();
|
return m_pCourses.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SongManager::GetNumCourseGroups() const
|
||||||
|
{
|
||||||
|
return m_sCourseGroupNames.size();
|
||||||
|
}
|
||||||
|
|
||||||
CString SongManager::ShortenGroupName( CString sLongGroupName )
|
CString SongManager::ShortenGroupName( CString sLongGroupName )
|
||||||
{
|
{
|
||||||
sLongGroupName.Replace( "Dance Dance Revolution", "DDR" );
|
sLongGroupName.Replace( "Dance Dance Revolution", "DDR" );
|
||||||
@@ -529,22 +545,19 @@ void SongManager::InitCoursesFromDisk( LoadingWindow *ld )
|
|||||||
m_sCourseGroupNames.push_back( "" );
|
m_sCourseGroupNames.push_back( "" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Search for course group banners if any
|
||||||
|
FOREACH( CString, m_sCourseGroupNames, s )
|
||||||
|
m_sCourseGroupBannerPaths.push_back( "" );
|
||||||
|
|
||||||
|
|
||||||
// Find all group directories in Courses dir
|
// Find all group directories in Courses dir
|
||||||
{
|
{
|
||||||
GetDirListing( COURSES_DIR+"*", m_sCourseGroupNames, true );
|
GetDirListing( COURSES_DIR+"*", m_sCourseGroupNames, true );
|
||||||
|
StripCvs( m_sCourseGroupNames );
|
||||||
SortCStringArray( m_sCourseGroupNames );
|
SortCStringArray( m_sCourseGroupNames );
|
||||||
|
|
||||||
FOREACH( CString, m_sCourseGroupNames, sCourseGroup ) // for each dir in /Courses/
|
FOREACH( CString, m_sCourseGroupNames, sCourseGroup ) // for each dir in /Courses/
|
||||||
{
|
{
|
||||||
if( 0 == stricmp( *sCourseGroup, "cvs" ) ) // the directory called "CVS"
|
|
||||||
{
|
|
||||||
vector<CString>::iterator eraseme = sCourseGroup;
|
|
||||||
sCourseGroup--;
|
|
||||||
m_sCourseGroupNames.erase( eraseme );
|
|
||||||
continue; // ignore it
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find all CRS files in this group directory
|
// Find all CRS files in this group directory
|
||||||
CStringArray vsCoursePaths;
|
CStringArray vsCoursePaths;
|
||||||
GetDirListing( COURSES_DIR + *sCourseGroup + "/*.crs", vsCoursePaths, false, true );
|
GetDirListing( COURSES_DIR + *sCourseGroup + "/*.crs", vsCoursePaths, false, true );
|
||||||
@@ -574,7 +587,7 @@ void SongManager::InitAutogenCourses()
|
|||||||
// Create group courses for Endless and Nonstop
|
// Create group courses for Endless and Nonstop
|
||||||
//
|
//
|
||||||
CStringArray saGroupNames;
|
CStringArray saGroupNames;
|
||||||
this->GetGroupNames( saGroupNames );
|
this->GetSongGroupNames( saGroupNames );
|
||||||
Course* pCourse;
|
Course* pCourse;
|
||||||
for( unsigned g=0; g<saGroupNames.size(); g++ ) // foreach Group
|
for( unsigned g=0; g<saGroupNames.size(); g++ ) // foreach Group
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,14 +49,16 @@ public:
|
|||||||
void Reload( LoadingWindow *ld=NULL ); // songs, courses, groups - everything.
|
void Reload( LoadingWindow *ld=NULL ); // songs, courses, groups - everything.
|
||||||
void PreloadSongImages();
|
void PreloadSongImages();
|
||||||
|
|
||||||
|
CString GetSongGroupBannerPath( CString sSongGroup );
|
||||||
CString GetGroupBannerPath( CString sGroupName );
|
void GetSongGroupNames( CStringArray &AddTo );
|
||||||
void GetGroupNames( CStringArray &AddTo );
|
bool DoesSongGroupExist( CString sSongGroup );
|
||||||
bool DoesGroupExist( CString sGroupName );
|
|
||||||
|
|
||||||
RageColor GetSongGroupColor( const CString &sSongGroupName );
|
RageColor GetSongGroupColor( const CString &sSongGroupName );
|
||||||
RageColor GetSongColor( const Song* pSong );
|
RageColor GetSongColor( const Song* pSong );
|
||||||
RageColor GetDifficultyColor( Difficulty dc ) const;
|
RageColor GetDifficultyColor( Difficulty dc ) const;
|
||||||
|
|
||||||
|
CString GetCourseGroupBannerPath( CString sCourseGroup );
|
||||||
|
void GetCourseGroupNames( CStringArray &AddTo );
|
||||||
|
bool DoesCourseGroupExist( CString sCourseGroup );
|
||||||
RageColor GetCourseGroupColor( const CString &sCourseGroupName );
|
RageColor GetCourseGroupColor( const CString &sCourseGroupName );
|
||||||
RageColor GetCourseColor( const Course* pCourse );
|
RageColor GetCourseColor( const Course* pCourse );
|
||||||
|
|
||||||
@@ -75,8 +77,9 @@ public:
|
|||||||
Song *FindSong( CString sPath );
|
Song *FindSong( CString sPath );
|
||||||
Course *FindCourse( CString sName );
|
Course *FindCourse( CString sName );
|
||||||
int GetNumSongs() const;
|
int GetNumSongs() const;
|
||||||
int GetNumGroups() const;
|
int GetNumSongGroups() const;
|
||||||
int GetNumCourses() const;
|
int GetNumCourses() const;
|
||||||
|
int GetNumCourseGroups() const;
|
||||||
Song* GetRandomSong();
|
Song* GetRandomSong();
|
||||||
Course* GetRandomCourse();
|
Course* GetRandomCourse();
|
||||||
|
|
||||||
@@ -122,6 +125,7 @@ protected:
|
|||||||
vector<Course*> m_pBestCourses[NUM_PROFILE_SLOTS][NUM_COURSE_TYPES];
|
vector<Course*> m_pBestCourses[NUM_PROFILE_SLOTS][NUM_COURSE_TYPES];
|
||||||
vector<Course*> m_pShuffledCourses; // used by GetRandomCourse
|
vector<Course*> m_pShuffledCourses; // used by GetRandomCourse
|
||||||
CStringArray m_sCourseGroupNames;
|
CStringArray m_sCourseGroupNames;
|
||||||
|
CStringArray m_sCourseGroupBannerPaths; // each song group may have a banner associated with it
|
||||||
|
|
||||||
|
|
||||||
ThemeMetric<int> NUM_SONG_GROUP_COLORS;
|
ThemeMetric<int> NUM_SONG_GROUP_COLORS;
|
||||||
|
|||||||
@@ -141,15 +141,7 @@ ThemeManager::~ThemeManager()
|
|||||||
void ThemeManager::GetThemeNames( CStringArray& AddTo )
|
void ThemeManager::GetThemeNames( CStringArray& AddTo )
|
||||||
{
|
{
|
||||||
GetDirListing( THEMES_DIR + "*", AddTo, true );
|
GetDirListing( THEMES_DIR + "*", AddTo, true );
|
||||||
|
StripCvs( AddTo );
|
||||||
// strip out the folder called "CVS"
|
|
||||||
for( CStringArray::iterator i=AddTo.begin(); i != AddTo.end(); ++i )
|
|
||||||
{
|
|
||||||
if( *i == "CVS" ) {
|
|
||||||
AddTo.erase(i, i+1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ThemeManager::DoesThemeExist( const CString &sThemeName )
|
bool ThemeManager::DoesThemeExist( const CString &sThemeName )
|
||||||
|
|||||||
Reference in New Issue
Block a user