Load task priorities from YAML.

Not used yet.

https://github.com/dcs-liberation/dcs_liberation/issues/2809
This commit is contained in:
Dan Albert 2023-04-26 20:02:26 -07:00 committed by Raffson
parent ddd6063f25
commit 016a9b5762
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99

View File

@ -48,6 +48,7 @@ from game.utils import (
) )
if TYPE_CHECKING: if TYPE_CHECKING:
from game.ato import FlightType
from game.missiongenerator.aircraft.flightdata import FlightData from game.missiongenerator.aircraft.flightdata import FlightData
from game.missiongenerator.missiondata import MissionData from game.missiongenerator.missiondata import MissionData
from game.radio.radios import Radio, RadioFrequency, RadioRegistry from game.radio.radios import Radio, RadioFrequency, RadioRegistry
@ -198,6 +199,8 @@ class AircraftType(UnitType[Type[FlyingType]]):
# when no TGP is mounted on any station. # when no TGP is mounted on any station.
has_built_in_target_pod: bool has_built_in_target_pod: bool
task_priorities: dict[FlightType, int]
_by_name: ClassVar[dict[str, AircraftType]] = {} _by_name: ClassVar[dict[str, AircraftType]] = {}
_by_unit_type: ClassVar[dict[type[FlyingType], list[AircraftType]]] = defaultdict( _by_unit_type: ClassVar[dict[type[FlyingType], list[AircraftType]]] = defaultdict(
list list
@ -322,6 +325,12 @@ class AircraftType(UnitType[Type[FlyingType]]):
def iter_props(self) -> Iterator[UnitProperty[Any]]: def iter_props(self) -> Iterator[UnitProperty[Any]]:
return UnitProperty.for_aircraft(self.dcs_unit_type) return UnitProperty.for_aircraft(self.dcs_unit_type)
def capable_of(self, task: FlightType) -> bool:
return task in self.task_priorities
def task_priority(self, task: FlightType) -> int:
return self.task_priorities[task]
def __setstate__(self, state: dict[str, Any]) -> None: def __setstate__(self, state: dict[str, Any]) -> None:
# Update any existing models with new data on load. # Update any existing models with new data on load.
updated = AircraftType.named(state["name"]) updated = AircraftType.named(state["name"])
@ -340,6 +349,12 @@ class AircraftType(UnitType[Type[FlyingType]]):
cls._load_all() cls._load_all()
yield from cls._by_unit_type[dcs_unit_type] yield from cls._by_unit_type[dcs_unit_type]
@classmethod
def iter_all(cls) -> Iterator[AircraftType]:
if not cls._loaded:
cls._load_all()
yield from cls._by_name.values()
@staticmethod @staticmethod
def each_dcs_type() -> Iterator[Type[FlyingType]]: def each_dcs_type() -> Iterator[Type[FlyingType]]:
yield from helicopter_map.values() yield from helicopter_map.values()
@ -422,6 +437,12 @@ class AircraftType(UnitType[Type[FlyingType]]):
if prop_overrides is not None: if prop_overrides is not None:
cls._set_props_overrides(prop_overrides, aircraft, data_path) cls._set_props_overrides(prop_overrides, aircraft, data_path)
from game.ato.flighttype import FlightType
task_priorities: dict[FlightType, int] = {}
for task_name, priority in data.get("tasks", {}).items():
task_priorities[FlightType(task_name)] = priority
for variant in data.get("variants", [aircraft.id]): for variant in data.get("variants", [aircraft.id]):
yield AircraftType( yield AircraftType(
dcs_unit_type=aircraft, dcs_unit_type=aircraft,
@ -454,4 +475,8 @@ class AircraftType(UnitType[Type[FlyingType]]):
cabin_size=data.get("cabin_size", 10 if aircraft.helicopter else 0), cabin_size=data.get("cabin_size", 10 if aircraft.helicopter else 0),
can_carry_crates=data.get("can_carry_crates", aircraft.helicopter), can_carry_crates=data.get("can_carry_crates", aircraft.helicopter),
has_built_in_target_pod=data.get("has_built_in_target_pod", False), has_built_in_target_pod=data.get("has_built_in_target_pod", False),
task_priorities=task_priorities,
) )
def __hash__(self) -> int:
return hash(self.name)