From 3d41eb1ab4df5e1207ea2579a9c6cf5019f15caa Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Sat, 17 Oct 2020 14:32:09 -0700 Subject: [PATCH] Clean up CAP types. Stop using "CAP". Use BARCAP or TARCAP instead. TARCAP no longer allowed anywhere but front lines, since that's all we have mission planning for right now. Later will add TARCAP and BARCAP for all objective types with different timing profiles. Part two of the fix for https://github.com/Khopa/dcs_liberation/issues/210. --- gen/aircraft.py | 2 +- gen/flights/ai_flight_planner.py | 12 ++++------ gen/flights/flight.py | 2 +- gen/flights/flightplan.py | 4 ++-- gen/flights/traveltime.py | 9 ++++---- qt_ui/widgets/combos/QFlightTypeComboBox.py | 23 +++++++++++-------- .../flight/waypoints/QFlightWaypointTab.py | 10 +++++--- 7 files changed, 32 insertions(+), 30 deletions(-) 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()