improve tween synchronization

This commit is contained in:
Chris Danford
2003-05-16 21:09:26 +00:00
parent 5227ac7ea1
commit c97ead322e
+13 -9
View File
@@ -203,23 +203,26 @@ void Actor::EndDraw()
void Actor::UpdateTweening( float fDeltaTime )
{
// update tweening
if( m_TweenStates.empty() )
while( 1 )
{
if( m_TweenStates.empty() ) // nothing to do
return;
// we are performing a tween
if( fDeltaTime == 0 ) // nothing will change
return;
// update current tween state
TweenState &TS = m_TweenStates[0]; // earliest tween
TweenInfo &TI = m_TweenInfo[0]; // earliest tween
if( TI.m_fTimeLeftInTween == TI.m_fTweenTime ) // we are just beginning this tween
{
// set the start position
m_start = m_current;
}
m_start = m_current; // set the start position
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;
@@ -246,6 +249,7 @@ void Actor::UpdateTweening( float fDeltaTime )
TweenState::MakeWeightedAverage( m_current, m_start, TS, fPercentAlongPath );
}
}
}
bool Actor::IsFirstUpdate()