diff --git a/gen/flights/ai_flight_planner_db.py b/gen/flights/ai_flight_planner_db.py index 82211f03..9e55d644 100644 --- a/gen/flights/ai_flight_planner_db.py +++ b/gen/flights/ai_flight_planner_db.py @@ -155,6 +155,9 @@ CAP_CAPABLE = [ CAS_CAPABLE = [ A_10C_2, A_10C, + B_1B, + F_14B, + F_14A_135_GR, Su_25TM, Su_25T, Su_25, @@ -234,6 +237,19 @@ SEAD_CAPABLE = [ Su_30, MiG_27K, Tornado_GR4, + F_117A, + B_17G, + A_20G, + P_47D_40, + P_47D_30bl1, + P_47D_30, + P_51D_30_NA, + P_51D, + SpitfireLFMkIXCW, + SpitfireLFMkIX, + Bf_109K_4, + FW_190D9, + FW_190A8, ] diff --git a/qt_ui/widgets/combos/QAircraftTypeSelector.py b/qt_ui/widgets/combos/QAircraftTypeSelector.py index 1f7fa74d..cd87c150 100644 --- a/qt_ui/widgets/combos/QAircraftTypeSelector.py +++ b/qt_ui/widgets/combos/QAircraftTypeSelector.py @@ -5,14 +5,41 @@ from PySide2.QtWidgets import QComboBox from dcs.unittype import FlyingType +from gen.flights.flight import FlightType + +import gen.flights.ai_flight_planner_db + from game import Game, db class QAircraftTypeSelector(QComboBox): """Combo box for selecting among the given aircraft types.""" - def __init__(self, aircraft_types: Iterable[Type[FlyingType]], country: str) -> None: + def __init__(self, aircraft_types: Iterable[Type[FlyingType]], country: str, mission_type: str) -> None: super().__init__() - for aircraft in aircraft_types: - self.addItem(f"{db.unit_pretty_name(country, aircraft)}", userData=aircraft) + self.model().sort(0) self.setSizeAdjustPolicy(self.AdjustToContents) + self.country = country + self.updateItems(mission_type, aircraft_types) + + def updateItems(self, mission_type: str, aircraft_types): + self.clear() + for aircraft in aircraft_types: + if mission_type in [FlightType.BARCAP, FlightType.ESCORT, FlightType.INTERCEPTION, FlightType.SWEEP, FlightType.TARCAP]: + if aircraft in gen.flights.ai_flight_planner_db.CAP_CAPABLE: + self.addItem(f"{db.unit_pretty_name(self.country, aircraft)}", userData=aircraft) + elif mission_type in [FlightType.CAS, FlightType.BAI, FlightType.OCA_AIRCRAFT]: + if aircraft in gen.flights.ai_flight_planner_db.CAS_CAPABLE: + self.addItem(f"{db.unit_pretty_name(self.country, aircraft)}", userData=aircraft) + elif mission_type in [FlightType.SEAD]: + if aircraft in gen.flights.ai_flight_planner_db.SEAD_CAPABLE: + self.addItem(f"{db.unit_pretty_name(self.country, aircraft)}", userData=aircraft) + elif mission_type in [FlightType.STRIKE]: + if aircraft in gen.flights.ai_flight_planner_db.STRIKE_CAPABLE: + self.addItem(f"{db.unit_pretty_name(self.country, aircraft)}", userData=aircraft) + elif mission_type in [FlightType.ANTISHIP]: + if aircraft in gen.flights.ai_flight_planner_db.ANTISHIP_CAPABLE: + self.addItem(f"{db.unit_pretty_name(self.country, aircraft)}", userData=aircraft) + elif mission_type in [FlightType.OCA_RUNWAY]: + if aircraft in gen.flights.ai_flight_planner_db.RUNWAY_ATTACK_CAPABLE: + self.addItem(f"{db.unit_pretty_name(self.country, aircraft)}", userData=aircraft) \ No newline at end of file diff --git a/qt_ui/windows/mission/flight/QFlightCreator.py b/qt_ui/windows/mission/flight/QFlightCreator.py index f4eccb50..11440c7a 100644 --- a/qt_ui/windows/mission/flight/QFlightCreator.py +++ b/qt_ui/windows/mission/flight/QFlightCreator.py @@ -45,10 +45,12 @@ class QFlightCreator(QDialog): self.game.theater, package.target ) self.task_selector.setCurrentIndex(0) + self.task_selector.currentTextChanged.connect( + self.on_task_changed) layout.addLayout(QLabeledWidget("Task:", self.task_selector)) self.aircraft_selector = QAircraftTypeSelector( - self.game.aircraft_inventory.available_types_for_player, self.game.player_country + self.game.aircraft_inventory.available_types_for_player, self.game.player_country, self.task_selector.currentData() ) self.aircraft_selector.setCurrentIndex(0) self.aircraft_selector.currentIndexChanged.connect( @@ -169,6 +171,9 @@ class QFlightCreator(QDialog): self.arrival.change_aircraft(new_aircraft) self.divert.change_aircraft(new_aircraft) + def on_task_changed(self) -> None: + self.aircraft_selector.updateItems(self.task_selector.currentData(), self.game.aircraft_inventory.available_types_for_player) + def update_max_size(self, available: int) -> None: self.flight_size_spinner.setMaximum(min(available, 4)) if self.flight_size_spinner.maximum() >= 2: