mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Plan OCA strikes at heavily populated airfields.
https://github.com/Khopa/dcs_liberation/issues/349
This commit is contained in:
parent
b0317055e7
commit
e68d2b5deb
@ -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, [
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user