示例#1
0
CGameObject* CEnemy::GetWhoIsAroundMe2(float Size)
{
   CGameObject* firstAllyInProximity = NULL;
   CGameObject* currentCloseGuy;
   CGameObject* currentObj = g_CollisionAvoidanceList;

   if (g_CollisionAvoidanceList == NULL)
      return NULL;

   const Sphere* es = GetSphere();
   Sphere MySphere = *es;

   MySphere.Radius = Size;

   do 
   {
      if (currentObj == this)
      {
         currentObj = currentObj->m_CollisionAvoidanceListNext;
         continue;
      }

      if (SphereToSphere(&MySphere, currentObj->GetSphere()))
      {
         if (firstAllyInProximity == NULL)
         {
            firstAllyInProximity = currentObj;
            currentCloseGuy  = currentObj;
         }
         else
         {
            currentCloseGuy->m_GuyNextToMe = currentObj;
            currentCloseGuy = currentObj;
         }
      }

   	currentObj = currentObj->m_CollisionAvoidanceListNext;

   } while(currentObj != NULL);

   return firstAllyInProximity;
}
示例#2
0
void CEnemy::TargetEnemy()
{
   CGameObject* pCurrentObj = GetWhoIsAroundMe2(400.0f);
   CGameObject* pFirstGuy = pCurrentObj;

   m_CurrentTarget = &g_Player;

   float Dist = DistanceSquare(&(GetSphere()->Center), &(g_Player.GetSphere()->Center));
   float TempDist;

   if (pCurrentObj != NULL)
   {
      do 
      {  
         switch(pCurrentObj->GetType())
         {
            case OBJ_BUILDING:
            case OBJ_BUILDING2:
            case OBJ_BUILDING3:
            {
               TempDist = DistanceSquare(&(GetSphere()->Center), &(pCurrentObj->GetSphere()->Center));
               if (TempDist < Dist)
               {
                  m_CurrentTarget = pCurrentObj;
                  Dist = TempDist;
               }

               break;
            };

            case OBJ_FTURRET:
            {
               TempDist = DistanceSquare(&(GetSphere()->Center), &(pCurrentObj->GetSphere()->Center));
               if (TempDist < Dist)
               {
                  m_CurrentTarget = pCurrentObj;
                  Dist = TempDist;
               }
               break;
            };

            case OBJ_CONVOY:
            {
               TempDist = DistanceSquare(&(GetSphere()->Center), &(pCurrentObj->GetSphere()->Center));
               if (TempDist < Dist)
               {
                  m_CurrentTarget = pCurrentObj;
                  Dist = TempDist;
               }
               break;
            };

            default:
               break;
         };

         pCurrentObj = pCurrentObj->m_GuyNextToMe;

      } while (pCurrentObj != NULL);
   }

   ClearWhoIsAroundMe(pFirstGuy);
}