#include "global.h" /* ----------------------------------------------------------------------------- Class: BGAnimation Desc: Particles used initially for background effects Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. Ben Nordstrom Chris Danford ----------------------------------------------------------------------------- */ #include "BGAnimation.h" #include "PrefsManager.h" #include "GameState.h" #include "IniFile.h" #include "BGAnimationLayer.h" #include "RageUtil.h" #include "song.h" #include "ThemeManager.h" const int MAX_LAYERS = 100; BGAnimation::BGAnimation() { m_fLengthSeconds = 10; } BGAnimation::~BGAnimation() { Unload(); } void BGAnimation::Unload() { for( unsigned i=0; iLoadFromStaticGraphic( sPath ); m_Layers.push_back( pLayer ); } void BGAnimation::LoadFromAniDir( CString sAniDir ) { Unload(); if( !sAniDir.empty() && sAniDir.Right(1) != SLASH ) sAniDir += SLASH; RAGE_ASSERT_M( IsADirectory(sAniDir), sAniDir + " isn't a directory" ); CString sPathToIni = sAniDir + "BGAnimation.ini"; if( DoesFileExist(sPathToIni) ) { // This is a new style BGAnimation (using .ini) IniFile ini(sPathToIni); ini.ReadFile(); int i; for( i=0; iLoadFromIni( sAniDir, sLayer ); m_Layers.push_back( pLayer ); } if( !ini.GetValue( "BGAnimation", "LengthSeconds", m_fLengthSeconds ) ) { m_fLengthSeconds = 0; for( i=0; (unsigned)i < m_Layers.size(); i++ ) m_fLengthSeconds = max(m_fLengthSeconds, m_Layers[i]->GetMaxTweenTimeLeft()); } } else { // This is an old style BGAnimation (not using .ini) // loading a directory of layers CStringArray asImagePaths; ASSERT( sAniDir != "" ); GetDirListing( sAniDir+"*.png", asImagePaths, false, true ); GetDirListing( sAniDir+"*.jpg", asImagePaths, false, true ); GetDirListing( sAniDir+"*.gif", asImagePaths, false, true ); GetDirListing( sAniDir+"*.avi", asImagePaths, false, true ); GetDirListing( sAniDir+"*.mpg", asImagePaths, false, true ); GetDirListing( sAniDir+"*.mpeg", asImagePaths, false, true ); GetDirListing( sAniDir+"*.sprite", asImagePaths, false, true ); SortCStringArray( asImagePaths ); for( unsigned i=0; iLoadFromAniLayerFile( asImagePaths[i] ); m_Layers.push_back( pLayer ); } } } void BGAnimation::LoadFromMovie( CString sMoviePath ) { Unload(); BGAnimationLayer* pLayer = new BGAnimationLayer; pLayer->LoadFromMovie( sMoviePath ); m_Layers.push_back( pLayer ); } void BGAnimation::LoadFromVisualization( CString sVisPath ) { Unload(); BGAnimationLayer* pLayer; Song* pSong = GAMESTATE->m_pCurSong; CString sSongBGPath = pSong && pSong->HasBackground() ? pSong->GetBackgroundPath() : THEME->GetPathToG("Common fallback background"); pLayer = new BGAnimationLayer; pLayer->LoadFromStaticGraphic( sSongBGPath ); m_Layers.push_back( pLayer ); pLayer = new BGAnimationLayer; pLayer->LoadFromVisualization( sVisPath ); m_Layers.push_back( pLayer ); } void BGAnimation::Update( float fDeltaTime ) { for( unsigned i=0; iUpdate( fDeltaTime ); } void BGAnimation::DrawPrimitives() { for( unsigned i=0; iDraw(); } void BGAnimation::GainingFocus( float fRate, bool bRewindMovie, bool bLoop ) { for( unsigned i=0; iGainingFocus( fRate, bRewindMovie, bLoop ); SetDiffuse( RageColor(1,1,1,1) ); } void BGAnimation::LosingFocus() { for( unsigned i=0; iLosingFocus(); } void BGAnimation::SetDiffuse( const RageColor &c ) { for( unsigned i=0; iSetDiffuse(c); } void BGAnimation::PlayOffCommand() { for( unsigned i=0; iPlayOffCommand(); }