From b6b9b11b0fd47c511aa25f36ad197d8515e5c9c6 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Fri, 18 Mar 2005 04:13:19 +0000 Subject: [PATCH] don't bother unloading "unused" note skins; now we just load all the note skins we'll need in advance for a whole round --- stepmania/src/NoteField.cpp | 36 ++++++-------------------------- stepmania/src/NoteField.h | 2 +- stepmania/src/Player.cpp | 4 ++-- stepmania/src/Player.h | 2 +- stepmania/src/ScreenGameplay.cpp | 2 +- 5 files changed, 11 insertions(+), 35 deletions(-) diff --git a/stepmania/src/NoteField.cpp b/stepmania/src/NoteField.cpp index f27ca0d7ae..2365e33db2 100644 --- a/stepmania/src/NoteField.cpp +++ b/stepmania/src/NoteField.cpp @@ -68,38 +68,14 @@ void NoteField::CacheNoteSkin( CString skin ) m_NoteDisplays[ skin ] = nd; } -void NoteField::CacheAllUsedNoteSkins( bool bDeleteUnused ) +void NoteField::CacheAllUsedNoteSkins() { - /* Cache note skins. */ + /* Cache all note skins that we might need for the whole song, course or battle + * play, so we don't have to load them later (such as between course songs). */ vector skins; GAMESTATE->GetAllUsedNoteSkins( skins ); for( unsigned i=0; i < skins.size(); ++i ) CacheNoteSkin( skins[i] ); - - if( bDeleteUnused ) - { - set setToDelete; - for( map::iterator it = m_NoteDisplays.begin(); - it != m_NoteDisplays.end(); ++it ) - { - setToDelete.insert( it->first ); - } - - for( unsigned i=0; i < skins.size(); ++i ) - { - CString sSkin = skins[i]; - sSkin.ToLower(); - setToDelete.erase( sSkin ); - } - - /* Free note skins that are no longer used. */ - for( set::iterator it = setToDelete.begin(); it != setToDelete.end(); ++it ) - { - NoteDisplayCols *pNoteDisplay = m_NoteDisplays[*it]; - delete pNoteDisplay; - m_NoteDisplays.erase( *it ); - } - } } void NoteField::Load( @@ -120,9 +96,7 @@ void NoteField::Load( ASSERT( m_pNoteData->GetNumTracks() == GAMESTATE->GetCurrentStyle()->m_iColsPerPlayer ); - /* If we're in gameplay, we havn't applied course modifiers yet, so we don't know what - * note skins we'll need. Don't delete unused skins yet. */ - CacheAllUsedNoteSkins( false ); + CacheAllUsedNoteSkins(); RefreshBeatToNoteSkin(); } @@ -152,6 +126,8 @@ void NoteField::RefreshBeatToNoteSkin() map::iterator display = m_NoteDisplays.find( Skin ); if( display == m_NoteDisplays.end() ) { + /* Skins should always be loaded by CacheAllUsedNoteSkins. */ + LOG->Warn( "NoteField::RefreshBeatToNoteSkin: need note skin \"%s\" which should have been loaded alraedy", Skin.c_str() ); this->CacheNoteSkin( Skin ); display = m_NoteDisplays.find( Skin ); } diff --git a/stepmania/src/NoteField.h b/stepmania/src/NoteField.h index b11fc31665..2708825cfd 100644 --- a/stepmania/src/NoteField.h +++ b/stepmania/src/NoteField.h @@ -33,7 +33,7 @@ public: int m_iBeginMarker, m_iEndMarker; // only used with MODE_EDIT void FadeToFail(); - void CacheAllUsedNoteSkins( bool bDeleteUnused ); + void CacheAllUsedNoteSkins(); void CacheNoteSkin( CString skin ); void Step( int iCol, TapNoteScore score ); diff --git a/stepmania/src/Player.cpp b/stepmania/src/Player.cpp index b41ca4a1d9..f7da5727fa 100644 --- a/stepmania/src/Player.cpp +++ b/stepmania/src/Player.cpp @@ -1393,9 +1393,9 @@ float Player::GetMaxStepDistanceSeconds() return GAMESTATE->m_SongOptions.m_fMusicRate * ADJUSTED_WINDOW(Boo); } -void Player::CacheAllUsedNoteSkins( bool bDeleteUnused ) +void Player::CacheAllUsedNoteSkins() { - m_pNoteField->CacheAllUsedNoteSkins( bDeleteUnused ); + m_pNoteField->CacheAllUsedNoteSkins(); } void Player::FadeToFail() diff --git a/stepmania/src/Player.h b/stepmania/src/Player.h index cbdb3ae740..b86d602381 100644 --- a/stepmania/src/Player.h +++ b/stepmania/src/Player.h @@ -55,7 +55,7 @@ public: static float GetMaxStepDistanceSeconds(); - void CacheAllUsedNoteSkins( bool bDeleteUnused ); + void CacheAllUsedNoteSkins(); NoteData m_NoteData; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index 918f02b332..6340e9bf12 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -868,7 +868,7 @@ void ScreenGameplay::SetupSong( PlayerNumber p, int iSongIndex ) m_Player[p].ApplyWaitingTransforms(); /* Now that course options are applied, load any needed note skins and unload old ones. */ - m_Player[p].CacheAllUsedNoteSkins( true ); + m_Player[p].CacheAllUsedNoteSkins(); /* Update attack bOn flags. */ GAMESTATE->Update(0);