diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index 055c253d6d..03995a5559 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -8,7 +8,7 @@ #include "RageLog.h" #include "arch/Dialog/Dialog.h" -#include "GameState.h" /* XXX: ugly dependency */ +static float g_fCurrentBGMTime = 0; /* This is Reset instead of Init since many derived classes have Init() functions * that shouldn't change the position of the actor. */ @@ -59,6 +59,11 @@ Actor::Actor() m_bFirstUpdate = true; } +void Actor::SetBGMTime( float fTime ) +{ + g_fCurrentBGMTime = fTime; +} + void Actor::Draw() { if( m_bHidden ) @@ -324,7 +329,7 @@ void Actor::Update( float fDeltaTime ) break; case CLOCK_BGM: - m_fSecsIntoEffect = GAMESTATE->m_fSongBeat; + m_fSecsIntoEffect = g_fCurrentBGMTime; break; } diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index e2c02f9dd0..c920e34095 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -18,6 +18,8 @@ public: virtual ~Actor() {} virtual void Reset(); + static void SetBGMTime( float fTime ); + enum TweenType { TWEEN_LINEAR, TWEEN_ACCELERATE, @@ -53,7 +55,7 @@ public: static void MakeWeightedAverage( TweenState& average_out, const TweenState& ts1, const TweenState& ts2, float fPercentBetween ); }; - enum EffectClock { CLOCK_TIMER, CLOCK_BGM }; + enum EffectClock { CLOCK_TIMER, CLOCK_BGM, NUM_CLOCKS }; void Draw(); // calls, NeedsDraw, BeginDraw, DrawPrimitives, EndDraw virtual bool EarlyAbortDraw() { return false; } // return true to early abort drawing of this Actor diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 6c6a0e178a..00b44a54f0 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -499,6 +499,7 @@ void GameState::ResetMusicStatistics() m_fCurBPS = 10; m_bFreeze = false; m_bPastHereWeGo = false; + Actor::SetBGMTime( 0 ); } void GameState::ResetStageStatistics() @@ -555,6 +556,9 @@ void GameState::UpdateSongPosition( float fPositionSeconds, const TimingData &ti ASSERT_M( m_fSongBeat > -2000, ssprintf("%f %f", m_fSongBeat, fPositionSeconds) ); m_fMusicSeconds = fPositionSeconds; + + Actor::SetBGMTime( m_fSongBeat ); + // LOG->Trace( "m_fMusicSeconds = %f, m_fSongBeat = %f, m_fCurBPS = %f, m_bFreeze = %f", m_fMusicSeconds, m_fSongBeat, m_fCurBPS, m_bFreeze ); }