mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Introduce livery-sets on squadron level
Randomly chooses one of the liveries defined if present in the squadron's yaml, overrides entry for "livery" or whatever is chosen in the UI except liveries on flight-member level
This commit is contained in:
parent
6ee74cf079
commit
52b25821af
@ -5,6 +5,7 @@
|
||||
* **[Payload Editor]** Ability to configure liveries on flight/flight-member level
|
||||
* **[Factions]** Support for definitions in yml/yaml format
|
||||
* **[Campaigns/Factions]** Support for inline recommended faction in campaign's yaml file
|
||||
* **[Squadrons]** Ability to define a livery-set for each squadron from which Retribution will randomly choose during mission generation
|
||||
|
||||
## Fixes
|
||||
* **[UI/UX]** A-10A flights can be edited again.
|
||||
|
||||
@ -47,6 +47,7 @@ class SquadronDefGenerator:
|
||||
role="Flying Squadron",
|
||||
aircraft=aircraft,
|
||||
livery=None,
|
||||
livery_set=[],
|
||||
auto_assignable_mission_types=set(aircraft.iter_task_capabilities()),
|
||||
radio_presets={},
|
||||
operating_bases=OperatingBases.default_for_aircraft(aircraft),
|
||||
|
||||
@ -27,7 +27,14 @@ class AircraftPainter:
|
||||
def livery_from_squadron(self) -> Optional[str]:
|
||||
return self.flight.squadron.livery
|
||||
|
||||
def livery_from_squadron_set(self) -> Optional[str]:
|
||||
if not self.flight.squadron.livery_set:
|
||||
return None
|
||||
return random.choice(self.flight.squadron.livery_set)
|
||||
|
||||
def determine_livery(self) -> Optional[str]:
|
||||
if (livery := self.livery_from_squadron_set()) is not None:
|
||||
return livery
|
||||
if (livery := self.livery_from_squadron()) is not None:
|
||||
return livery
|
||||
if (livery := self.livery_from_faction()) is not None:
|
||||
@ -37,8 +44,10 @@ class AircraftPainter:
|
||||
return None
|
||||
|
||||
def apply_livery(self) -> None:
|
||||
livery = self.determine_livery()
|
||||
for unit, member in zip(self.group.units, self.flight.iter_members()):
|
||||
livery = self.determine_livery()
|
||||
if not (livery or member.livery):
|
||||
continue
|
||||
unit.livery_id = member.livery if member.livery else livery
|
||||
assert isinstance(unit.livery_id, str)
|
||||
unit.livery_id = unit.livery_id.lower()
|
||||
|
||||
@ -40,6 +40,7 @@ class Squadron:
|
||||
aircraft: AircraftType
|
||||
max_size: int
|
||||
livery: Optional[str]
|
||||
livery_set: list[str] # will override livery if not empty
|
||||
primary_task: FlightType
|
||||
auto_assignable_mission_types: set[FlightType]
|
||||
radio_presets: dict[Union[str, int], list[RadioFrequency]]
|
||||
@ -503,6 +504,7 @@ class Squadron:
|
||||
squadron_def.aircraft,
|
||||
max_size,
|
||||
squadron_def.livery,
|
||||
squadron_def.livery_set,
|
||||
primary_task,
|
||||
squadron_def.auto_assignable_mission_types,
|
||||
squadron_def.radio_presets,
|
||||
|
||||
@ -27,6 +27,7 @@ class SquadronDef:
|
||||
role: str
|
||||
aircraft: AircraftType
|
||||
livery: Optional[str]
|
||||
livery_set: list[str]
|
||||
auto_assignable_mission_types: set[FlightType]
|
||||
radio_presets: dict[Union[str, int], list[RadioFrequency]]
|
||||
operating_bases: OperatingBases
|
||||
@ -103,6 +104,7 @@ class SquadronDef:
|
||||
role=data["role"],
|
||||
aircraft=unit_type,
|
||||
livery=data.get("livery"),
|
||||
livery_set=data.get("livery_set", []),
|
||||
auto_assignable_mission_types=set(unit_type.iter_task_capabilities()),
|
||||
radio_presets=radio_presets,
|
||||
operating_bases=OperatingBases.from_yaml(unit_type, data.get("bases", {})),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user