improve tween synchronization
This commit is contained in:
+13
-9
@@ -203,23 +203,26 @@ void Actor::EndDraw()
|
|||||||
|
|
||||||
void Actor::UpdateTweening( float fDeltaTime )
|
void Actor::UpdateTweening( float fDeltaTime )
|
||||||
{
|
{
|
||||||
// update tweening
|
while( 1 )
|
||||||
if( m_TweenStates.empty() )
|
{
|
||||||
|
if( m_TweenStates.empty() ) // nothing to do
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// we are performing a tween
|
if( fDeltaTime == 0 ) // nothing will change
|
||||||
|
return;
|
||||||
|
|
||||||
|
// update current tween state
|
||||||
TweenState &TS = m_TweenStates[0]; // earliest tween
|
TweenState &TS = m_TweenStates[0]; // earliest tween
|
||||||
TweenInfo &TI = m_TweenInfo[0]; // earliest tween
|
TweenInfo &TI = m_TweenInfo[0]; // earliest tween
|
||||||
|
|
||||||
if( TI.m_fTimeLeftInTween == TI.m_fTweenTime ) // we are just beginning this tween
|
if( TI.m_fTimeLeftInTween == TI.m_fTweenTime ) // we are just beginning this tween
|
||||||
{
|
m_start = m_current; // set the start position
|
||||||
// set the start position
|
|
||||||
m_start = m_current;
|
|
||||||
}
|
|
||||||
|
|
||||||
TI.m_fTimeLeftInTween -= fDeltaTime;
|
float fSecsToSubtract = min( TI.m_fTimeLeftInTween, fDeltaTime );
|
||||||
|
TI.m_fTimeLeftInTween -= fSecsToSubtract;
|
||||||
|
fDeltaTime -= fSecsToSubtract;
|
||||||
|
|
||||||
if( TI.m_fTimeLeftInTween <= 0 ) // The tweening is over. Stop the tweening
|
if( TI.m_fTimeLeftInTween == 0 ) // Current tween is over. Stop.
|
||||||
{
|
{
|
||||||
m_current = TS;
|
m_current = TS;
|
||||||
|
|
||||||
@@ -246,6 +249,7 @@ void Actor::UpdateTweening( float fDeltaTime )
|
|||||||
|
|
||||||
TweenState::MakeWeightedAverage( m_current, m_start, TS, fPercentAlongPath );
|
TweenState::MakeWeightedAverage( m_current, m_start, TS, fPercentAlongPath );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Actor::IsFirstUpdate()
|
bool Actor::IsFirstUpdate()
|
||||||
|
|||||||
Reference in New Issue
Block a user