mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Autoplan Air-to-Air Escorts for AWACS & Tankers
This commit is contained in:
@@ -4,6 +4,7 @@ from typing import Optional, TYPE_CHECKING
|
||||
|
||||
from game.theater import ControlPoint, MissionTarget, OffMapSpawn
|
||||
from game.utils import nautical_miles
|
||||
from ..ato import FlightType
|
||||
from ..ato.flight import Flight
|
||||
from ..ato.package import Package
|
||||
from ..ato.starttype import StartType
|
||||
@@ -46,10 +47,18 @@ class PackageBuilder:
|
||||
caller should return any previously planned flights to the inventory
|
||||
using release_planned_aircraft.
|
||||
"""
|
||||
target = self.package.target
|
||||
heli = False
|
||||
pf = self.package.primary_flight
|
||||
heli = pf.is_helo if pf else False
|
||||
if pf:
|
||||
target = (
|
||||
pf.departure
|
||||
if pf.flight_type in [FlightType.AEWC, FlightType.REFUELING]
|
||||
else target
|
||||
)
|
||||
heli = pf.is_helo
|
||||
squadron = self.air_wing.best_squadron_for(
|
||||
self.package.target,
|
||||
target,
|
||||
plan.task,
|
||||
plan.num_aircraft,
|
||||
heli,
|
||||
|
||||
@@ -83,12 +83,19 @@ class PackageFulfiller:
|
||||
purchase_multiplier: int,
|
||||
ignore_range: bool = False,
|
||||
) -> None:
|
||||
target = mission.location
|
||||
pf = builder.package.primary_flight
|
||||
if (
|
||||
pf
|
||||
and pf.flight_type in [FlightType.AEWC, FlightType.REFUELING]
|
||||
and flight.task is FlightType.ESCORT
|
||||
):
|
||||
target = pf.departure
|
||||
if not builder.plan_flight(flight, ignore_range):
|
||||
pf = builder.package.primary_flight
|
||||
heli = pf.is_helo if pf else False
|
||||
missing_types.add(flight.task)
|
||||
purchase_order = AircraftProcurementRequest(
|
||||
near=mission.location,
|
||||
near=target,
|
||||
task_capability=flight.task,
|
||||
number=flight.num_aircraft * purchase_multiplier,
|
||||
heli=heli,
|
||||
|
||||
@@ -102,8 +102,14 @@ class PackagePlanningTask(TheaterCommanderTask, Generic[MissionTargetT]):
|
||||
state.context.settings,
|
||||
)
|
||||
with state.context.tracer.trace(f"{color} {self.flights[0].task} planning"):
|
||||
asap = False
|
||||
if (
|
||||
not state.context.coalition.ato.has_awacs_package
|
||||
and FlightType.AEWC in [f.task for f in self.flights]
|
||||
):
|
||||
asap = True
|
||||
self.package = fulfiller.plan_mission(
|
||||
ProposedMission(self.target, self.flights),
|
||||
ProposedMission(self.target, self.flights, asap=asap),
|
||||
self.purchase_multiplier,
|
||||
state.context.now,
|
||||
state.context.tracer,
|
||||
|
||||
@@ -25,6 +25,7 @@ class PlanAewc(PackagePlanningTask[MissionTarget]):
|
||||
|
||||
def propose_flights(self) -> None:
|
||||
self.propose_flight(FlightType.AEWC, 1)
|
||||
self.propose_flight(FlightType.ESCORT, 2)
|
||||
|
||||
@property
|
||||
def asap(self) -> bool:
|
||||
|
||||
@@ -25,3 +25,4 @@ class PlanRefueling(PackagePlanningTask[MissionTarget]):
|
||||
|
||||
def propose_flights(self) -> None:
|
||||
self.propose_flight(FlightType.REFUELING, 1)
|
||||
self.propose_flight(FlightType.ESCORT, 2)
|
||||
|
||||
Reference in New Issue
Block a user