Plan OCA strikes at heavily populated airfields.

https://github.com/Khopa/dcs_liberation/issues/349
This commit is contained in:
Dan Albert 2020-11-23 18:09:05 -08:00
parent b0317055e7
commit e68d2b5deb

View File

@ -22,6 +22,7 @@ from game import db
from game.data.radar_db import UNITS_WITH_RADAR from game.data.radar_db import UNITS_WITH_RADAR
from game.infos.information import Information from game.infos.information import Information
from game.theater import ( from game.theater import (
Airfield,
ControlPoint, ControlPoint,
FrontLine, FrontLine,
MissionTarget, MissionTarget,
@ -451,6 +452,15 @@ class ObjectiveFinder:
yield cp yield cp
break break
def oca_targets(self, min_aircraft: int) -> Iterator[MissionTarget]:
airfields = []
for control_point in self.enemy_control_points():
if not isinstance(control_point, Airfield):
continue
if control_point.base.total_aircraft >= min_aircraft:
airfields.append(control_point)
return self._targets_by_range(airfields)
def friendly_control_points(self) -> Iterator[ControlPoint]: def friendly_control_points(self) -> Iterator[ControlPoint]:
"""Iterates over all friendly control points.""" """Iterates over all friendly control points."""
return (c for c in self.game.theater.controlpoints if return (c for c in self.game.theater.controlpoints if
@ -507,6 +517,7 @@ class CoalitionMissionPlanner:
MAX_CAS_RANGE = nm_to_meter(50) MAX_CAS_RANGE = nm_to_meter(50)
MAX_ANTISHIP_RANGE = nm_to_meter(150) MAX_ANTISHIP_RANGE = nm_to_meter(150)
MAX_BAI_RANGE = nm_to_meter(150) MAX_BAI_RANGE = nm_to_meter(150)
MAX_OCA_RANGE = nm_to_meter(150)
MAX_SEAD_RANGE = nm_to_meter(150) MAX_SEAD_RANGE = nm_to_meter(150)
MAX_STRIKE_RANGE = nm_to_meter(150) MAX_STRIKE_RANGE = nm_to_meter(150)
@ -556,6 +567,15 @@ class CoalitionMissionPlanner:
ProposedFlight(FlightType.ESCORT, 2, self.MAX_BAI_RANGE), ProposedFlight(FlightType.ESCORT, 2, self.MAX_BAI_RANGE),
]) ])
for target in self.objective_finder.oca_targets(min_aircraft=20):
yield ProposedMission(target, [
ProposedFlight(FlightType.OCA_STRIKE, 2, self.MAX_OCA_RANGE),
ProposedFlight(FlightType.RUNWAY_ATTACK, 2, self.MAX_OCA_RANGE),
# TODO: Max escort range.
ProposedFlight(FlightType.ESCORT, 2, self.MAX_OCA_RANGE),
ProposedFlight(FlightType.SEAD, 2, self.MAX_OCA_RANGE),
])
# Plan strike missions. # Plan strike missions.
for target in self.objective_finder.strike_targets(): for target in self.objective_finder.strike_targets():
yield ProposedMission(target, [ yield ProposedMission(target, [