fix save compat

This commit is contained in:
Eclipse/Druss99
2025-09-23 16:36:27 -04:00
committed by Raffson
parent 31c80dfd02
commit 9f10ecc884
21 changed files with 122 additions and 56 deletions

View File

@@ -105,6 +105,15 @@ class Coalition:
return state
def __setstate__(self, state: dict[str, Any]) -> None:
# Migration: Convert old boolean player values to Player enum
if "player" in state and isinstance(state["player"], bool):
from game.theater.player import Player
if state["player"]:
state["player"] = Player.BLUE
else:
state["player"] = Player.RED
self.__dict__.update(state)
# Regenerate any state that was not persisted.
self.on_load()

View File

@@ -56,7 +56,7 @@ https://en.wikipedia.org/wiki/Hierarchical_task_network
from __future__ import annotations
from datetime import datetime
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, Any
from game.ato.starttype import StartType
from game.commander.tasks.compound.nextaction import PlanNextAction
@@ -80,6 +80,18 @@ class TheaterCommander(Planner[TheaterState, TheaterCommanderTask]):
self.game = game
self.player = player
def __setstate__(self, state: dict[str, Any]) -> None:
# Migration: Convert old boolean player values to Player enum
if "player" in state and isinstance(state["player"], bool):
from game.theater.player import Player
if state["player"]:
state["player"] = Player.BLUE
else:
state["player"] = Player.RED
self.__dict__.update(state)
def plan_missions(self, now: datetime, tracer: MultiEventTracer) -> None:
state = TheaterState.from_game(self.game, self.player, now, tracer)
while True:

View File

@@ -321,7 +321,7 @@ class MissionResultsProcessor:
settings = cp.coalition.game.settings
factor = (
settings.frontline_reserves_factor
if cp.captured
if cp.captured.is_blue
else settings.frontline_reserves_factor_red
)

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
import itertools
from collections import defaultdict
from typing import Iterator, Optional, Sequence, TYPE_CHECKING
from typing import Iterator, Optional, Sequence, TYPE_CHECKING, Any
from game.ato.closestairfields import ObjectiveDistanceCache
from game.dcs.aircrafttype import AircraftType
@@ -27,6 +27,18 @@ class AirWing:
self.squadron_def_generator = SquadronDefGenerator(faction)
self.settings = game.settings
def __setstate__(self, state: dict[str, Any]) -> None:
# Migration: Convert old boolean player values to Player enum
if "player" in state and isinstance(state["player"], bool):
from game.theater.player import Player
if state["player"]:
state["player"] = Player.BLUE
else:
state["player"] = Player.RED
self.__dict__.update(state)
def unclaim_squadron_def(self, squadron: Squadron) -> None:
if squadron.aircraft in self.squadron_defs:
for squadron_def in self.squadron_defs[squadron.aircraft]:

View File

@@ -15,6 +15,7 @@ from faker import Faker
from game.ato import Flight, FlightType, Package
from game.settings import AutoAtoBehavior, Settings
from game.theater import ParkingType
from game.theater.player import Player
from .pilot import Pilot, PilotStatus
from ..db.database import Database
from ..radio.radios import RadioFrequency
@@ -24,7 +25,7 @@ if TYPE_CHECKING:
from game import Game
from game.coalition import Coalition
from game.dcs.aircrafttype import AircraftType
from game.theater import ControlPoint, MissionTarget, Player
from game.theater import ControlPoint, MissionTarget
from .operatingbases import OperatingBases
from .squadrondef import SquadronDef

View File

@@ -38,7 +38,16 @@ from collections import defaultdict
from dataclasses import dataclass, field
from datetime import datetime
from functools import singledispatchmethod
from typing import Generic, Iterator, List, Optional, Sequence, TYPE_CHECKING, TypeVar
from typing import (
Any,
Generic,
Iterator,
List,
Optional,
Sequence,
TYPE_CHECKING,
TypeVar,
)
from dcs.mapping import Point
@@ -246,10 +255,7 @@ class Airlift(Transport):
@property
def player_owned(self) -> bool:
if self.transfer.player.is_blue:
return True
else:
return False
return self.transfer.player.is_blue
def find_escape_route(self) -> Optional[ControlPoint]:
# TODO: Move units to closest base.
@@ -395,10 +401,9 @@ class MultiGroupTransport(MissionTarget, Transport):
self.transfers: List[TransferOrder] = []
def is_friendly(self, to_player: Player) -> bool:
if self.origin.captured.is_blue:
if self.origin.captured == to_player:
return True
else:
return False
return False
def add_units(self, transfer: TransferOrder) -> None:
self.transfers.append(transfer)
@@ -590,6 +595,18 @@ class PendingTransfers:
self.cargo_ships = CargoShipMap()
self.pending_transfers: List[TransferOrder] = []
def __setstate__(self, state: dict[str, Any]) -> None:
# Migration: Convert old boolean player values to Player enum
if "player" in state and isinstance(state["player"], bool):
from game.theater.player import Player
if state["player"]:
state["player"] = Player.BLUE
else:
state["player"] = Player.RED
self.__dict__.update(state)
def __iter__(self) -> Iterator[TransferOrder]:
yield from self.pending_transfers