From bb72acd3ac54f6f8d9e0999b1378ca184b9e3e96 Mon Sep 17 00:00:00 2001 From: Walter Ray Haynie <37820425+walterroach@users.noreply.github.com> Date: Tue, 22 Feb 2022 19:06:20 -0600 Subject: [PATCH] Fix #1988 broken stored heading in Payload editor (#2020) * Fix #1988 * Allow overwriting default aircraft properties * Add logging to setting invalid props --- game/dcs/aircrafttype.py | 23 ++++++++++++++++++- .../aircraft/flightgroupconfigurator.py | 5 ---- resources/units/aircraft/F-14A-135-GR.yaml | 2 ++ resources/units/aircraft/F-14B.yaml | 3 +++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/game/dcs/aircrafttype.py b/game/dcs/aircrafttype.py index 2316ff97..a14d8643 100644 --- a/game/dcs/aircrafttype.py +++ b/game/dcs/aircrafttype.py @@ -4,7 +4,7 @@ import logging from dataclasses import dataclass from functools import cached_property from pathlib import Path -from typing import Any, Iterator, Optional, TYPE_CHECKING, Type +from typing import Any, Iterator, Optional, TYPE_CHECKING, Type, Dict import yaml from dcs.helicopters import helicopter_map @@ -317,6 +317,23 @@ class AircraftType(UnitType[Type[FlyingType]]): yield from helicopter_map.values() yield from plane_map.values() + @staticmethod + def _set_props_overrides( + config: Dict[str, Any], aircraft: Type[FlyingType], data_path: Path + ) -> None: + if aircraft.property_defaults is None: + logging.warning( + f"'{data_path.name}' attempted to set default prop that does not exist." + ) + else: + for k in config: + if k in aircraft.property_defaults: + aircraft.property_defaults[k] = config[k] + else: + logging.warning( + f"'{data_path.name}' attempted to set default prop '{k}' that does not exist" + ) + @classmethod def _each_variant_of(cls, aircraft: Type[FlyingType]) -> Iterator[AircraftType]: data_path = Path("resources/units/aircraft") / f"{aircraft.id}.yaml" @@ -368,6 +385,10 @@ class AircraftType(UnitType[Type[FlyingType]]): if units_data == "metric": units = MetricUnits() + prop_overrides = data.get("default_overrides") + if prop_overrides is not None: + cls._set_props_overrides(prop_overrides, aircraft, data_path) + for variant in data.get("variants", [aircraft.id]): yield AircraftType( dcs_unit_type=aircraft, diff --git a/game/missiongenerator/aircraft/flightgroupconfigurator.py b/game/missiongenerator/aircraft/flightgroupconfigurator.py index 64cb4521..a06715bb 100644 --- a/game/missiongenerator/aircraft/flightgroupconfigurator.py +++ b/game/missiongenerator/aircraft/flightgroupconfigurator.py @@ -6,7 +6,6 @@ from typing import Any, Optional, TYPE_CHECKING from dcs import Mission from dcs.flyingunit import FlyingUnit -from dcs.planes import F_14A_135_GR, F_14B from dcs.unit import Skill from dcs.unitgroup import FlyingGroup @@ -116,10 +115,6 @@ class FlightGroupConfigurator: laser_codes.append(self.laser_code_registry.get_next_laser_code()) else: laser_codes.append(None) - if unit.unit_type is F_14B: - unit.set_property(F_14B.Properties.INSAlignmentStored.id, True) - elif unit.unit_type is F_14A_135_GR: - unit.set_property(F_14A_135_GR.Properties.INSAlignmentStored.id, True) def setup_radios(self) -> RadioFrequency: if self.flight.flight_type in {FlightType.AEWC, FlightType.REFUELING}: diff --git a/resources/units/aircraft/F-14A-135-GR.yaml b/resources/units/aircraft/F-14A-135-GR.yaml index 22ece158..835a68e9 100644 --- a/resources/units/aircraft/F-14A-135-GR.yaml +++ b/resources/units/aircraft/F-14A-135-GR.yaml @@ -32,3 +32,5 @@ radios: namer: tomcat intra_flight_radio_index: 2 inter_flight_radio_index: 1 +default_overrides: + INSAlignmentStored: true diff --git a/resources/units/aircraft/F-14B.yaml b/resources/units/aircraft/F-14B.yaml index 21fc8f4d..1ecc22be 100644 --- a/resources/units/aircraft/F-14B.yaml +++ b/resources/units/aircraft/F-14B.yaml @@ -32,3 +32,6 @@ radios: namer: tomcat intra_flight_radio_index: 2 inter_flight_radio_index: 1 +default_overrides: + INSAlignmentStored: true +