Consider squadron for task capability checking.

https://github.com/dcs-liberation/dcs_liberation/issues/276
This commit is contained in:
Dan Albert 2021-05-27 18:56:52 -07:00
parent a2c10f1c7a
commit 45befd440c

View File

@ -572,15 +572,20 @@ class CoalitionMissionPlanner:
self.procurement_requests = self.game.procurement_requests_for(self.is_player) self.procurement_requests = self.game.procurement_requests_for(self.is_player)
self.faction = self.game.faction_for(self.is_player) self.faction = self.game.faction_for(self.is_player)
def faction_can_plan(self, mission_type: FlightType) -> bool: def air_wing_can_plan(self, mission_type: FlightType) -> bool:
"""Returns True if it is possible for the faction to plan this mission type. """Returns True if it is possible for the air wing to plan this mission type.
Not all mission types can be fulfilled by all factions. Many factions do not Not all mission types can be fulfilled by all air wings. Many factions do not
have AEW&C aircraft, so they will never be able to plan those missions. have AEW&C aircraft, so they will never be able to plan those missions. It's
also possible for the player to exclude mission types from their squadron
designs.
""" """
all_compatible = aircraft_for_task(mission_type) all_compatible = aircraft_for_task(mission_type)
for aircraft in self.faction.aircrafts: for squadron in self.game.air_wing_for(self.is_player).iter_squadrons():
if aircraft in all_compatible: if (
squadron.aircraft in all_compatible
and mission_type in squadron.mission_types
):
return True return True
return False return False
@ -892,10 +897,10 @@ class CoalitionMissionPlanner:
missing_types: Set[FlightType] = set() missing_types: Set[FlightType] = set()
escorts = [] escorts = []
for proposed_flight in mission.flights: for proposed_flight in mission.flights:
if not self.faction_can_plan(proposed_flight.task): if not self.air_wing_can_plan(proposed_flight.task):
# This faction can never plan this mission type because they do not have # This air wing can never plan this mission type because they do not
# compatible aircraft. Skip fulfillment so that we don't place the # have compatible aircraft or squadrons. Skip fulfillment so that we
# purchase request. # don't place the purchase request.
continue continue
if proposed_flight.escort_type is not None: if proposed_flight.escort_type is not None:
# Escorts are planned after the primary elements of the package. # Escorts are planned after the primary elements of the package.