From 1e6f968d8ec45ddb1023a2f00360def667104df3 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 14 Aug 2006 20:05:35 +0000 Subject: [PATCH] add AdditionalCourseFolders pref --- stepmania/src/PrefsManager.cpp | 1 + stepmania/src/PrefsManager.h | 1 + stepmania/src/SongManager.cpp | 47 +++++++++++++++++++++++++++++++--- stepmania/src/SongManager.h | 2 ++ stepmania/src/StepMania.cpp | 8 ++++++ 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index 9e72609075..9e1a0a9c00 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -299,6 +299,7 @@ PrefsManager::PrefsManager() : m_GetRankingName ( "GetRankingName", RANKING_ON ), m_ScoringType ( "ScoringType", SCORING_NEW ), m_sAdditionalSongFolders ( "AdditionalSongFolders", "" ), + m_sAdditionalCourseFolders ( "AdditionalCourseFolders", "" ), m_sAdditionalFolders ( "AdditionalFolders", "" ), m_sLastSeenVideoDriver ( "LastSeenVideoDriver", "" ), m_sVideoRenderers ( "VideoRenderers", "" ), // StepMania.cpp sets these on first run: diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index d34765d461..0d70c5d86f 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -201,6 +201,7 @@ public: Preference m_ScoringType; Preference m_sAdditionalSongFolders; + Preference m_sAdditionalCourseFolders; Preference m_sAdditionalFolders; Preference m_sLastSeenVideoDriver; diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index 87f90c017a..dc8df4829f 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -42,6 +42,7 @@ SongManager* SONGMAN = NULL; // global and accessable from anywhere in our progr const RString SONGS_DIR = "/Songs/"; const RString ADDITIONAL_SONGS_DIR = "/AdditionalSongs/"; const RString COURSES_DIR = "/Courses/"; +const RString ADDITIONAL_COURSES_DIR = "/AdditionalCourses/"; const RString EDIT_SUBDIR = "Edits/"; static const ThemeMetric EXTRA_COLOR ( "SongManager", "ExtraColor" ); @@ -608,6 +609,17 @@ int SongManager::GetNumCourses() const return m_pCourses.size(); } +int SongManager::GetNumAdditionalCourses() const +{ + int num = 0; + FOREACH_CONST( Course*, m_pCourses, i ) + { + if( SONGMAN->WasLoadedFromAdditionalCourses( *i ) ) + num++; + } + return num; +} + int SongManager::GetNumCourseGroups() const { return m_mapCourseGroupToInfo.size(); @@ -674,18 +686,37 @@ void SongManager::InitCoursesFromDisk( LoadingWindow *ld ) } - // Find all group directories in Courses dir + vector vsCourseDirs; + vsCourseDirs.push_back( COURSES_DIR ); + vsCourseDirs.push_back( ADDITIONAL_COURSES_DIR ); + + FOREACH_CONST( RString, vsCourseDirs, sDir ) { + // Find all group directories in Courses dir vector vsCourseGroupNames; - GetDirListing( COURSES_DIR+"*", vsCourseGroupNames, true ); + GetDirListing( *sDir + "*", vsCourseGroupNames, true ); StripCvs( vsCourseGroupNames ); SortRStringArray( vsCourseGroupNames ); - FOREACH( RString, vsCourseGroupNames, sCourseGroup ) // for each dir in /Courses/ + FOREACH_CONST( RString, vsCourseGroupNames, sCourseGroup ) // for each dir in /Courses/ { + +#if defined(ITG) + if( !ALLOW_ITG_NAMES_IN_ADDITIONAL_FOLDERS ) + { + // Don't load any folders containing "Marathon" so that they don't conflict with the official courses. + if( *sDir == ADDITIONAL_COURSES_DIR && BeginsWith(*sCourseGroup, "Marathon") ) + continue; + if( *sDir == ADDITIONAL_COURSES_DIR && BeginsWith(*sCourseGroup, "Survival") ) + continue; + if( *sDir == ADDITIONAL_COURSES_DIR && BeginsWith(*sCourseGroup, "Workout") ) + continue; + } +#endif + // Find all CRS files in this group directory vector vsCoursePaths; - GetDirListing( COURSES_DIR + *sCourseGroup + "/*.crs", vsCoursePaths, false, true ); + GetDirListing( *sDir + *sCourseGroup + "/*.crs", vsCoursePaths, false, true ); SortRStringArray( vsCoursePaths ); FOREACH_CONST( RString, vsCoursePaths, sCoursePath ) @@ -1069,6 +1100,12 @@ bool SongManager::WasLoadedFromAdditionalSongs( const Song *pSong ) const return BeginsWith( sDir, ADDITIONAL_SONGS_DIR ); } +bool SongManager::WasLoadedFromAdditionalCourses( const Course *pCourse ) const +{ + RString sDir = pCourse->m_sPath; + return BeginsWith( sDir, ADDITIONAL_COURSES_DIR ); +} + void SongManager::GetAllCourses( vector &AddTo, bool bIncludeAutogen ) { for( unsigned i=0; iGetNumAdditionalSongs() ); return 1; } static int GetNumSongGroups( T* p, lua_State *L ) { lua_pushnumber( L, p->GetNumSongGroups() ); return 1; } static int GetNumCourses( T* p, lua_State *L ) { lua_pushnumber( L, p->GetNumCourses() ); return 1; } + static int GetNumAdditionalCourses( T* p, lua_State *L ){ lua_pushnumber( L, p->GetNumAdditionalCourses() ); return 1; } static int GetNumCourseGroups( T* p, lua_State *L ) { lua_pushnumber( L, p->GetNumCourseGroups() ); return 1; } static int GetSongFromSteps( T* p, lua_State *L ) { @@ -1801,6 +1839,7 @@ public: ADD_METHOD( GetNumAdditionalSongs ); ADD_METHOD( GetNumSongGroups ); ADD_METHOD( GetNumCourses ); + ADD_METHOD( GetNumAdditionalCourses ); ADD_METHOD( GetNumCourseGroups ); ADD_METHOD( GetSongFromSteps ); diff --git a/stepmania/src/SongManager.h b/stepmania/src/SongManager.h index 6c6c9660aa..279a0b2851 100644 --- a/stepmania/src/SongManager.h +++ b/stepmania/src/SongManager.h @@ -91,6 +91,7 @@ public: int GetNumAdditionalSongs() const; int GetNumSongGroups() const; int GetNumCourses() const; + int GetNumAdditionalCourses() const; int GetNumCourseGroups() const; int GetNumEditCourses( ProfileSlot slot ) const; Song* GetRandomSong(); @@ -100,6 +101,7 @@ public: Song *GetSongFromSteps( Steps *pSteps ); void DeleteSteps( Steps *pSteps ); // transfers ownership of pSteps bool WasLoadedFromAdditionalSongs( const Song *pSong ) const; + bool WasLoadedFromAdditionalCourses( const Course *pCourse ) const; void GetAllCourses( vector &AddTo, bool bIncludeAutogen ); void GetCourses( CourseType ct, vector &AddTo, bool bIncludeAutogen ) const; diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index 58e61694bc..f7ab2ef7b8 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -978,6 +978,14 @@ int main(int argc, char* argv[]) for( unsigned i=0; i < dirs.size(); i++) FILEMAN->Mount( "dir", dirs[i], "/AdditionalSongs" ); } + if( PREFSMAN->m_sAdditionalCourseFolders.Get() != "" ) + { + vector dirs; + split( PREFSMAN->m_sAdditionalCourseFolders, ",", dirs, true ); + for( unsigned i=0; i < dirs.size(); i++) + FILEMAN->Mount( "dir", dirs[i], "/AdditionalCourses" ); + } + MountTreeOfZips( ZIPS_DIR ); /* One of the above filesystems might contain files that affect preferences, eg Data/Static.ini.