diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index 248438fcfa..c5e8f1a400 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -238,6 +238,9 @@ Screen* ScreenManager::MakeNewScreen( CString sClassName ) * apparent. */ DISPLAY->ResetStats(); + /* This is a convenient time to clean up our song cache. */ + SONGMAN->CleanCourses(); + return ret; } diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index 6d493c3758..889bec0d93 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -512,6 +512,20 @@ void SongManager::ReloadCourses() } +/* Called periodically to wipe out cached NoteData. This is called when we change + * screens. */ +void SongManager::CleanCourses() +{ + for( unsigned i=0; im_apNotes.size(); n++ ) + { + m_pSongs[i]->m_apNotes[n]->Compress(); + } + } + +} + bool SongManager::GetExtraStageInfoFromCourse( bool bExtra2, CString sPreferredGroup, Song*& pSongOut, Notes*& pNotesOut, PlayerOptions& po_out, SongOptions& so_out ) { diff --git a/stepmania/src/SongManager.h b/stepmania/src/SongManager.h index 60f8afa102..8388e05198 100644 --- a/stepmania/src/SongManager.h +++ b/stepmania/src/SongManager.h @@ -57,6 +57,7 @@ public: void InitCoursesFromDisk(); void ReloadCourses(); + void CleanCourses(); void GetExtraStageInfo( bool bExtra2, CString sPreferredGroup, const StyleDef *s, Song*& pSongOut, Notes*& pNotesOut, PlayerOptions& po_out, SongOptions& so_out );