From 4b759134202e357ad9e44f92c196e25ad33c5972 Mon Sep 17 00:00:00 2001 From: Raffson Date: Wed, 1 May 2024 17:03:23 +0200 Subject: [PATCH] Insert orientation waypoint at/after IP As a result of using fast-forward, AI flights are already oriented towards SPLIT, which slows things down during mission start. The escorts tend to go all over the place because of this... --- .../aircraft/aircraftbehavior.py | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/game/missiongenerator/aircraft/aircraftbehavior.py b/game/missiongenerator/aircraft/aircraftbehavior.py index 9339133c..e458305e 100644 --- a/game/missiongenerator/aircraft/aircraftbehavior.py +++ b/game/missiongenerator/aircraft/aircraftbehavior.py @@ -1,6 +1,7 @@ import logging from typing import Any, Optional, Type, List +from dcs.point import MovingPoint from dcs.task import ( AWACS, AWACSTaskAction, @@ -31,8 +32,10 @@ from dcs.unitgroup import FlyingGroup from game.ato import Flight, FlightType from game.ato.flightplans.aewc import AewcFlightPlan +from game.ato.flightplans.formationattack import FormationAttackLayout from game.ato.flightplans.packagerefueling import PackageRefuelingFlightPlan from game.ato.flightplans.theaterrefueling import TheaterRefuelingFlightPlan +from game.utils import nautical_miles class AircraftBehavior: @@ -100,8 +103,25 @@ class AircraftBehavior: flight.squadron.coalition.game.settings.ai_unlimited_fuel ) + # at IP, insert waypoint to orient aircraft in correct direction + layout = flight.flight_plan.layout + at_ip_or_combat = flight.state.is_at_ip or flight.state.in_combat + if at_ip_or_combat and isinstance(layout, FormationAttackLayout): + a = group.points[0].position + b = layout.targets[0].position + pos = a.point_from_heading( + a.heading_between_point(b), nautical_miles(1).meters + ) + point = MovingPoint(pos) + point.alt = group.points[0].alt + point.alt_type = group.points[0].alt_type + point.ETA_locked = False + point.speed = group.points[0].speed + point.name = "Orientation WPT" + group.points.insert(1, point) + # Activate AI unlimited fuel for all flights at startup - if ai_unlimited_fuel and not (flight.state.is_at_ip or flight.state.in_combat): + if ai_unlimited_fuel and not at_ip_or_combat: group.points[0].tasks.append(SetUnlimitedFuelCommand(True)) group.points[0].tasks.append(OptReactOnThreat(react_on_threat))