From 028bfc11eb53db983ab45c1c756ac077504b7bf4 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Sun, 25 Apr 2021 17:26:07 -0700 Subject: [PATCH] Fix convoys skipping intermediate stops. --- game/transfers.py | 29 +++++++++++++++++++++-------- gen/flights/flightplan.py | 4 ++-- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/game/transfers.py b/game/transfers.py index f77ed1a3..e87f2745 100644 --- a/game/transfers.py +++ b/game/transfers.py @@ -29,6 +29,9 @@ if TYPE_CHECKING: class Transport: + def __init__(self, destination: ControlPoint): + self.destination = destination + def find_escape_route(self) -> Optional[ControlPoint]: raise NotImplementedError @@ -98,6 +101,14 @@ class TransferOrder: location.base.commision_units(self.units) self.units.clear() + @property + def next_stop(self) -> ControlPoint: + if self.transport is None: + raise RuntimeError( + "TransferOrder.next_stop called with no transport assigned" + ) + return self.transport.destination + def proceed(self) -> None: if self.transport is None: return @@ -116,20 +127,22 @@ class TransferOrder: self.kill_all() return - self.position = self.destination + self.position = self.next_stop self.transport = None if self.completed: self.disband_at(self.position) -@dataclass class Airlift(Transport): """A transfer order that moves units by cargo planes and helicopters.""" - transfer: TransferOrder - - flight: Flight + def __init__( + self, transfer: TransferOrder, flight: Flight, next_stop: ControlPoint + ) -> None: + super().__init__(next_stop) + self.transfer = transfer + self.flight = flight @property def units(self) -> Dict[Type[VehicleType], int]: @@ -238,7 +251,7 @@ class AirliftPlanner: cargo=transfer, ) - transport = Airlift(transfer, flight) + transport = Airlift(transfer, flight, self.next_stop) transfer.transport = transport self.package.add_flight(flight) @@ -252,9 +265,9 @@ class MultiGroupTransport(MissionTarget, Transport): def __init__( self, name: str, origin: ControlPoint, destination: ControlPoint ) -> None: - super().__init__(name, origin.position) + MissionTarget.__init__(self, name, origin.position) + Transport.__init__(self, destination) self.origin = origin - self.destination = destination self.transfers: List[TransferOrder] = [] def is_friendly(self, to_player: bool) -> bool: diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index f00d351a..d045e3ea 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -1225,11 +1225,11 @@ class FlightPlanBuilder: pickup=pickup, nav_to_drop_off=builder.nav_path( cargo.origin.position, - cargo.destination.position, + cargo.next_stop.position, altitude, altitude_is_agl, ), - drop_off=builder.drop_off(cargo.destination), + drop_off=builder.drop_off(cargo.next_stop), nav_to_home=builder.nav_path( cargo.origin.position, flight.arrival.position,