diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index ddc9fe1126..8404744d85 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -2288,6 +2288,7 @@ SoundOptions= AutogenOptions= BackgroundOptions= AutoAdjustGraphicDetail= +ReloadSongs/Courses= [TextBanner] Width=180 diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index f4322ba5ad..ccb63298bc 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -430,7 +430,7 @@ Screen* ScreenManager::MakeNewScreen( CString sClassName ) DISPLAY->ResetStats(); /* This is a convenient time to clean up our song cache. */ - SONGMAN->CleanData(); + SONGMAN->CompressSongs(); return ret; } diff --git a/stepmania/src/ScreenOptionsMenu.cpp b/stepmania/src/ScreenOptionsMenu.cpp index 7367fd347f..50ab0a8160 100644 --- a/stepmania/src/ScreenOptionsMenu.cpp +++ b/stepmania/src/ScreenOptionsMenu.cpp @@ -23,6 +23,7 @@ #include "GameManager.h" #include "GameState.h" #include "ThemeManager.h" +#include "SongManager.h" enum { @@ -35,6 +36,7 @@ enum { OM_GRAPHIC, OM_MACHINE, // OM_SOUND, + OM_RELOAD, NUM_OPTIONS_MENU_LINES }; @@ -48,6 +50,7 @@ OptionRow g_OptionsMenuLines[NUM_OPTIONS_MENU_LINES] = { OptionRow( "", "Graphic Options" ), OptionRow( "", "Machine Options" ), // OptionRow( "", "Sound Options" ), + OptionRow( "", "Reload Songs/Courses" ), }; ScreenOptionsMenu::ScreenOptionsMenu() : @@ -103,6 +106,11 @@ void ScreenOptionsMenu::GoToNextState() case OM_INPUT: SCREENMAN->SetNewScreen("ScreenInputOptions"); break; case OM_MACHINE: SCREENMAN->SetNewScreen("ScreenMachineOptions"); break; // case OM_SOUND: SCREENMAN->SetNewScreen("ScreenSoundOptions"); break; + case OM_RELOAD: + SONGMAN->ReloadSongs(); + SONGMAN->ReloadCourses(); + SCREENMAN->SetNewScreen( "ScreenTitleMenu" ); + break; default: // Exit SCREENMAN->SetNewScreen("ScreenTitleMenu"); } diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index b51b410ac5..bf6979e0f3 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -73,8 +73,8 @@ SongManager::SongManager( LoadingWindow *ld ) SONGMAN = this; try { - InitSongArrayFromDisk( ld ); - InitCoursesFromDisk(); + InitSongsFromDisk( ld ); + InitCoursesFromDisk( ld ); InitAutogenCourses(); InitMachineScoresFromDisk(); @@ -91,7 +91,23 @@ SongManager::~SongManager() { SaveMachineScoresToDisk(); - FreeSongArray(); + FreeSongs(); +} + + +void SongManager::ReloadSongs() +{ + FlushDirCache(); + FreeSongs(); + InitSongsFromDisk(NULL); +} + +void SongManager::ReloadCourses() +{ + FlushDirCache(); + FreeCourses(); + InitCoursesFromDisk(NULL); + InitAutogenCourses(); } void SongManager::SaveMachineScoresToDisk() @@ -105,7 +121,7 @@ void SongManager::SaveMachineScoresToDisk() } } -void SongManager::InitSongArrayFromDisk( LoadingWindow *ld ) +void SongManager::InitSongsFromDisk( LoadingWindow *ld ) { LoadStepManiaSongDir( SONGS_DIR, ld ); @@ -241,7 +257,7 @@ void SongManager::LoadStepManiaSongDir( CString sDir, LoadingWindow *ld ) } } -void SongManager::FreeSongArray() +void SongManager::FreeSongs() { for( unsigned i=0; iLoadFromCRSFile( saCourseFiles[i] ); m_pCourses.push_back( pCourse ); + + if( ld ) + { + ld->SetText( ssprintf("Loading courses...\n%s\n%s", + "Courses", + Basename(saCourseFiles[i]).c_str())); + ld->Paint(); + } + } @@ -781,6 +800,14 @@ void SongManager::InitCoursesFromDisk() for( unsigned j=0; jSetText( ssprintf("Loading courses...\n%s\n%s", + Basename(arrayGroupDirs[i]).c_str(), + Basename(arrayCoursePaths[j]).c_str())); + ld->Paint(); + } + Course* pCourse = new Course; pCourse->LoadFromCRSFile( arrayCoursePaths[j] ); m_pCourses.push_back( pCourse ); @@ -824,7 +851,7 @@ void SongManager::FreeCourses() /* Called periodically to wipe out cached NoteData. This is called when we change * screens. */ -void SongManager::CleanData() +void SongManager::CompressSongs() { for( unsigned i=0; i m_pCourses; - - void InitCoursesFromDisk(); - void InitAutogenCourses(); - void FreeCourses(); - void CleanData(); - - - // Lookup const vector &GetAllSongs() const { return m_pSongs; } const vector &GetBestSongs() const { return m_pBestSongs; } @@ -132,6 +126,7 @@ protected: vector m_pBestSongs; CStringArray m_arrayGroupNames; CStringArray m_GroupBannerPaths; // each song group has a banner associated with it + vector m_pCourses; };