From 17751e52fd6253910660d0935fb0c8a5989ede86 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Sat, 24 Apr 2021 15:13:29 -0700 Subject: [PATCH] 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. --- game/game.py | 1 - game/transfers.py | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/game/game.py b/game/game.py index 673ad30d..34ddb5bc 100644 --- a/game/game.py +++ b/game/game.py @@ -291,7 +291,6 @@ class Game: # Needs to happen *before* planning transfers so we don't cancel the self.reset_ato() - for control_point in self.theater.controlpoints: control_point.process_turn(self) diff --git a/game/transfers.py b/game/transfers.py index 24008293..1a5bfba1 100644 --- a/game/transfers.py +++ b/game/transfers.py @@ -264,6 +264,7 @@ class Convoy(MissionTarget, Transport): transfer.transport = self def remove_units(self, transfer: TransferOrder) -> None: + transfer.transport = None self.transfers.remove(transfer) def kill_unit(self, unit_type: Type[VehicleType]) -> None: @@ -275,6 +276,11 @@ class Convoy(MissionTarget, Transport): pass raise KeyError + def disband(self) -> None: + for transfer in list(self.transfers): + self.remove_units(transfer) + self.transfers.clear() + @property def size(self) -> int: return sum(sum(t.units.values()) for t in self.transfers) @@ -337,6 +343,7 @@ class ConvoyMap: yield destination_dict[destination] def disband_convoy(self, convoy: Convoy) -> None: + self.convoys[convoy.origin][convoy.destination].disband() del self.convoys[convoy.origin][convoy.destination] @staticmethod @@ -359,7 +366,8 @@ class ConvoyMap: self.disband_convoy(convoy) def disband_all(self) -> None: - self.convoys = defaultdict(dict) + for convoy in list(self): + self.disband_convoy(convoy) def __iter__(self) -> Iterator[Convoy]: for destination_dict in self.convoys.values(): @@ -444,9 +452,9 @@ class PendingTransfers: if not transfer.completed: incomplete.append(transfer) self.pending_transfers = incomplete + self.convoys.disband_all() def plan_transports(self) -> None: - self.convoys.disband_all() for transfer in self.pending_transfers: if transfer.transport is None: self.arrange_transport(transfer)