diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index 3c128f6b38..cce339b473 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -8,7 +8,7 @@ #include "RageLog.h" #include "arch/Dialog/Dialog.h" -float Actor::g_fCurrentBGMTime = 0; +float Actor::g_fCurrentBGMTime = 0, Actor::g_fCurrentBGMBeat; /* This is Reset instead of Init since many derived classes have Init() functions * that shouldn't change the position of the actor. */ @@ -326,7 +326,11 @@ void Actor::Update( float fDeltaTime ) m_fSecsIntoEffect = fmodfp( m_fSecsIntoEffect, m_fEffectPeriodSeconds + m_fEffectDelay ); break; - case CLOCK_BGM: + case CLOCK_BGM_BEAT: + m_fSecsIntoEffect = g_fCurrentBGMBeat; + break; + + case CLOCK_BGM_TIME: m_fSecsIntoEffect = g_fCurrentBGMTime; break; } @@ -458,7 +462,9 @@ void Actor::SetEffectClock( CString s ) { s.MakeLower(); if (s=="timer") SetEffectClock( CLOCK_TIMER ); - else if(s=="bgm") SetEffectClock( CLOCK_BGM ); + else if(s=="beat") SetEffectClock( CLOCK_BGM_BEAT ); + else if(s=="music") SetEffectClock( CLOCK_BGM_TIME ); + else if(s=="bgm") SetEffectClock( CLOCK_BGM_BEAT ); // compat, deprecated else ASSERT(0); } diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index 5a339295ab..88a242973d 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -18,8 +18,7 @@ public: virtual ~Actor() {} virtual void Reset(); - static void SetBGMTime( float fTime ) { g_fCurrentBGMTime = fTime; } - static float GetBGMTime() { return g_fCurrentBGMTime; } + static void SetBGMTime( float fTime, float fBeat ) { g_fCurrentBGMTime = fTime; g_fCurrentBGMBeat = fBeat; } enum TweenType { TWEEN_LINEAR, @@ -56,7 +55,7 @@ public: static void MakeWeightedAverage( TweenState& average_out, const TweenState& ts1, const TweenState& ts2, float fPercentBetween ); }; - enum EffectClock { CLOCK_TIMER, CLOCK_BGM, NUM_CLOCKS }; + enum EffectClock { CLOCK_TIMER, CLOCK_BGM_TIME, CLOCK_BGM_BEAT, NUM_CLOCKS }; void Draw(); // calls, NeedsDraw, BeginDraw, DrawPrimitives, EndDraw virtual bool EarlyAbortDraw() { return false; } // return true to early abort drawing of this Actor @@ -395,8 +394,8 @@ protected: // // global state - /// - static float g_fCurrentBGMTime; + // + static float g_fCurrentBGMTime, g_fCurrentBGMBeat; }; #endif diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 9d8528d487..fa831bdfa1 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -496,7 +496,7 @@ void GameState::ResetMusicStatistics() m_fCurBPS = 10; m_bFreeze = false; m_bPastHereWeGo = false; - Actor::SetBGMTime( 0 ); + Actor::SetBGMTime( 0, 0 ); } void GameState::ResetStageStatistics() @@ -552,7 +552,7 @@ void GameState::UpdateSongPosition( float fPositionSeconds, const TimingData &ti m_fMusicSeconds = fPositionSeconds; - Actor::SetBGMTime( m_fSongBeat ); + Actor::SetBGMTime( fPositionSeconds, m_fSongBeat ); // LOG->Trace( "m_fMusicSeconds = %f, m_fSongBeat = %f, m_fCurBPS = %f, m_bFreeze = %f", m_fMusicSeconds, m_fSongBeat, m_fCurBPS, m_bFreeze ); }