From 3cd1b2f80ae7dd7a009102ff9b15e7cc44c2e211 Mon Sep 17 00:00:00 2001 From: Raffson Date: Sun, 10 Mar 2024 00:49:36 +0100 Subject: [PATCH] Fine-tune target waypoints for Strike Eagle --- game/ato/flight.py | 9 ++++++++- .../aircraft/waypoints/pydcswaypointbuilder.py | 5 +++-- .../missiongenerator/aircraft/waypoints/strikeingress.py | 4 +++- .../combos/QPredefinedWaypointSelectionComboBox.py | 1 + 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/game/ato/flight.py b/game/ato/flight.py index 4509cce6..bc976144 100644 --- a/game/ato/flight.py +++ b/game/ato/flight.py @@ -10,6 +10,7 @@ from dcs import Point from dcs.planes import C_101CC, C_101EB, Su_33, FA_18C_hornet from game.dcs.aircrafttype import AircraftType +from game.theater import ControlPoint, MissionTarget from pydcs_extensions.hercules.hercules import Hercules from .flightmembers import FlightMembers from .flightroster import FlightRoster @@ -34,7 +35,6 @@ if TYPE_CHECKING: from game.sim.gameupdateevents import GameUpdateEvents from game.sim.simulationresults import SimulationResults from game.squadrons import Squadron, Pilot - from game.theater import ControlPoint from game.transfers import TransferOrder from game.data.weapons import WeaponType from .flightmember import FlightMember @@ -224,6 +224,13 @@ class Flight( def points(self) -> List[FlightWaypoint]: return self.flight_plan.waypoints[1:] + @property + def custom_targets(self) -> List[MissionTarget]: + return [ + MissionTarget(wpt.name, wpt.position) + for wpt in self.flight_plan.layout.custom_waypoints + ] + def position(self) -> Point: return self.state.estimate_position() diff --git a/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py b/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py index e8e85ee8..2bb34666 100644 --- a/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py +++ b/game/missiongenerator/aircraft/waypoints/pydcswaypointbuilder.py @@ -124,7 +124,8 @@ class PydcsWaypointBuilder: return False def register_special_strike_points( - self, targets: Iterable[Union[MissionTarget, TheaterUnit]] + self, targets: Iterable[Union[MissionTarget, TheaterUnit]], + start: int = 1, ) -> None: """Create special strike waypoints for various aircraft""" for i, t in enumerate(targets): @@ -135,7 +136,7 @@ class PydcsWaypointBuilder: # Add F-15E mission target points as mission 1 (for JDAM for instance) if self.group.units[0].unit_type == F_15ESE: self.group.add_nav_target_point( - t.position, f"M{(i//8)+1}.{i%8+1}" f"\nH-1" f"\nA0" f"\nV0" + t.position, f"M{(i//8)+start}.{i%8+1}\nH-1\nA0\nV0" ) def register_special_ingress_points(self) -> None: diff --git a/game/missiongenerator/aircraft/waypoints/strikeingress.py b/game/missiongenerator/aircraft/waypoints/strikeingress.py index 3d52e364..165dd5cb 100644 --- a/game/missiongenerator/aircraft/waypoints/strikeingress.py +++ b/game/missiongenerator/aircraft/waypoints/strikeingress.py @@ -2,7 +2,7 @@ import copy from typing import Union from dcs import Point -from dcs.planes import B_17G, B_52H, Tu_22M3, B_1B +from dcs.planes import B_17G, B_52H, Tu_22M3, B_1B, F_15ESE from dcs.point import MovingPoint from dcs.task import Bombing, Expend, OptFormation, WeaponType, CarpetBombing @@ -76,4 +76,6 @@ class StrikeIngressBuilder(PydcsWaypointBuilder): # Register special waypoints if not self._special_wpts_injected: self.register_special_strike_points(self.waypoint.targets) + if self.flight.unit_type.dcs_unit_type == F_15ESE: + self.register_special_strike_points(self.flight.custom_targets, 2) self._special_wpts_injected = True diff --git a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py index adb97f4e..2c02d947 100644 --- a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py +++ b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py @@ -97,6 +97,7 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): wpt.description = f"Friendly unit: {target.name}" else: wpt.description = f"Enemy unit: {target.name}" + wpt.waypoint_type = FlightWaypointType.TARGET_POINT i = add_model_item(i, model, wpt.pretty_name, wpt) if self.include_airbases: