diff --git a/game/sim/aircraftsimulation.py b/game/sim/aircraftsimulation.py index 099680b6..8303fdaa 100644 --- a/game/sim/aircraftsimulation.py +++ b/game/sim/aircraftsimulation.py @@ -7,9 +7,7 @@ from datetime import datetime, timedelta from typing_extensions import TYPE_CHECKING -from game.ato.flightstate import ( - Uninitialized, -) +from game.ato.flightstate import Uninitialized, Completed, InCombat from game.settings.settings import FastForwardStopCondition, CombatResolutionMethod from .combat import CombatInitiator, FrozenCombat from .gameupdateevents import GameUpdateEvents @@ -71,10 +69,20 @@ class AircraftSimulation: events.complete_simulation() def set_initial_flight_states(self) -> None: + # Initialize flights in Uninitialized state now = self.game.simulation_time for flight in self.iter_flights(): flight.state.initialize(now) + # Recover combat instances from flight states. Flight state information is serialized + # when saving a game but the aircraft simulation state is not. Combat instances are + # de-duplicated as multiple flights can be involved in a single combat instance. + combats = set() + for flight in self.iter_flights(): + if type(flight.state) == InCombat: + combats.add(flight.state.combat) + self.combats = list(combats) + def iter_flights(self) -> Iterator[Flight]: packages = itertools.chain( self.game.blue.ato.packages, self.game.red.ato.packages