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