Clear transports when disbanding convoys.

Also changes when we clear the convoys. Because we plan when transfers
are added (to plan UI orders immediately) we were planning convoys when
delivering units, then clearing the convoys, then planning them again.

Aside from the wasted effort, when we cleared the convoys we forgot to
tell the transfer that they no longer had transport, so when replanning
they did not get a new convoy.
This commit is contained in:
Dan Albert 2021-04-24 15:13:29 -07:00
parent 6016ebd3b4
commit 17751e52fd
2 changed files with 10 additions and 3 deletions

View File

@ -291,7 +291,6 @@ class Game:
# Needs to happen *before* planning transfers so we don't cancel the # Needs to happen *before* planning transfers so we don't cancel the
self.reset_ato() self.reset_ato()
for control_point in self.theater.controlpoints: for control_point in self.theater.controlpoints:
control_point.process_turn(self) control_point.process_turn(self)

View File

@ -264,6 +264,7 @@ class Convoy(MissionTarget, Transport):
transfer.transport = self transfer.transport = self
def remove_units(self, transfer: TransferOrder) -> None: def remove_units(self, transfer: TransferOrder) -> None:
transfer.transport = None
self.transfers.remove(transfer) self.transfers.remove(transfer)
def kill_unit(self, unit_type: Type[VehicleType]) -> None: def kill_unit(self, unit_type: Type[VehicleType]) -> None:
@ -275,6 +276,11 @@ class Convoy(MissionTarget, Transport):
pass pass
raise KeyError raise KeyError
def disband(self) -> None:
for transfer in list(self.transfers):
self.remove_units(transfer)
self.transfers.clear()
@property @property
def size(self) -> int: def size(self) -> int:
return sum(sum(t.units.values()) for t in self.transfers) return sum(sum(t.units.values()) for t in self.transfers)
@ -337,6 +343,7 @@ class ConvoyMap:
yield destination_dict[destination] yield destination_dict[destination]
def disband_convoy(self, convoy: Convoy) -> None: def disband_convoy(self, convoy: Convoy) -> None:
self.convoys[convoy.origin][convoy.destination].disband()
del self.convoys[convoy.origin][convoy.destination] del self.convoys[convoy.origin][convoy.destination]
@staticmethod @staticmethod
@ -359,7 +366,8 @@ class ConvoyMap:
self.disband_convoy(convoy) self.disband_convoy(convoy)
def disband_all(self) -> None: def disband_all(self) -> None:
self.convoys = defaultdict(dict) for convoy in list(self):
self.disband_convoy(convoy)
def __iter__(self) -> Iterator[Convoy]: def __iter__(self) -> Iterator[Convoy]:
for destination_dict in self.convoys.values(): for destination_dict in self.convoys.values():
@ -444,9 +452,9 @@ class PendingTransfers:
if not transfer.completed: if not transfer.completed:
incomplete.append(transfer) incomplete.append(transfer)
self.pending_transfers = incomplete self.pending_transfers = incomplete
self.convoys.disband_all()
def plan_transports(self) -> None: def plan_transports(self) -> None:
self.convoys.disband_all()
for transfer in self.pending_transfers: for transfer in self.pending_transfers:
if transfer.transport is None: if transfer.transport is None:
self.arrange_transport(transfer) self.arrange_transport(transfer)