From 1e7e57a1c8a9ba4a27152476b88f29ee62785938 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 18 Oct 2004 04:19:20 +0000 Subject: [PATCH] always update m_fSecsIntoEffect add GetEffectDeltaTime() to allow easy access to the effect timer --- stepmania/src/Actor.cpp | 36 ++++++++++++++++++++---------------- stepmania/src/Actor.h | 6 +++++- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/stepmania/src/Actor.cpp b/stepmania/src/Actor.cpp index 305b446f8c..e983ca909f 100644 --- a/stepmania/src/Actor.cpp +++ b/stepmania/src/Actor.cpp @@ -30,6 +30,7 @@ void Actor::Reset() m_Effect = no_effect; m_fSecsIntoEffect = 0; + m_fEffectDelta = 0; m_fEffectPeriodSeconds = 1; m_fEffectDelay = 0; m_fEffectOffset = 0; @@ -305,6 +306,25 @@ void Actor::Update( float fDeltaTime ) if( m_fHibernateSecondsLeft > 0 ) return; + switch( m_EffectClock ) + { + case CLOCK_TIMER: + m_fSecsIntoEffect += fDeltaTime; + m_fEffectDelta = fDeltaTime; + m_fSecsIntoEffect = fmodfp( m_fSecsIntoEffect, m_fEffectPeriodSeconds + m_fEffectDelay ); + break; + + case CLOCK_BGM_BEAT: + m_fEffectDelta = g_fCurrentBGMBeat - m_fSecsIntoEffect; + m_fSecsIntoEffect = g_fCurrentBGMBeat; + break; + + case CLOCK_BGM_TIME: + m_fEffectDelta = g_fCurrentBGMTime - m_fSecsIntoEffect; + m_fSecsIntoEffect = g_fCurrentBGMTime; + break; + } + // update effect switch( m_Effect ) { @@ -319,22 +339,6 @@ void Actor::Update( float fDeltaTime ) case bounce: case bob: case pulse: - switch( m_EffectClock ) - { - case CLOCK_TIMER: - m_fSecsIntoEffect += fDeltaTime; - m_fSecsIntoEffect = fmodfp( m_fSecsIntoEffect, m_fEffectPeriodSeconds + m_fEffectDelay ); - break; - - case CLOCK_BGM_BEAT: - m_fSecsIntoEffect = g_fCurrentBGMBeat; - break; - - case CLOCK_BGM_TIME: - m_fSecsIntoEffect = g_fCurrentBGMTime; - break; - } - break; case spin: m_current.rotation += fDeltaTime*m_vEffectMagnitude; diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index 4c396d2213..6ef05e1027 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -364,12 +364,16 @@ protected: // Stuff for effects // Effect m_Effect; - float m_fSecsIntoEffect; + float m_fSecsIntoEffect, m_fEffectDelta; float m_fEffectPeriodSeconds; float m_fEffectDelay; float m_fEffectOffset; EffectClock m_EffectClock; + /* This can be used in lieu of the fDeltaTime parameter to Update() to + * follow the effect clock. Actor::Update must be called first. */ + float GetEffectDeltaTime() const { return m_fEffectDelta; } + RageColor m_effectColor1; RageColor m_effectColor2; RageVector3 m_vEffectMagnitude;