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; } }