From 78d7035b0273bb4a468a83955729c2e7180cbd54 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Wed, 2 Mar 2005 03:20:12 +0000 Subject: [PATCH] prefer random backgrounds in / --- stepmania/src/Background.cpp | 72 +++++++++++++++++++++--------------- stepmania/src/Background.h | 4 +- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index 84c64a0bac..396ad6ad7d 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -213,8 +213,11 @@ Actor *Background::CreateSongBGA( CString sBGName ) const return NULL; } -CString Background::CreateRandomBGA() +CString Background::CreateRandomBGA( CString sPreferredSubDir ) { + if( sPreferredSubDir.Right(1) != "/" ) + sPreferredSubDir += '/'; + if( PREFSMAN->m_iBackgroundMode == PrefsManager::BGMODE_OFF ) return ""; @@ -230,34 +233,43 @@ CString Background::CreateRandomBGA() } CStringArray arrayPaths; - switch( PREFSMAN->m_iBackgroundMode ) + for( int i=0; i<2; i++ ) { - default: - FAIL_M( ssprintf("Invalid BackgroundMode: %i", (int)PREFSMAN->m_iBackgroundMode) ); - break; + switch( PREFSMAN->m_iBackgroundMode ) + { + default: + FAIL_M( ssprintf("Invalid BackgroundMode: %i", (int)PREFSMAN->m_iBackgroundMode) ); + break; - case PrefsManager::BGMODE_ANIMATIONS: - GetDirListing( BG_ANIMS_DIR+"*", arrayPaths, true, true ); - break; + case PrefsManager::BGMODE_ANIMATIONS: + GetDirListing( BG_ANIMS_DIR + sPreferredSubDir + "*", arrayPaths, true, true ); + break; - case PrefsManager::BGMODE_MOVIEVIS: - GetDirListing( VISUALIZATIONS_DIR + "*.avi", arrayPaths, false, true ); - GetDirListing( VISUALIZATIONS_DIR + "*.mpg", arrayPaths, false, true ); - GetDirListing( VISUALIZATIONS_DIR + "*.mpeg", arrayPaths, false, true ); - break; + case PrefsManager::BGMODE_MOVIEVIS: + GetDirListing( VISUALIZATIONS_DIR + sPreferredSubDir + "*.avi", arrayPaths, false, true ); + GetDirListing( VISUALIZATIONS_DIR + sPreferredSubDir + "*.mpg", arrayPaths, false, true ); + GetDirListing( VISUALIZATIONS_DIR + sPreferredSubDir + "*.mpeg", arrayPaths, false, true ); + break; - case PrefsManager::BGMODE_RANDOMMOVIES: - GetDirListing( RANDOMMOVIES_DIR + "*.avi", arrayPaths, false, true ); - GetDirListing( RANDOMMOVIES_DIR + "*.mpg", arrayPaths, false, true ); - GetDirListing( RANDOMMOVIES_DIR + "*.mpeg", arrayPaths, false, true ); - break; + case PrefsManager::BGMODE_RANDOMMOVIES: + GetDirListing( RANDOMMOVIES_DIR + sPreferredSubDir + "*.avi", arrayPaths, false, true ); + GetDirListing( RANDOMMOVIES_DIR + sPreferredSubDir + "*.mpg", arrayPaths, false, true ); + GetDirListing( RANDOMMOVIES_DIR + sPreferredSubDir + "*.mpeg", arrayPaths, false, true ); + break; + } + + // strip out "cvs" + for( int j=arrayPaths.size()-1; j>=0; j-- ) + if( Basename(arrayPaths[j]).CompareNoCase("cvs")==0 ) + arrayPaths.erase( arrayPaths.begin()+j, arrayPaths.begin()+j+1 ); + + if( !arrayPaths.empty() ) // found one + break; + + // now search without a subdir + sPreferredSubDir = ""; } - // strip out "cvs" - for( int j=arrayPaths.size()-1; j>=0; j-- ) - if( !Basename(arrayPaths[j]).CompareNoCase("cvs") ) - arrayPaths.erase( arrayPaths.begin()+j, arrayPaths.begin()+j+1 ); - if( arrayPaths.empty() ) return ""; @@ -300,7 +312,7 @@ CString Background::CreateRandomBGA() return file; } -void Background::LoadFromRandom( float fFirstBeat, float fLastBeat, const TimingData &timing ) +void Background::LoadFromRandom( float fFirstBeat, float fLastBeat, const TimingData &timing, CString sPreferredSubDir ) { // change BG every 4 bars for( float f=fFirstBeat; fm_BackgroundMode==PrefsManager::BGMODE_RANDOMMOVIES || // PREFSMAN->m_BackgroundMode==PrefsManager::BGMODE_MOVIEVIS; - CString sBGName = CreateRandomBGA(); + CString sBGName = CreateRandomBGA( sPreferredSubDir ); if( sBGName != "" ) m_aBGChanges.push_back( BackgroundChange(f,sBGName,1.f,bFade) ); } @@ -329,7 +341,7 @@ void Background::LoadFromRandom( float fFirstBeat, float fLastBeat, const Timing if( bpmseg.m_iStartIndex < iStartIndex || bpmseg.m_iStartIndex > iEndIndex ) continue; // skip - CString sBGName = CreateRandomBGA(); + CString sBGName = CreateRandomBGA( sPreferredSubDir ); if( sBGName != "" ) m_aBGChanges.push_back( BackgroundChange(NoteRowToBeat(bpmseg.m_iStartIndex),sBGName) ); } @@ -368,7 +380,7 @@ void Background::LoadFromSong( const Song* pSong ) bool bIsAlreadyLoaded = m_BGAnimations.find(sBGName) != m_BGAnimations.end(); - if( sBGName.CompareNoCase("-random-") && !bIsAlreadyLoaded ) + if( sBGName.CompareNoCase("-random-")!=0 && !bIsAlreadyLoaded ) { Actor *pTempBGA = CreateSongBGA( sBGName ); if( pTempBGA ) @@ -377,7 +389,7 @@ void Background::LoadFromSong( const Song* pSong ) } else // the background was not found. Use a random one instead { - sBGName = CreateRandomBGA(); + sBGName = CreateRandomBGA( pSong->m_sGroupName ); if( sBGName == "" ) sBGName = STATIC_BACKGROUND; } @@ -388,7 +400,7 @@ void Background::LoadFromSong( const Song* pSong ) } else // pSong doesn't have an animation plan { - LoadFromRandom( pSong->m_fFirstBeat, pSong->m_fLastBeat, pSong->m_Timing ); + LoadFromRandom( pSong->m_fFirstBeat, pSong->m_fLastBeat, pSong->m_Timing, pSong->m_sGroupName ); // end showing the static song background m_aBGChanges.push_back( BackgroundChange(pSong->m_fLastBeat,STATIC_BACKGROUND) ); @@ -432,7 +444,7 @@ void Background::LoadFromSong( const Song* pSong ) m_aBGChanges.erase( m_aBGChanges.begin()+i ); --i; - LoadFromRandom( fStartBeat, fLastBeat, pSong->m_Timing ); + LoadFromRandom( fStartBeat, fLastBeat, pSong->m_Timing, pSong->m_sGroupName ); } // At this point, we shouldn't have any BGChanges to "". "" is an invalid name. diff --git a/stepmania/src/Background.h b/stepmania/src/Background.h index 008ef77232..73c724706a 100644 --- a/stepmania/src/Background.h +++ b/stepmania/src/Background.h @@ -48,7 +48,7 @@ public: protected: const Song *m_pSong; - void LoadFromRandom( float fFirstBeat, float fLastBeat, const TimingData &timing ); + void LoadFromRandom( float fFirstBeat, float fLastBeat, const TimingData &timing, CString sPreferredSubDir ); int FindBGSegmentForBeat( float fBeat ) const; bool IsDangerPlayerVisible( PlayerNumber pn ); @@ -65,7 +65,7 @@ protected: BGAnimation m_DeadPlayer[NUM_PLAYERS]; Actor *CreateSongBGA( CString sBGName ) const; - CString CreateRandomBGA(); + CString CreateRandomBGA( CString sPreferredSubDir ); map m_BGAnimations; deque m_RandomBGAnimations;