//----------------------------------------------------------------------------- // Purpose: // Output : //----------------------------------------------------------------------------- float CAnimating::GetEntryVelocity( int iSequence ) { CStudioHdr *pstudiohdr = GetModelPtr( ); if (! pstudiohdr) return 0; Vector vecVelocity; Studio_SeqVelocity( pstudiohdr, iSequence, 0.0, GetPoseParameterArray(), vecVelocity ); return vecVelocity.Length(); }
//----------------------------------------------------------------------------- // Purpose: Returns the ground speed of the current sequence. //----------------------------------------------------------------------------- float StudioModel::GetCurrentVelocity( void ) { Vector vecVelocity; CStudioHdr *pStudioHdr = GetStudioHdr(); if (pStudioHdr && Studio_SeqVelocity( pStudioHdr, m_sequence, m_cycle, m_poseparameter, vecVelocity )) { return vecVelocity.Length(); } return 0; }
//----------------------------------------------------------------------------- // Purpose: // Output : //----------------------------------------------------------------------------- float CAnimating::GetInstantaneousVelocity( float flInterval ) { CStudioHdr *pstudiohdr = GetModelPtr( ); if (! pstudiohdr) return 0; // FIXME: someone needs to check for last frame, etc. float flNextCycle = GetCycle() + flInterval * GetSequenceCycleRate( GetSequence() ) * m_flPlaybackRate; Vector vecVelocity; Studio_SeqVelocity( pstudiohdr, GetSequence(), flNextCycle, GetPoseParameterArray(), vecVelocity ); vecVelocity *= m_flPlaybackRate; return vecVelocity.Length(); }