Generate anti-ship missions with group attack.

Fixes https://github.com/dcs-liberation/dcs_liberation/issues/3068.
This commit is contained in:
Dan Albert 2023-07-11 20:16:59 -07:00
parent 82daa631bf
commit 9a59db1ed8
5 changed files with 50 additions and 1 deletions

View File

@ -10,6 +10,7 @@ Saves from 8.x are not compatible with 9.0.0.
## Fixes ## Fixes
* **[Data]** Fixed the class of the Samuel Chase so it can't be picked for a AAA or SHORAD site. * **[Data]** Fixed the class of the Samuel Chase so it can't be picked for a AAA or SHORAD site.
* **[Mission Generation]** Restored previous AI behavior for anti-ship missions. A DCS update caused only a single aircraft in a flight to attack. The full flight will now attack like they used to.
# 8.1.0 # 8.1.0

View File

@ -35,7 +35,7 @@ class Builder(FormationAttackBuilder[AntiShipFlightPlan, FormationAttackLayout])
else: else:
raise InvalidObjectiveLocation(self.flight.flight_type, location) raise InvalidObjectiveLocation(self.flight.flight_type, location)
return self._build(FlightWaypointType.INGRESS_BAI, targets) return self._build(FlightWaypointType.INGRESS_ANTI_SHIP, targets)
@staticmethod @staticmethod
def anti_ship_targets_for_tgo(tgo: NavalGroundObject) -> list[StrikeTarget]: def anti_ship_targets_for_tgo(tgo: NavalGroundObject) -> list[StrikeTarget]:

View File

@ -50,3 +50,4 @@ class FlightWaypointType(IntEnum):
CARGO_STOP = 30 # Stopover landing point using the LandingReFuAr waypoint type CARGO_STOP = 30 # Stopover landing point using the LandingReFuAr waypoint type
INGRESS_AIR_ASSAULT = 31 INGRESS_AIR_ASSAULT = 31
RECOVERY_TANKER = 32 RECOVERY_TANKER = 32
INGRESS_ANTI_SHIP = 33

View File

@ -0,0 +1,45 @@
import logging
from dcs.point import MovingPoint
from dcs.task import AttackGroup, OptFormation, WeaponType
from game.theater import NavalControlPoint, TheaterGroundObject
from game.transfers import MultiGroupTransport
from .pydcswaypointbuilder import PydcsWaypointBuilder
class AntiShipIngressBuilder(PydcsWaypointBuilder):
def add_tasks(self, waypoint: MovingPoint) -> None:
# TODO: Add common "UnitGroupTarget" base type.
group_names = []
target = self.package.target
if isinstance(target, TheaterGroundObject):
for group in target.groups:
group_names.append(group.group_name)
elif isinstance(target, MultiGroupTransport):
group_names.append(target.name)
elif isinstance(target, NavalControlPoint):
carrier_name = target.get_carrier_group_name()
if carrier_name:
group_names.append(carrier_name)
else:
logging.error(
"Unexpected target type for anti-ship mission: %s",
target.__class__.__name__,
)
return
for group_name in group_names:
miz_group = self.mission.find_group(group_name)
if miz_group is None:
logging.error(
"Could not find group for anti-ship mission %s", group_name
)
continue
task = AttackGroup(
miz_group.id, weapon_type=WeaponType.Auto, group_attack=True
)
waypoint.tasks.append(task)
waypoint.tasks.append(OptFormation.trail_open())

View File

@ -24,6 +24,7 @@ from game.missiongenerator.missiondata import MissionData
from game.settings import Settings from game.settings import Settings
from game.unitmap import UnitMap from game.unitmap import UnitMap
from game.utils import pairwise from game.utils import pairwise
from .antishipingress import AntiShipIngressBuilder
from .baiingress import BaiIngressBuilder from .baiingress import BaiIngressBuilder
from .casingress import CasIngressBuilder from .casingress import CasIngressBuilder
from .deadingress import DeadIngressBuilder from .deadingress import DeadIngressBuilder
@ -127,6 +128,7 @@ class WaypointGenerator:
self, waypoint: FlightWaypoint, generated_waypoint_index: int self, waypoint: FlightWaypoint, generated_waypoint_index: int
) -> PydcsWaypointBuilder: ) -> PydcsWaypointBuilder:
builders = { builders = {
FlightWaypointType.INGRESS_ANTI_SHIP: AntiShipIngressBuilder,
FlightWaypointType.INGRESS_BAI: BaiIngressBuilder, FlightWaypointType.INGRESS_BAI: BaiIngressBuilder,
FlightWaypointType.INGRESS_CAS: CasIngressBuilder, FlightWaypointType.INGRESS_CAS: CasIngressBuilder,
FlightWaypointType.INGRESS_DEAD: DeadIngressBuilder, FlightWaypointType.INGRESS_DEAD: DeadIngressBuilder,