void ConvertFromVectorToRay_t::Convert( vector )
{
// lean the body into velocity derivative (acceleration) to simulate maintaining a center of gravity
float flInterval = gpGlobals->curtime - m_flLastVelocityTestTime;
if ( flInterval > 0.025f )
{
flInterval = MIN( flInterval, 0.1f );
m_flLastVelocityTestTime = gpGlobals->curtime;
m_vecTargetAcceleration = ( m_pPlayer->GetLocalVelocity() - m_vecVelocityLast ) / flInterval;
m_vecTargetAcceleration.z = 0;
m_vecVelocityLast = m_pPlayer->GetLocalVelocity();
}
m_vecAcceleration = Approach( m_vecTargetAcceleration, m_vecAcceleration, m_flLastUpdateIncrement * 800.0f );
//#ifdef CLIENT_DLL
// debugoverlay->AddLineOverlay( m_vecPositionCurrent, m_vecPositionCurrent + m_vecAcceleration, 255,0,0, 255, 1, m_flLastUpdateIncrement );
//#else
// debugoverlay->AddLineOverlay( m_vecPositionCurrent, m_vecPositionCurrent + m_vecAcceleration, 0,0,255, 255, 1.5, m_flLastUpdateIncrement );
//#endif
QAngle temp;
VectorAngles( m_vecAcceleration, Vector(0,0,1), temp );
m_flAccelerationWeight = clamp( (m_vecAcceleration.Length() / CS_PLAYER_SPEED_RUN) * m_flSpeedAsPortionOfRunTopSpeed, 0, 1 );
m_flAccelerationWeight *= (1.0f - m_flLadderWeight);
m_tPoseParamMappings[ PLAYER_POSE_PARAM_LEAN_YAW ].SetValue( m_pPlayer, AngleNormalize( m_flFootYaw - temp[YAW] ) );
if ( GetLayerSequence( ANIMATION_LAYER_LEAN ) <= 0 )
{
MDLCACHE_CRITICAL_SECTION();
SetLayerSequence( ANIMATION_LAYER_LEAN, m_pPlayer->LookupSequence( "lean" ) );
}
SetLayerWeight( ANIMATION_LAYER_LEAN, m_flAccelerationWeight );
}