Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public bool IsEncounterEnemyGroup(CombatAI ai)
 {
     return(this.m_Ships.Any <Ship>((Func <Ship, bool>)(x => ai.IsEncounterPlayer(x.Player.ID))));
 }