Fix convoys skipping intermediate stops.

This commit is contained in:
Dan Albert 2021-04-25 17:26:07 -07:00
parent b6cf7a4534
commit 028bfc11eb
2 changed files with 23 additions and 10 deletions

View File

@ -29,6 +29,9 @@ if TYPE_CHECKING:
class Transport: class Transport:
def __init__(self, destination: ControlPoint):
self.destination = destination
def find_escape_route(self) -> Optional[ControlPoint]: def find_escape_route(self) -> Optional[ControlPoint]:
raise NotImplementedError raise NotImplementedError
@ -98,6 +101,14 @@ class TransferOrder:
location.base.commision_units(self.units) location.base.commision_units(self.units)
self.units.clear() 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: def proceed(self) -> None:
if self.transport is None: if self.transport is None:
return return
@ -116,20 +127,22 @@ class TransferOrder:
self.kill_all() self.kill_all()
return return
self.position = self.destination self.position = self.next_stop
self.transport = None self.transport = None
if self.completed: if self.completed:
self.disband_at(self.position) self.disband_at(self.position)
@dataclass
class Airlift(Transport): class Airlift(Transport):
"""A transfer order that moves units by cargo planes and helicopters.""" """A transfer order that moves units by cargo planes and helicopters."""
transfer: TransferOrder def __init__(
self, transfer: TransferOrder, flight: Flight, next_stop: ControlPoint
flight: Flight ) -> None:
super().__init__(next_stop)
self.transfer = transfer
self.flight = flight
@property @property
def units(self) -> Dict[Type[VehicleType], int]: def units(self) -> Dict[Type[VehicleType], int]:
@ -238,7 +251,7 @@ class AirliftPlanner:
cargo=transfer, cargo=transfer,
) )
transport = Airlift(transfer, flight) transport = Airlift(transfer, flight, self.next_stop)
transfer.transport = transport transfer.transport = transport
self.package.add_flight(flight) self.package.add_flight(flight)
@ -252,9 +265,9 @@ class MultiGroupTransport(MissionTarget, Transport):
def __init__( def __init__(
self, name: str, origin: ControlPoint, destination: ControlPoint self, name: str, origin: ControlPoint, destination: ControlPoint
) -> None: ) -> None:
super().__init__(name, origin.position) MissionTarget.__init__(self, name, origin.position)
Transport.__init__(self, destination)
self.origin = origin self.origin = origin
self.destination = destination
self.transfers: List[TransferOrder] = [] self.transfers: List[TransferOrder] = []
def is_friendly(self, to_player: bool) -> bool: def is_friendly(self, to_player: bool) -> bool:

View File

@ -1225,11 +1225,11 @@ class FlightPlanBuilder:
pickup=pickup, pickup=pickup,
nav_to_drop_off=builder.nav_path( nav_to_drop_off=builder.nav_path(
cargo.origin.position, cargo.origin.position,
cargo.destination.position, cargo.next_stop.position,
altitude, altitude,
altitude_is_agl, altitude_is_agl,
), ),
drop_off=builder.drop_off(cargo.destination), drop_off=builder.drop_off(cargo.next_stop),
nav_to_home=builder.nav_path( nav_to_home=builder.nav_path(
cargo.origin.position, cargo.origin.position,
flight.arrival.position, flight.arrival.position,