mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
* fix conflict * squash bugs and reuse patrol layout * fix tanker tacan and formatting * fix unlimited fuel option * update pretense for tanker changes * reuse refueling flight plan and bugfix for sunken carrier changelog * remove unitmap dependency * formatting and more unit map removal * more formatting * typing and black * keep tanker out of clouds * fix if there are no clouds * better cloud handling * groundwork for recovery task * remove changes to game/commander * Finishing up recovery tankers --------- Co-authored-by: Raffson <Raffson@users.noreply.github.com>
62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import timedelta
|
|
from typing import Type
|
|
|
|
from game.ato.flightplans.ibuilder import IBuilder
|
|
from game.ato.flightplans.waypointbuilder import WaypointBuilder
|
|
from .patrolling import PatrollingLayout
|
|
from .refuelingflightplan import RefuelingFlightPlan
|
|
from .. import FlightWaypoint
|
|
from ...utils import knots
|
|
|
|
|
|
class RecoveryTankerFlightPlan(RefuelingFlightPlan):
|
|
@staticmethod
|
|
def builder_type() -> Type[Builder]:
|
|
return Builder
|
|
|
|
@property
|
|
def patrol_duration(self) -> timedelta:
|
|
return self.flight.coalition.game.settings.desired_tanker_on_station_time
|
|
|
|
@property
|
|
def tot_waypoint(self) -> FlightWaypoint:
|
|
return self.layout.departure
|
|
|
|
|
|
class Builder(IBuilder[RecoveryTankerFlightPlan, PatrollingLayout]):
|
|
def layout(self) -> PatrollingLayout:
|
|
|
|
builder = WaypointBuilder(self.flight)
|
|
altitude = builder.get_patrol_altitude
|
|
|
|
station_time = self.coalition.game.settings.desired_tanker_on_station_time
|
|
time_to_landing = station_time.total_seconds()
|
|
hdg = (self.coalition.game.conditions.weather.wind.at_0m.direction + 180) % 360
|
|
recovery_ship = self.package.target.position.point_from_heading(
|
|
hdg, time_to_landing * knots(20).meters_per_second
|
|
)
|
|
recovery_tanker = builder.recovery_tanker(recovery_ship)
|
|
patrol_end = builder.race_track_end(recovery_tanker.position, altitude)
|
|
patrol_end.only_for_player = True # avoid generating the waypoints
|
|
|
|
return PatrollingLayout(
|
|
departure=builder.takeoff(self.flight.departure),
|
|
nav_to=builder.nav_path(
|
|
self.flight.departure.position, recovery_ship, altitude
|
|
),
|
|
nav_from=builder.nav_path(
|
|
recovery_ship, self.flight.arrival.position, altitude
|
|
),
|
|
patrol_start=recovery_tanker,
|
|
patrol_end=patrol_end,
|
|
arrival=builder.land(self.flight.arrival),
|
|
divert=builder.divert(self.flight.divert),
|
|
bullseye=builder.bullseye(),
|
|
custom_waypoints=list(),
|
|
)
|
|
|
|
def build(self, dump_debug_info: bool = False) -> RecoveryTankerFlightPlan:
|
|
return RecoveryTankerFlightPlan(self.flight, self.layout())
|