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:
Raffson 2024-03-23 21:27:43 +01:00
parent 6ee74cf079
commit 52b25821af
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
5 changed files with 16 additions and 1 deletions

View File

@ -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.

View File

@ -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),

View File

@ -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()

View File

@ -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,

View File

@ -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", {})),