Exemplo n.º 1
0
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;
		}
	}
}