Propagate changes from Liberation

This commit is contained in:
Raffson 2023-05-14 17:09:41 +02:00
parent 711d102425
commit 5e2625ad21
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
4 changed files with 14 additions and 24 deletions

View File

@ -114,7 +114,7 @@ class DefaultSquadronAssigner:
) -> bool:
if ignore_base_preference:
return control_point.can_operate(squadron.aircraft)
return squadron.operates_from(control_point) and task in squadron.mission_types
return squadron.operates_from(control_point) and squadron.capable_of(task)
def find_squadron_for_airframe(
self, aircraft: AircraftType, task: FlightType, control_point: ControlPoint

View File

@ -81,7 +81,7 @@ class AirWing:
best_aircraft_for_task = AircraftType.priority_list_for_task(task)
for aircraft, squadrons in self.squadrons.items():
for squadron in squadrons:
if squadron.untasked_aircraft and task in squadron.mission_types:
if squadron.untasked_aircraft and squadron.capable_of(task):
aircrafts.append(aircraft)
if aircraft not in best_aircraft_for_task:
best_aircraft_for_task.append(aircraft)

View File

@ -31,7 +31,7 @@ class Squadron:
role: str
aircraft: AircraftType
livery: Optional[str]
mission_types: tuple[FlightType, ...]
auto_assignable_mission_types: set[FlightType]
operating_bases: OperatingBases
female_pilot_percentage: int
@ -45,10 +45,6 @@ class Squadron:
default_factory=list, init=False, hash=False, compare=False
)
auto_assignable_mission_types: set[FlightType] = field(
init=False, hash=False, compare=False
)
coalition: Coalition = field(hash=False, compare=False)
flight_db: Database[Flight] = field(hash=False, compare=False)
settings: Settings = field(hash=False, compare=False)
@ -62,9 +58,6 @@ 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)
def __post_init__(self) -> None:
self.auto_assignable_mission_types = set(self.mission_types)
def __str__(self) -> str:
if self.nickname is None:
return self.name
@ -93,16 +86,12 @@ class Squadron:
def pilot_limits_enabled(self) -> bool:
return self.settings.enable_squadron_pilot_limits
def set_allowed_mission_types(self, mission_types: Iterable[FlightType]) -> None:
self.mission_types = tuple(mission_types)
self.auto_assignable_mission_types.intersection_update(self.mission_types)
def set_auto_assignable_mission_types(
self, mission_types: Iterable[FlightType]
) -> None:
self.auto_assignable_mission_types = set(self.mission_types).intersection(
mission_types
)
self.auto_assignable_mission_types = {
t for t in mission_types if self.capable_of(t)
}
def claim_new_pilot_if_allowed(self) -> Optional[Pilot]:
if self.pilot_limits_enabled:
@ -439,7 +428,7 @@ class Squadron:
squadron_def.role,
squadron_def.aircraft,
squadron_def.livery,
squadron_def.mission_types,
squadron_def.auto_assignable_mission_types,
squadron_def.operating_bases,
squadron_def.female_pilot_percentage,
squadron_def.pilot_pool,

View File

@ -31,17 +31,18 @@ class SquadronDef:
pilot_pool: list[Pilot]
claimed: bool = False
def __post_init__(self) -> None:
self.auto_assignable_mission_types = set(self.mission_types)
def __str__(self) -> str:
if self.nickname is None:
return self.name
return f'{self.name} "{self.nickname}"'
def set_allowed_mission_types(self, mission_types: Iterable[FlightType]) -> None:
self.mission_types = tuple(mission_types)
self.auto_assignable_mission_types.intersection_update(self.mission_types)
def capable_of(self, task: FlightType) -> bool:
"""Returns True if the squadron is capable of performing the given task.
A squadron may be capable of performing a task even if it will not be
automatically assigned to it.
"""
return self.aircraft.capable_of(task)
def can_auto_assign(self, task: FlightType) -> bool:
"""