Autoplan Air-to-Air Escorts for AWACS & Tankers

This commit is contained in:
Raffson
2024-12-17 17:43:00 +01:00
parent d2fa027cdd
commit e02698d8a8
11 changed files with 80 additions and 16 deletions

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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:

View File

@@ -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)