public static EnemyGroupData GetEnemyGroupData( CombatAI ai, EnemyGroup eg, List <StellarBody> planets) { EnemyGroupData enemyGroupData = new EnemyGroupData(); enemyGroupData.DistanceFromColony = 0.0f; enemyGroupData.NumAggressive = 0; enemyGroupData.NumCivilian = 0; enemyGroupData.NumPassive = 0; enemyGroupData.NumUnarmed = 0; enemyGroupData.IsAttackingPlanetOrStation = false; enemyGroupData.IsEncounter = false; enemyGroupData.IsFreighter = false; enemyGroupData.IsStation = false; foreach (Ship ship in eg.m_Ships) { if (ship.ShipRole == ShipRole.FREIGHTER) { enemyGroupData.IsFreighter = true; } if (TaskGroup.IsValidTaskGroupShip(ship)) { switch (TaskGroup.GetTaskTypeFromShip(ship)) { case TaskGroupType.Aggressive: case TaskGroupType.Police: case TaskGroupType.BoardingGroup: case TaskGroupType.FollowGroup: case TaskGroupType.PlanetAssault: ++enemyGroupData.NumAggressive; break; case TaskGroupType.Passive: ++enemyGroupData.NumPassive; break; case TaskGroupType.Civilian: ++enemyGroupData.NumCivilian; break; case TaskGroupType.UnArmed: ++enemyGroupData.NumUnarmed; break; } } else if (ship.ShipClass == ShipClass.Station) { enemyGroupData.IsStation = true; } if (ship.Target != null && !enemyGroupData.IsAttackingPlanetOrStation) { if (ship.Target is Ship) { Ship target = ship.Target as Ship; enemyGroupData.IsAttackingPlanetOrStation = target.Player == ai.m_Player && target.ShipClass == ShipClass.Station; } else if (ship.Target is StellarBody && (ship.Target as StellarBody).Parameters.ColonyPlayerID == ai.m_Player.ID) { enemyGroupData.IsAttackingPlanetOrStation = true; } } enemyGroupData.IsEncounter = enemyGroupData.IsEncounter || ai.IsEncounterPlayer(ship.Player.ID); foreach (StellarBody planet in planets) { if (planet.Parameters.ColonyPlayerID == ai.m_Player.ID) { float lengthSquared = (planet.Parameters.Position - ship.Position).LengthSquared; if ((double)enemyGroupData.DistanceFromColony == 0.0 || (double)lengthSquared < (double)enemyGroupData.DistanceFromColony) { enemyGroupData.DistanceFromColony = lengthSquared; } } } } if ((double)enemyGroupData.DistanceFromColony > 0.0) { enemyGroupData.DistanceFromColony = (float)Math.Sqrt((double)enemyGroupData.DistanceFromColony); } return(enemyGroupData); }
public bool IsEncounterEnemyGroup(CombatAI ai) { return(this.m_Ships.Any <Ship>((Func <Ship, bool>)(x => ai.IsEncounterPlayer(x.Player.ID)))); }