void CNPC_Infected::RunAttackTask( int task ) { AutoMovement( ); Vector vecEnemyLKP = GetEnemyLKP(); // If our enemy was killed, but I'm not done animating, the last known position comes // back as the origin and makes the me face the world origin if my attack schedule // doesn't break when my enemy dies. (sjb) if( vecEnemyLKP != vec3_origin ) { if ( ( task == TASK_RANGE_ATTACK1 || task == TASK_RELOAD ) && ( CapabilitiesGet() & bits_CAP_AIM_GUN ) && FInAimCone( vecEnemyLKP ) ) { // Arms will aim, so leave body yaw as is GetMotor()->SetIdealYawAndUpdate( GetMotor()->GetIdealYaw(), AI_KEEP_YAW_SPEED ); } else { GetMotor()->SetIdealYawToTargetAndUpdate( vecEnemyLKP, AI_KEEP_YAW_SPEED ); } } CAnimationLayer *pPlayer = GetAnimOverlay( m_iAttackLayer ); if ( pPlayer->m_bSequenceFinished ) { if ( task == TASK_RELOAD && GetShotRegulator() ) { GetShotRegulator()->Reset( false ); } TaskComplete(); } }
void C_FirstpersonBody::StudioFrameAdvance() { BaseClass::StudioFrameAdvance(); for ( int i = 0; i < GetNumAnimOverlays(); i++ ) { C_AnimationLayer *pLayer = GetAnimOverlay( i ); if ( pLayer->m_nSequence < 0 ) { continue; } float rate = GetSequenceCycleRate( GetModelPtr(), pLayer->m_nSequence ); pLayer->m_flCycle += pLayer->m_flPlaybackRate * rate * gpGlobals->frametime; if ( pLayer->m_flCycle > 1.0f ) { pLayer->m_nSequence = -1; pLayer->m_flWeight = 0.0f; } } }