mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Further improvements to livery-selector
Unlocking the full potential, i.e. allowing users to switch back & forth between livery-sets, livery-overrides and normal liveries, including support for overriding flight/flight-member specific liveries.
This commit is contained in:
@@ -18,13 +18,12 @@ class FlightMember:
|
||||
self.weapon_laser_code: LaserCode | None = None
|
||||
self.properties: dict[str, bool | float | int] = {}
|
||||
self.livery: Optional[str] = None
|
||||
self.use_livery_set: bool = True
|
||||
|
||||
def __setstate__(self, state: dict[str, Any]) -> None:
|
||||
if "tgp_laser_code" not in state:
|
||||
state["tgp_laser_code"] = None
|
||||
if "weapon_laser_code" not in state:
|
||||
state["weapon_laser_code"] = None
|
||||
self.__dict__.update(state)
|
||||
new_state = FlightMember(state["pilot"], state["loadout"])
|
||||
new_state.__dict__.update(state)
|
||||
self.__dict__.update(new_state.__dict__)
|
||||
|
||||
def assign_tgp_laser_code(self, code: LaserCode) -> None:
|
||||
if self.tgp_laser_code is not None:
|
||||
|
||||
@@ -28,12 +28,17 @@ class AircraftPainter:
|
||||
return self.flight.squadron.livery
|
||||
|
||||
def livery_from_squadron_set(self) -> Optional[str]:
|
||||
if not self.flight.squadron.livery_set:
|
||||
if not (
|
||||
self.flight.squadron.livery_set and self.flight.squadron.use_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:
|
||||
def determine_livery(self, member_uses_livery_set: bool) -> Optional[str]:
|
||||
if (
|
||||
member_uses_livery_set
|
||||
and (livery := self.livery_from_squadron_set()) is not None
|
||||
):
|
||||
return livery
|
||||
if (livery := self.livery_from_squadron()) is not None:
|
||||
return livery
|
||||
@@ -45,7 +50,7 @@ class AircraftPainter:
|
||||
|
||||
def apply_livery(self) -> None:
|
||||
for unit, member in zip(self.group.units, self.flight.iter_members()):
|
||||
livery = self.determine_livery()
|
||||
livery = self.determine_livery(member.use_livery_set)
|
||||
if not (livery or member.livery):
|
||||
continue
|
||||
unit.livery_id = member.livery if member.livery else livery
|
||||
|
||||
@@ -70,9 +70,13 @@ class Squadron:
|
||||
untasked_aircraft: int = field(init=False, hash=False, compare=False, default=0)
|
||||
pending_deliveries: int = field(init=False, hash=False, compare=False, default=0)
|
||||
|
||||
use_livery_set: bool = False # if livery-set should be used when present
|
||||
|
||||
def __setstate__(self, state: dict[str, Any]) -> None:
|
||||
if "id" not in state:
|
||||
state["id"] = uuid4()
|
||||
if "use_livery_set" not in state:
|
||||
state["use_livery_set"] = len(state["livery_set"]) > 0
|
||||
self.__dict__.update(state)
|
||||
|
||||
def __str__(self) -> str:
|
||||
|
||||
Reference in New Issue
Block a user