public IEnumerable <Target> GetTargets(IEnumerable <EspionageReport> reports) { var farmsToAttack = reports.Where(m => m.Details.HasFlag(ReportDetails.Defense) && (m.DetectedDefence == null || ((PlanetDefences)m.DetectedDefence).TotalValue == 0) && m.Details.HasFlag(ReportDetails.Ships) && m.DetectedShips == null) .OrderByDescending(m => m.Resources.TotalWithPriority(ResourcePriority)); foreach (EspionageReport farm in farmsToAttack) { if (!AreSlotsAvailable() || !AreCargosAvailable()) { yield break; } Target target = new Target() { Destination = farm.Coordinate, Fleet = FleetComposition.ToPlunder(farm.Resources, Cargo), ExpectedPlunder = FleetComposition.GetPlunder(farm.Resources) }; int ships = target.Fleet.Ships[Cargo]; if (ships < MinimumCargosToSend) { yield break; } _cargoCount -= ships; _slots.Current++; yield return(target); } }