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
|
* **[Payload Editor]** Ability to configure liveries on flight/flight-member level
|
||||||
* **[Factions]** Support for definitions in yml/yaml format
|
* **[Factions]** Support for definitions in yml/yaml format
|
||||||
* **[Campaigns/Factions]** Support for inline recommended faction in campaign's yaml file
|
* **[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
|
## Fixes
|
||||||
* **[UI/UX]** A-10A flights can be edited again.
|
* **[UI/UX]** A-10A flights can be edited again.
|
||||||
|
|||||||
@ -47,6 +47,7 @@ class SquadronDefGenerator:
|
|||||||
role="Flying Squadron",
|
role="Flying Squadron",
|
||||||
aircraft=aircraft,
|
aircraft=aircraft,
|
||||||
livery=None,
|
livery=None,
|
||||||
|
livery_set=[],
|
||||||
auto_assignable_mission_types=set(aircraft.iter_task_capabilities()),
|
auto_assignable_mission_types=set(aircraft.iter_task_capabilities()),
|
||||||
radio_presets={},
|
radio_presets={},
|
||||||
operating_bases=OperatingBases.default_for_aircraft(aircraft),
|
operating_bases=OperatingBases.default_for_aircraft(aircraft),
|
||||||
|
|||||||
@ -27,7 +27,14 @@ class AircraftPainter:
|
|||||||
def livery_from_squadron(self) -> Optional[str]:
|
def livery_from_squadron(self) -> Optional[str]:
|
||||||
return self.flight.squadron.livery
|
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]:
|
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:
|
if (livery := self.livery_from_squadron()) is not None:
|
||||||
return livery
|
return livery
|
||||||
if (livery := self.livery_from_faction()) is not None:
|
if (livery := self.livery_from_faction()) is not None:
|
||||||
@ -37,8 +44,10 @@ class AircraftPainter:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def apply_livery(self) -> None:
|
def apply_livery(self) -> None:
|
||||||
livery = self.determine_livery()
|
|
||||||
for unit, member in zip(self.group.units, self.flight.iter_members()):
|
for unit, member in zip(self.group.units, self.flight.iter_members()):
|
||||||
|
livery = self.determine_livery()
|
||||||
if not (livery or member.livery):
|
if not (livery or member.livery):
|
||||||
continue
|
continue
|
||||||
unit.livery_id = member.livery if member.livery else livery
|
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
|
aircraft: AircraftType
|
||||||
max_size: int
|
max_size: int
|
||||||
livery: Optional[str]
|
livery: Optional[str]
|
||||||
|
livery_set: list[str] # will override livery if not empty
|
||||||
primary_task: FlightType
|
primary_task: FlightType
|
||||||
auto_assignable_mission_types: set[FlightType]
|
auto_assignable_mission_types: set[FlightType]
|
||||||
radio_presets: dict[Union[str, int], list[RadioFrequency]]
|
radio_presets: dict[Union[str, int], list[RadioFrequency]]
|
||||||
@ -503,6 +504,7 @@ class Squadron:
|
|||||||
squadron_def.aircraft,
|
squadron_def.aircraft,
|
||||||
max_size,
|
max_size,
|
||||||
squadron_def.livery,
|
squadron_def.livery,
|
||||||
|
squadron_def.livery_set,
|
||||||
primary_task,
|
primary_task,
|
||||||
squadron_def.auto_assignable_mission_types,
|
squadron_def.auto_assignable_mission_types,
|
||||||
squadron_def.radio_presets,
|
squadron_def.radio_presets,
|
||||||
|
|||||||
@ -27,6 +27,7 @@ class SquadronDef:
|
|||||||
role: str
|
role: str
|
||||||
aircraft: AircraftType
|
aircraft: AircraftType
|
||||||
livery: Optional[str]
|
livery: Optional[str]
|
||||||
|
livery_set: list[str]
|
||||||
auto_assignable_mission_types: set[FlightType]
|
auto_assignable_mission_types: set[FlightType]
|
||||||
radio_presets: dict[Union[str, int], list[RadioFrequency]]
|
radio_presets: dict[Union[str, int], list[RadioFrequency]]
|
||||||
operating_bases: OperatingBases
|
operating_bases: OperatingBases
|
||||||
@ -103,6 +104,7 @@ class SquadronDef:
|
|||||||
role=data["role"],
|
role=data["role"],
|
||||||
aircraft=unit_type,
|
aircraft=unit_type,
|
||||||
livery=data.get("livery"),
|
livery=data.get("livery"),
|
||||||
|
livery_set=data.get("livery_set", []),
|
||||||
auto_assignable_mission_types=set(unit_type.iter_task_capabilities()),
|
auto_assignable_mission_types=set(unit_type.iter_task_capabilities()),
|
||||||
radio_presets=radio_presets,
|
radio_presets=radio_presets,
|
||||||
operating_bases=OperatingBases.from_yaml(unit_type, data.get("bases", {})),
|
operating_bases=OperatingBases.from_yaml(unit_type, data.get("bases", {})),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user