From 21c35b31d411af1a5e4258efe79932cd07bf8559 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Sun, 25 Apr 2021 14:37:49 -0700 Subject: [PATCH] AI planning for anti shipping missions. Same as for anti convoy, these are rarely planned due to ordering issue between mission planning and procurement. Fixes https://github.com/Khopa/dcs_liberation/issues/826 --- gen/flights/ai_flight_planner.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/gen/flights/ai_flight_planner.py b/gen/flights/ai_flight_planner.py index 16882bc6..096de2ba 100644 --- a/gen/flights/ai_flight_planner.py +++ b/gen/flights/ai_flight_planner.py @@ -39,7 +39,7 @@ from game.theater.theatergroundobject import ( NavalGroundObject, VehicleGroupGroundObject, ) -from game.transfers import Convoy, MultiGroupTransport, TransferOrder +from game.transfers import CargoShip, Convoy from game.utils import Distance, nautical_miles from gen import Conflict from gen.ato import Package @@ -445,7 +445,7 @@ class ObjectiveFinder: airfields.append(control_point) return self._targets_by_range(airfields) - def convoys(self) -> Iterator[MultiGroupTransport]: + def convoys(self) -> Iterator[Convoy]: for front_line in self.front_lines(): if front_line.control_point_a.is_friendly(self.is_player): enemy_cp = front_line.control_point_a @@ -454,6 +454,15 @@ class ObjectiveFinder: yield from self.game.transfers.convoys.travelling_to(enemy_cp) + def cargo_ships(self) -> Iterator[CargoShip]: + for front_line in self.front_lines(): + if front_line.control_point_a.is_friendly(self.is_player): + enemy_cp = front_line.control_point_a + else: + enemy_cp = front_line.control_point_b + + yield from self.game.transfers.cargo_ships.travelling_to(enemy_cp) + def friendly_control_points(self) -> Iterator[ControlPoint]: """Iterates over all friendly control points.""" return ( @@ -668,6 +677,21 @@ class CoalitionMissionPlanner: ], ) + for ship in self.objective_finder.cargo_ships(): + yield ProposedMission( + ship, + [ + ProposedFlight(FlightType.ANTISHIP, 2, self.MAX_ANTISHIP_RANGE), + # TODO: Max escort range. + ProposedFlight( + FlightType.ESCORT, 2, self.MAX_BAI_RANGE, EscortType.AirToAir + ), + ProposedFlight( + FlightType.SEAD, 2, self.MAX_BAI_RANGE, EscortType.Sead + ), + ], + ) + for group in self.objective_finder.threatening_ships(): yield ProposedMission( group,