diff --git a/stepmania/src/NoteSkinManager.cpp b/stepmania/src/NoteSkinManager.cpp index 9c10f21300..18968da56d 100644 --- a/stepmania/src/NoteSkinManager.cpp +++ b/stepmania/src/NoteSkinManager.cpp @@ -102,16 +102,29 @@ void NoteSkinManager::LoadNoteSkinDataRecursive( const CString &sNoteSkinName, N void NoteSkinManager::GetNoteSkinNames( CStringArray &AddTo ) { - /* If the skin data for the current game isn't already load it, load it now. */ - if( m_pCurGame != GAMESTATE->m_pCurGame ) - RefreshNoteSkinData( GAMESTATE->m_pCurGame ); + GetNoteSkinNames( GAMESTATE->m_pCurGame, AddTo ); +} - /* Don't call GetNoteSkinNames below, since we don't want to call RefreshNoteSkinData; it's - * slow. */ - for( map::const_iterator iter = m_mapNameToData.begin(); - iter != m_mapNameToData.end(); ++iter ) +void NoteSkinManager::GetNoteSkinNames( const Game* pGame, CStringArray &AddTo, bool bFilterDefault ) +{ + if( pGame == m_pCurGame ) { - AddTo.push_back( iter->second.sName ); + /* Faster: */ + for( map::const_iterator iter = m_mapNameToData.begin(); + iter != m_mapNameToData.end(); ++iter ) + { + AddTo.push_back( iter->second.sName ); + } + } + else + { + CString sBaseSkinFolder = NOTESKINS_DIR + pGame->m_szName + "/"; + GetDirListing( sBaseSkinFolder + "*", AddTo, true ); + + // 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. */ @@ -120,26 +133,12 @@ void NoteSkinManager::GetNoteSkinNames( CStringArray &AddTo ) if( iter != AddTo.end() ) { AddTo.erase( iter ); - if( !PREFSMAN->m_bHideDefaultNoteSkin ) + if( !bFilterDefault || !PREFSMAN->m_bHideDefaultNoteSkin ) AddTo.insert( AddTo.begin(), "default" ); } } } -void NoteSkinManager::GetNoteSkinNames( const Game* game, CStringArray &AddTo ) -{ - RefreshNoteSkinData( game ); - - for( map::const_iterator iter = m_mapNameToData.begin(); - iter != m_mapNameToData.end(); ++iter ) - { - AddTo.push_back( iter->second.sName ); - } - - /* Put the note skins back. */ - RefreshNoteSkinData( GAMESTATE->m_pCurGame ); -} - bool NoteSkinManager::DoesNoteSkinExist( CString sSkinName ) { diff --git a/stepmania/src/NoteSkinManager.h b/stepmania/src/NoteSkinManager.h index e9ae277509..50a409c536 100644 --- a/stepmania/src/NoteSkinManager.h +++ b/stepmania/src/NoteSkinManager.h @@ -16,7 +16,7 @@ public: ~NoteSkinManager(); void RefreshNoteSkinData( const Game* game ); - void GetNoteSkinNames( const Game* game, CStringArray &AddTo ); + void GetNoteSkinNames( const Game* game, CStringArray &AddTo, bool bFilterDefault=true ); void GetNoteSkinNames( CStringArray &AddTo ); // looks up current const Game* in GAMESTATE bool DoesNoteSkinExist( CString sSkinName ); // looks up current const Game* in GAMESTATE