Esempio n. 1
0
void UpdateAI_ChasePlayer( AIComponentChasePlayer *pAiComponent, AvatarControllerComponent *pController )
{
	PlayerComponent *pTarget = NULL;
	float pTargetDistanceSquared = NumericLimits<float>::Maximum;
	Simd::Vector3 targetPosition = Simd::Vector3::Zero;
	Simd::Vector3 myPosition = Simd::Vector3::Zero;

	TransformComponent *pTransform = pAiComponent->GetComponentCollection()->GetFirst<TransformComponent>();
	
	if ( pTransform )
	{
		myPosition = pTransform->GetPosition();
		for (PlayerList::Iterator iter = g_PlayerList.Begin(); iter != g_PlayerList.End(); ++iter)
		{
			float d = (iter->Second() - myPosition).GetMagnitudeSquared();
			if ( d < pTargetDistanceSquared )
			{
				pTargetDistanceSquared = d;
				pTarget = iter->First();
				targetPosition = iter->Second();
			}
		}
	}
	
	if ( pTarget )
	{
		Simd::Vector3 moveDir = (targetPosition - myPosition).GetNormalized();

		pController->m_MoveDir.SetX( moveDir.GetElement(0));
		pController->m_MoveDir.SetY( moveDir.GetElement(1));
		pController->m_AimDir = Simd::Vector3::Zero;
		pController->m_bShoot = false;
	}
	else
	{
		pController->m_MoveDir = Simd::Vector2::Zero;
		pController->m_AimDir = Simd::Vector3::Zero;
		pController->m_bShoot = false;
	}
}