diff --git a/gen/aircraft.py b/gen/aircraft.py index 070670f6..88824e36 100644 --- a/gen/aircraft.py +++ b/gen/aircraft.py @@ -997,7 +997,7 @@ class AircraftConflictGenerator: flight: Flight, timing: PackageWaypointTiming, dynamic_runways: Dict[str, RunwayData]) -> None: flight_type = flight.flight_type - if flight_type in [FlightType.CAP, FlightType.BARCAP, FlightType.TARCAP, + if flight_type in [FlightType.BARCAP, FlightType.TARCAP, FlightType.INTERCEPTION]: self.configure_cap(group, flight, dynamic_runways) elif flight_type in [FlightType.CAS, FlightType.BAI]: diff --git a/gen/flights/ai_flight_planner.py b/gen/flights/ai_flight_planner.py index 01f5d1b4..a1473433 100644 --- a/gen/flights/ai_flight_planner.py +++ b/gen/flights/ai_flight_planner.py @@ -131,7 +131,7 @@ class AircraftAllocator: @staticmethod def preferred_aircraft_for_task(task: FlightType) -> List[Type[FlyingType]]: - cap_missions = (FlightType.BARCAP, FlightType.CAP, FlightType.TARCAP) + cap_missions = (FlightType.BARCAP, FlightType.TARCAP) if task in cap_missions: return CAP_PREFERRED elif task == FlightType.CAS: @@ -147,7 +147,7 @@ class AircraftAllocator: @staticmethod def capable_aircraft_for_task(task: FlightType) -> List[Type[FlyingType]]: - cap_missions = (FlightType.BARCAP, FlightType.CAP, FlightType.TARCAP) + cap_missions = (FlightType.BARCAP, FlightType.TARCAP) if task in cap_missions: return CAP_CAPABLE elif task == FlightType.CAS: @@ -403,7 +403,7 @@ class CoalitionMissionPlanner: # Find friendly CPs within 100 nmi from an enemy airfield, plan CAP. for cp in self.objective_finder.vulnerable_control_points(): yield ProposedMission(cp, [ - ProposedFlight(FlightType.CAP, 2, self.MAX_CAP_RANGE), + ProposedFlight(FlightType.BARCAP, 2, self.MAX_CAP_RANGE), ]) # Find front lines, plan CAP. @@ -492,11 +492,7 @@ class CoalitionMissionPlanner: error = random.randint(-margin, margin) yield max(0, time + error) - dca_types = ( - FlightType.BARCAP, - FlightType.CAP, - FlightType.INTERCEPTION, - ) + dca_types = (FlightType.BARCAP, FlightType.INTERCEPTION) non_dca_packages = [p for p in self.ato.packages if p.primary_task not in dca_types] diff --git a/gen/flights/flight.py b/gen/flights/flight.py index 85fe4c17..bd879daa 100644 --- a/gen/flights/flight.py +++ b/gen/flights/flight.py @@ -8,7 +8,7 @@ from theater.controlpoint import ControlPoint, MissionTarget class FlightType(Enum): - CAP = 0 + CAP = 0 # Do not use. Use BARCAP or TARCAP. TARCAP = 1 BARCAP = 2 CAS = 3 diff --git a/gen/flights/flightplan.py b/gen/flights/flightplan.py index 0a3a3174..9bc06473 100644 --- a/gen/flights/flightplan.py +++ b/gen/flights/flightplan.py @@ -69,8 +69,6 @@ class FlightPlanBuilder: logging.error("BAI flight plan generation not implemented") elif task == FlightType.BARCAP: self.generate_barcap(flight) - elif task == FlightType.CAP: - self.generate_barcap(flight) elif task == FlightType.CAS: self.generate_cas(flight) elif task == FlightType.DEAD: @@ -103,6 +101,8 @@ class FlightPlanBuilder: logging.error( "Troop transport flight plan generation not implemented" ) + else: + logging.error(f"Unsupported task type: {task.name}") except InvalidObjectiveLocation: logging.exception(f"Could not create flight plan") diff --git a/gen/flights/traveltime.py b/gen/flights/traveltime.py index 7340715e..a4690f1a 100644 --- a/gen/flights/traveltime.py +++ b/gen/flights/traveltime.py @@ -19,7 +19,6 @@ from gen.flights.flight import ( CAP_DURATION = 30 # Minutes -CAP_TYPES = (FlightType.BARCAP, FlightType.CAP) INGRESS_TYPES = { FlightWaypointType.INGRESS_CAS, @@ -151,7 +150,7 @@ class TotEstimator: # Takeoff immediately. return 0 - if self.package.primary_task in CAP_TYPES: + if self.package.primary_task == FlightType.BARCAP: start_time = self.timing.race_track_start else: start_time = self.timing.join @@ -184,7 +183,7 @@ class TotEstimator: # the package. return 0 - if self.package.primary_task in CAP_TYPES: + if self.package.primary_task == FlightType.BARCAP: # The racetrack start *is* the target. The package target is the # protected objective. time_to_target = 0 @@ -278,14 +277,14 @@ class PackageWaypointTiming: @property def race_track_start(self) -> int: - if self.package.primary_task in CAP_TYPES: + if self.package.primary_task == FlightType.BARCAP: return self.package.time_over_target else: return self.ingress @property def race_track_end(self) -> int: - if self.package.primary_task in CAP_TYPES: + if self.package.primary_task == FlightType.BARCAP: return self.target + CAP_DURATION * 60 else: return self.egress diff --git a/qt_ui/widgets/combos/QFlightTypeComboBox.py b/qt_ui/widgets/combos/QFlightTypeComboBox.py index 9577b26c..429ff902 100644 --- a/qt_ui/widgets/combos/QFlightTypeComboBox.py +++ b/qt_ui/widgets/combos/QFlightTypeComboBox.py @@ -19,7 +19,6 @@ class QFlightTypeComboBox(QComboBox): COMMON_ENEMY_MISSIONS = [ FlightType.ESCORT, - FlightType.TARCAP, FlightType.SEAD, FlightType.DEAD, # TODO: FlightType.ELINT, @@ -27,42 +26,46 @@ class QFlightTypeComboBox(QComboBox): # TODO: FlightType.RECON, ] - FRIENDLY_AIRBASE_MISSIONS = [ - FlightType.CAP, - # TODO: FlightType.INTERCEPTION - # TODO: FlightType.LOGISTICS + COMMON_FRIENDLY_MISSIONS = [ + FlightType.BARCAP, ] + FRIENDLY_AIRBASE_MISSIONS = [ + # TODO: FlightType.INTERCEPTION + # TODO: FlightType.LOGISTICS + ] + COMMON_FRIENDLY_MISSIONS + FRIENDLY_CARRIER_MISSIONS = [ - FlightType.BARCAP, # TODO: FlightType.INTERCEPTION # TODO: Buddy tanking for the A-4? # TODO: Rescue chopper? # TODO: Inter-ship logistics? - ] + ] + COMMON_FRIENDLY_MISSIONS ENEMY_CARRIER_MISSIONS = [ FlightType.ESCORT, - FlightType.TARCAP, + FlightType.BARCAP, # TODO: FlightType.ANTISHIP ] ENEMY_AIRBASE_MISSIONS = [ + FlightType.BARCAP, # TODO: FlightType.STRIKE ] + COMMON_ENEMY_MISSIONS FRIENDLY_GROUND_OBJECT_MISSIONS = [ - FlightType.CAP, # TODO: FlightType.LOGISTICS # TODO: FlightType.TROOP_TRANSPORT - ] + ] + COMMON_FRIENDLY_MISSIONS ENEMY_GROUND_OBJECT_MISSIONS = [ + FlightType.BARCAP, FlightType.STRIKE, ] + COMMON_ENEMY_MISSIONS FRONT_LINE_MISSIONS = [ FlightType.CAS, + FlightType.TARCAP, # TODO: FlightType.TROOP_TRANSPORT # TODO: FlightType.EVAC ] + COMMON_ENEMY_MISSIONS diff --git a/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py index 98064b5c..21a85a84 100644 --- a/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py +++ b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py @@ -54,6 +54,7 @@ class QFlightWaypointTab(QFrame): rlayout.addWidget(QLabel("Generator :")) rlayout.addWidget(QLabel("AI compatible")) + # TODO: Filter by objective type. self.recreate_buttons.clear() recreate_types = [ FlightType.CAS, @@ -137,13 +138,16 @@ class QFlightWaypointTab(QFrame): QMessageBox.Yes ) if result == QMessageBox.Yes: - # TODO: These should all be just CAP. + # TODO: Should be buttons for both BARCAP and TARCAP. + # BARCAP and TARCAP behave differently. TARCAP arrives a few minutes + # ahead of the rest of the package and stays until the package + # departs, whereas BARCAP usually isn't part of a strike package and + # has a fixed mission time. if task == FlightType.CAP: if isinstance(self.package.target, FrontLine): task = FlightType.TARCAP elif isinstance(self.package.target, ControlPoint): - if self.package.target.is_fleet: - task = FlightType.BARCAP + task = FlightType.BARCAP self.flight.flight_type = task self.planner.populate_flight_plan(self.flight) self.flight_waypoint_list.update_list()