mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
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.
This commit is contained in:
parent
cace523aa8
commit
3d41eb1ab4
@ -997,7 +997,7 @@ class AircraftConflictGenerator:
|
|||||||
flight: Flight, timing: PackageWaypointTiming,
|
flight: Flight, timing: PackageWaypointTiming,
|
||||||
dynamic_runways: Dict[str, RunwayData]) -> None:
|
dynamic_runways: Dict[str, RunwayData]) -> None:
|
||||||
flight_type = flight.flight_type
|
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]:
|
FlightType.INTERCEPTION]:
|
||||||
self.configure_cap(group, flight, dynamic_runways)
|
self.configure_cap(group, flight, dynamic_runways)
|
||||||
elif flight_type in [FlightType.CAS, FlightType.BAI]:
|
elif flight_type in [FlightType.CAS, FlightType.BAI]:
|
||||||
|
|||||||
@ -131,7 +131,7 @@ class AircraftAllocator:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def preferred_aircraft_for_task(task: FlightType) -> List[Type[FlyingType]]:
|
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:
|
if task in cap_missions:
|
||||||
return CAP_PREFERRED
|
return CAP_PREFERRED
|
||||||
elif task == FlightType.CAS:
|
elif task == FlightType.CAS:
|
||||||
@ -147,7 +147,7 @@ class AircraftAllocator:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def capable_aircraft_for_task(task: FlightType) -> List[Type[FlyingType]]:
|
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:
|
if task in cap_missions:
|
||||||
return CAP_CAPABLE
|
return CAP_CAPABLE
|
||||||
elif task == FlightType.CAS:
|
elif task == FlightType.CAS:
|
||||||
@ -403,7 +403,7 @@ class CoalitionMissionPlanner:
|
|||||||
# Find friendly CPs within 100 nmi from an enemy airfield, plan CAP.
|
# Find friendly CPs within 100 nmi from an enemy airfield, plan CAP.
|
||||||
for cp in self.objective_finder.vulnerable_control_points():
|
for cp in self.objective_finder.vulnerable_control_points():
|
||||||
yield ProposedMission(cp, [
|
yield ProposedMission(cp, [
|
||||||
ProposedFlight(FlightType.CAP, 2, self.MAX_CAP_RANGE),
|
ProposedFlight(FlightType.BARCAP, 2, self.MAX_CAP_RANGE),
|
||||||
])
|
])
|
||||||
|
|
||||||
# Find front lines, plan CAP.
|
# Find front lines, plan CAP.
|
||||||
@ -492,11 +492,7 @@ class CoalitionMissionPlanner:
|
|||||||
error = random.randint(-margin, margin)
|
error = random.randint(-margin, margin)
|
||||||
yield max(0, time + error)
|
yield max(0, time + error)
|
||||||
|
|
||||||
dca_types = (
|
dca_types = (FlightType.BARCAP, FlightType.INTERCEPTION)
|
||||||
FlightType.BARCAP,
|
|
||||||
FlightType.CAP,
|
|
||||||
FlightType.INTERCEPTION,
|
|
||||||
)
|
|
||||||
|
|
||||||
non_dca_packages = [p for p in self.ato.packages if
|
non_dca_packages = [p for p in self.ato.packages if
|
||||||
p.primary_task not in dca_types]
|
p.primary_task not in dca_types]
|
||||||
|
|||||||
@ -8,7 +8,7 @@ from theater.controlpoint import ControlPoint, MissionTarget
|
|||||||
|
|
||||||
|
|
||||||
class FlightType(Enum):
|
class FlightType(Enum):
|
||||||
CAP = 0
|
CAP = 0 # Do not use. Use BARCAP or TARCAP.
|
||||||
TARCAP = 1
|
TARCAP = 1
|
||||||
BARCAP = 2
|
BARCAP = 2
|
||||||
CAS = 3
|
CAS = 3
|
||||||
|
|||||||
@ -69,8 +69,6 @@ class FlightPlanBuilder:
|
|||||||
logging.error("BAI flight plan generation not implemented")
|
logging.error("BAI flight plan generation not implemented")
|
||||||
elif task == FlightType.BARCAP:
|
elif task == FlightType.BARCAP:
|
||||||
self.generate_barcap(flight)
|
self.generate_barcap(flight)
|
||||||
elif task == FlightType.CAP:
|
|
||||||
self.generate_barcap(flight)
|
|
||||||
elif task == FlightType.CAS:
|
elif task == FlightType.CAS:
|
||||||
self.generate_cas(flight)
|
self.generate_cas(flight)
|
||||||
elif task == FlightType.DEAD:
|
elif task == FlightType.DEAD:
|
||||||
@ -103,6 +101,8 @@ class FlightPlanBuilder:
|
|||||||
logging.error(
|
logging.error(
|
||||||
"Troop transport flight plan generation not implemented"
|
"Troop transport flight plan generation not implemented"
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
logging.error(f"Unsupported task type: {task.name}")
|
||||||
except InvalidObjectiveLocation:
|
except InvalidObjectiveLocation:
|
||||||
logging.exception(f"Could not create flight plan")
|
logging.exception(f"Could not create flight plan")
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,6 @@ from gen.flights.flight import (
|
|||||||
|
|
||||||
|
|
||||||
CAP_DURATION = 30 # Minutes
|
CAP_DURATION = 30 # Minutes
|
||||||
CAP_TYPES = (FlightType.BARCAP, FlightType.CAP)
|
|
||||||
|
|
||||||
INGRESS_TYPES = {
|
INGRESS_TYPES = {
|
||||||
FlightWaypointType.INGRESS_CAS,
|
FlightWaypointType.INGRESS_CAS,
|
||||||
@ -151,7 +150,7 @@ class TotEstimator:
|
|||||||
# Takeoff immediately.
|
# Takeoff immediately.
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if self.package.primary_task in CAP_TYPES:
|
if self.package.primary_task == FlightType.BARCAP:
|
||||||
start_time = self.timing.race_track_start
|
start_time = self.timing.race_track_start
|
||||||
else:
|
else:
|
||||||
start_time = self.timing.join
|
start_time = self.timing.join
|
||||||
@ -184,7 +183,7 @@ class TotEstimator:
|
|||||||
# the package.
|
# the package.
|
||||||
return 0
|
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
|
# The racetrack start *is* the target. The package target is the
|
||||||
# protected objective.
|
# protected objective.
|
||||||
time_to_target = 0
|
time_to_target = 0
|
||||||
@ -278,14 +277,14 @@ class PackageWaypointTiming:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def race_track_start(self) -> int:
|
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
|
return self.package.time_over_target
|
||||||
else:
|
else:
|
||||||
return self.ingress
|
return self.ingress
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def race_track_end(self) -> int:
|
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
|
return self.target + CAP_DURATION * 60
|
||||||
else:
|
else:
|
||||||
return self.egress
|
return self.egress
|
||||||
|
|||||||
@ -19,7 +19,6 @@ class QFlightTypeComboBox(QComboBox):
|
|||||||
|
|
||||||
COMMON_ENEMY_MISSIONS = [
|
COMMON_ENEMY_MISSIONS = [
|
||||||
FlightType.ESCORT,
|
FlightType.ESCORT,
|
||||||
FlightType.TARCAP,
|
|
||||||
FlightType.SEAD,
|
FlightType.SEAD,
|
||||||
FlightType.DEAD,
|
FlightType.DEAD,
|
||||||
# TODO: FlightType.ELINT,
|
# TODO: FlightType.ELINT,
|
||||||
@ -27,42 +26,46 @@ class QFlightTypeComboBox(QComboBox):
|
|||||||
# TODO: FlightType.RECON,
|
# TODO: FlightType.RECON,
|
||||||
]
|
]
|
||||||
|
|
||||||
FRIENDLY_AIRBASE_MISSIONS = [
|
COMMON_FRIENDLY_MISSIONS = [
|
||||||
FlightType.CAP,
|
FlightType.BARCAP,
|
||||||
# TODO: FlightType.INTERCEPTION
|
|
||||||
# TODO: FlightType.LOGISTICS
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
FRIENDLY_AIRBASE_MISSIONS = [
|
||||||
|
# TODO: FlightType.INTERCEPTION
|
||||||
|
# TODO: FlightType.LOGISTICS
|
||||||
|
] + COMMON_FRIENDLY_MISSIONS
|
||||||
|
|
||||||
FRIENDLY_CARRIER_MISSIONS = [
|
FRIENDLY_CARRIER_MISSIONS = [
|
||||||
FlightType.BARCAP,
|
|
||||||
# TODO: FlightType.INTERCEPTION
|
# TODO: FlightType.INTERCEPTION
|
||||||
# TODO: Buddy tanking for the A-4?
|
# TODO: Buddy tanking for the A-4?
|
||||||
# TODO: Rescue chopper?
|
# TODO: Rescue chopper?
|
||||||
# TODO: Inter-ship logistics?
|
# TODO: Inter-ship logistics?
|
||||||
]
|
] + COMMON_FRIENDLY_MISSIONS
|
||||||
|
|
||||||
ENEMY_CARRIER_MISSIONS = [
|
ENEMY_CARRIER_MISSIONS = [
|
||||||
FlightType.ESCORT,
|
FlightType.ESCORT,
|
||||||
FlightType.TARCAP,
|
FlightType.BARCAP,
|
||||||
# TODO: FlightType.ANTISHIP
|
# TODO: FlightType.ANTISHIP
|
||||||
]
|
]
|
||||||
|
|
||||||
ENEMY_AIRBASE_MISSIONS = [
|
ENEMY_AIRBASE_MISSIONS = [
|
||||||
|
FlightType.BARCAP,
|
||||||
# TODO: FlightType.STRIKE
|
# TODO: FlightType.STRIKE
|
||||||
] + COMMON_ENEMY_MISSIONS
|
] + COMMON_ENEMY_MISSIONS
|
||||||
|
|
||||||
FRIENDLY_GROUND_OBJECT_MISSIONS = [
|
FRIENDLY_GROUND_OBJECT_MISSIONS = [
|
||||||
FlightType.CAP,
|
|
||||||
# TODO: FlightType.LOGISTICS
|
# TODO: FlightType.LOGISTICS
|
||||||
# TODO: FlightType.TROOP_TRANSPORT
|
# TODO: FlightType.TROOP_TRANSPORT
|
||||||
]
|
] + COMMON_FRIENDLY_MISSIONS
|
||||||
|
|
||||||
ENEMY_GROUND_OBJECT_MISSIONS = [
|
ENEMY_GROUND_OBJECT_MISSIONS = [
|
||||||
|
FlightType.BARCAP,
|
||||||
FlightType.STRIKE,
|
FlightType.STRIKE,
|
||||||
] + COMMON_ENEMY_MISSIONS
|
] + COMMON_ENEMY_MISSIONS
|
||||||
|
|
||||||
FRONT_LINE_MISSIONS = [
|
FRONT_LINE_MISSIONS = [
|
||||||
FlightType.CAS,
|
FlightType.CAS,
|
||||||
|
FlightType.TARCAP,
|
||||||
# TODO: FlightType.TROOP_TRANSPORT
|
# TODO: FlightType.TROOP_TRANSPORT
|
||||||
# TODO: FlightType.EVAC
|
# TODO: FlightType.EVAC
|
||||||
] + COMMON_ENEMY_MISSIONS
|
] + COMMON_ENEMY_MISSIONS
|
||||||
|
|||||||
@ -54,6 +54,7 @@ class QFlightWaypointTab(QFrame):
|
|||||||
rlayout.addWidget(QLabel("<strong>Generator :</strong>"))
|
rlayout.addWidget(QLabel("<strong>Generator :</strong>"))
|
||||||
rlayout.addWidget(QLabel("<small>AI compatible</small>"))
|
rlayout.addWidget(QLabel("<small>AI compatible</small>"))
|
||||||
|
|
||||||
|
# TODO: Filter by objective type.
|
||||||
self.recreate_buttons.clear()
|
self.recreate_buttons.clear()
|
||||||
recreate_types = [
|
recreate_types = [
|
||||||
FlightType.CAS,
|
FlightType.CAS,
|
||||||
@ -137,13 +138,16 @@ class QFlightWaypointTab(QFrame):
|
|||||||
QMessageBox.Yes
|
QMessageBox.Yes
|
||||||
)
|
)
|
||||||
if result == 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 task == FlightType.CAP:
|
||||||
if isinstance(self.package.target, FrontLine):
|
if isinstance(self.package.target, FrontLine):
|
||||||
task = FlightType.TARCAP
|
task = FlightType.TARCAP
|
||||||
elif isinstance(self.package.target, ControlPoint):
|
elif isinstance(self.package.target, ControlPoint):
|
||||||
if self.package.target.is_fleet:
|
task = FlightType.BARCAP
|
||||||
task = FlightType.BARCAP
|
|
||||||
self.flight.flight_type = task
|
self.flight.flight_type = task
|
||||||
self.planner.populate_flight_plan(self.flight)
|
self.planner.populate_flight_plan(self.flight)
|
||||||
self.flight_waypoint_list.update_list()
|
self.flight_waypoint_list.update_list()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user