diff --git a/gen/aircraft.py b/gen/aircraft.py index f25c82fa..6a04bcc0 100644 --- a/gen/aircraft.py +++ b/gen/aircraft.py @@ -88,7 +88,7 @@ from game.theater.controlpoint import ( OffMapSpawn, ) from game.theater.theatergroundobject import TheaterGroundObject -from game.transfers import Convoy +from game.transfers import MultiGroupTransport from game.unitmap import UnitMap from game.utils import Distance, meters, nautical_miles from gen.ato import AirTaskingOrder, Package @@ -1719,7 +1719,7 @@ class BaiIngressBuilder(PydcsWaypointBuilder): target_group = self.package.target if isinstance(target_group, TheaterGroundObject): group_name = target_group.group_name - elif isinstance(target_group, Convoy): + elif isinstance(target_group, MultiGroupTransport): group_name = target_group.name else: logging.error( diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index 8e405552..f00d351a 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -1083,6 +1083,10 @@ class FlightPlanBuilder: flight, location, FlightWaypointType.INGRESS_BAI, targets ) + @staticmethod + def anti_ship_targets_for_tgo(tgo: TheaterGroundObject) -> List[StrikeTarget]: + return [StrikeTarget(f"{g.name} at {tgo.name}", g) for g in tgo.groups] + def generate_anti_ship(self, flight: Flight) -> StrikeFlightPlan: """Generates an anti-ship flight plan. @@ -1091,20 +1095,20 @@ class FlightPlanBuilder: """ location = self.package.target + from game.transfers import CargoShip + if isinstance(location, ControlPoint): - if location.is_fleet: - # The first group generated will be the carrier group itself. - location = location.ground_objects[0] - else: + if not location.is_fleet: raise InvalidObjectiveLocation(flight.flight_type, location) - - if not isinstance(location, TheaterGroundObject): + # The first group generated will be the carrier group itself. + targets = self.anti_ship_targets_for_tgo(location.ground_objects[0]) + elif isinstance(location, TheaterGroundObject): + targets = self.anti_ship_targets_for_tgo(location) + elif isinstance(location, CargoShip): + targets = [StrikeTarget(location.name, location)] + else: raise InvalidObjectiveLocation(flight.flight_type, location) - targets: List[StrikeTarget] = [] - for group in location.groups: - targets.append(StrikeTarget(f"{group.name} at {location.name}", group)) - return self.strike_flightplan( flight, location, FlightWaypointType.INGRESS_BAI, targets ) diff --git a/gen/flights/waypointbuilder.py b/gen/flights/waypointbuilder.py index 5487e2c0..d125ac9e 100644 --- a/gen/flights/waypointbuilder.py +++ b/gen/flights/waypointbuilder.py @@ -18,7 +18,7 @@ from dcs.unitgroup import Group, VehicleGroup if TYPE_CHECKING: from game import Game - from game.transfers import Convoy + from game.transfers import MultiGroupTransport from game.theater import ( ControlPoint, @@ -33,7 +33,7 @@ from .flight import Flight, FlightWaypoint, FlightWaypointType @dataclass(frozen=True) class StrikeTarget: name: str - target: Union[VehicleGroup, TheaterGroundObject, Unit, Group, Convoy] + target: Union[VehicleGroup, TheaterGroundObject, Unit, Group, MultiGroupTransport] class WaypointBuilder: diff --git a/qt_ui/windows/basemenu/DepartingConvoysMenu.py b/qt_ui/windows/basemenu/DepartingConvoysMenu.py index 3e49900a..8c1e67bd 100644 --- a/qt_ui/windows/basemenu/DepartingConvoysMenu.py +++ b/qt_ui/windows/basemenu/DepartingConvoysMenu.py @@ -12,14 +12,14 @@ from PySide2.QtWidgets import ( from game import db from game.theater import ControlPoint -from game.transfers import Convoy +from game.transfers import MultiGroupTransport from qt_ui.dialogs import Dialog from qt_ui.models import GameModel from qt_ui.uiconstants import VEHICLES_ICONS class DepartingConvoyInfo(QGroupBox): - def __init__(self, convoy: Convoy, game_model: GameModel) -> None: + def __init__(self, convoy: MultiGroupTransport, game_model: GameModel) -> None: super().__init__(f"{convoy.name} to {convoy.destination}") self.convoy = convoy @@ -78,11 +78,14 @@ class DepartingConvoysList(QFrame): task_box_layout = QGridLayout() scroll_content.setLayout(task_box_layout) - convoy_map = game_model.game.transfers.convoys - for convoy in convoy_map.departing_from(cp): + for convoy in game_model.game.transfers.convoys.departing_from(cp): group_info = DepartingConvoyInfo(convoy, game_model) task_box_layout.addWidget(group_info) + for cargo_ship in game_model.game.transfers.cargo_ships.departing_from(cp): + group_info = DepartingConvoyInfo(cargo_ship, game_model) + task_box_layout.addWidget(group_info) + scroll_content.setLayout(task_box_layout) scroll = QScrollArea() scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)