Cleanup and reword refuel waypoints

- rename Stopover back to CargoStop
- precise some waypoint naming
This commit is contained in:
RndName 2022-11-01 20:30:50 +01:00
parent 4f9719abc4
commit a47cb865fb
7 changed files with 42 additions and 55 deletions

View File

@ -111,7 +111,7 @@ class Builder(IBuilder[AirAssaultFlightPlan, AirAssaultLayout]):
altitude_is_agl,
),
drop_off=builder.drop_off(drop_off_zone),
stopover=None,
refuel=None,
target=assault_area,
nav_to_home=builder.nav_path(
drop_off_zone.position,

View File

@ -22,7 +22,7 @@ class AirliftLayout(StandardLayout):
pickup: FlightWaypoint | None
nav_to_drop_off: list[FlightWaypoint]
drop_off: FlightWaypoint
stopover: FlightWaypoint | None
refuel: FlightWaypoint | None
nav_to_home: list[FlightWaypoint]
def iter_waypoints(self) -> Iterator[FlightWaypoint]:
@ -32,8 +32,8 @@ class AirliftLayout(StandardLayout):
yield self.pickup
yield from self.nav_to_drop_off
yield self.drop_off
if self.stopover is not None:
yield self.stopover
if self.refuel is not None:
yield self.refuel
yield from self.nav_to_home
yield self.arrival
if self.divert is not None:
@ -77,7 +77,7 @@ class Builder(IBuilder[AirliftFlightPlan, AirliftLayout]):
builder = WaypointBuilder(self.flight, self.coalition)
pickup = None
stopover = None
refuel = None
if self.flight.is_helo:
# Create a pickupzone where the cargo will be spawned
pickup_zone = MissionTarget(
@ -96,12 +96,12 @@ class Builder(IBuilder[AirliftFlightPlan, AirliftLayout]):
drop_off = builder.drop_off(drop_off_zone)
# Add an additional stopover point so that the flight can refuel
stopover = builder.stopover(cargo.next_stop)
refuel = builder.land_refuel(cargo.next_stop)
else:
# Fixed Wing will get stopover points for pickup and dropoff
if cargo.origin != self.flight.departure:
pickup = builder.stopover(cargo.origin, "PICKUP")
drop_off = builder.stopover(cargo.next_stop, "DROP OFF")
pickup = builder.land_refuel(cargo.origin)
drop_off = builder.land_refuel(cargo.next_stop)
nav_to_pickup = builder.nav_path(
self.flight.departure.position,
@ -118,7 +118,7 @@ class Builder(IBuilder[AirliftFlightPlan, AirliftLayout]):
# base. Otherwise the Cargo drop will be the new Landing Waypoint and the
# AI will end its mission there instead of flying back.
# https://forum.dcs.world/topic/211775-landing-to-refuel-and-rearm-the-landingrefuar-waypoint/
arrival = builder.stopover(self.flight.arrival, "LANDING")
arrival = builder.land_refuel(self.flight.arrival, True)
return AirliftLayout(
departure=builder.takeoff(self.flight.departure),
@ -131,7 +131,7 @@ class Builder(IBuilder[AirliftFlightPlan, AirliftLayout]):
altitude_is_agl,
),
drop_off=drop_off,
stopover=stopover,
refuel=refuel,
nav_to_home=builder.nav_path(
cargo.origin.position,
self.flight.arrival.position,

View File

@ -494,21 +494,35 @@ class WaypointBuilder:
)
@staticmethod
def stopover(stopover: ControlPoint, name: str = "STOPOVER") -> FlightWaypoint:
"""Creates a stopover waypoint.
def land_refuel(
control_point: ControlPoint, is_destination: bool = False
) -> FlightWaypoint:
"""Creates a land refuel waypoint.
Args:
control_point: Pick up location.
control_point: The airbase to refuel.
is_destination: Due to an DCS Bug we need to set the last landing waypoint also as LandingReFuAr
"""
if is_destination:
return FlightWaypoint(
"LANDING",
FlightWaypointType.LAND_REFUEL,
control_point.position,
meters(0),
"RADIO",
description=f"Land at {control_point}",
pretty_name="Landing",
control_point=control_point,
)
return FlightWaypoint(
name,
FlightWaypointType.STOPOVER,
stopover.position,
"REFUEL",
FlightWaypointType.LAND_REFUEL,
control_point.position,
meters(0),
"RADIO",
description=f"Stopover at {stopover}",
pretty_name="Stopover location",
control_point=stopover,
description=f"Refuel at {control_point}",
pretty_name="Refuel",
control_point=control_point,
)
@staticmethod

View File

@ -47,4 +47,4 @@ class FlightWaypointType(IntEnum):
DROP_OFF = 27
BULLSEYE = 28
REFUEL = 29 # Should look for nearby tanker to refuel from.
STOPOVER = 30 # Stopover landing point using the LandingReFuAr waypoint type
CARGO_STOP = 30 # Stopover landing point using the LandingReFuAr waypoint type

View File

@ -1,9 +1,4 @@
from dcs.point import MovingPoint
from dcs.task import Land
from game.utils import feet
from dcs.point import PointAction
from dcs.point import MovingPoint, PointAction
from .pydcswaypointbuilder import PydcsWaypointBuilder
@ -11,16 +6,9 @@ from .pydcswaypointbuilder import PydcsWaypointBuilder
class CargoStopBuilder(PydcsWaypointBuilder):
def build(self) -> MovingPoint:
waypoint = super().build()
# Create a landing task, currently only for Helos!
if self.flight.is_helo:
# Calculate a landing point with a small buffer to prevent AI from landing
# directly at the static ammo depot and exploding
landing_point = waypoint.position.random_point_within(15, 5)
# Use Land Task with 30s duration for helos
waypoint.add_task(Land(landing_point, duration=30))
else:
# Fixed wing will drop the cargo at the waypoint so we set a lower altitude
waypoint.alt = int(feet(10000).meters)
waypoint.alt_type = "BARO"
waypoint.action = PointAction.FlyOverPoint
waypoint.type = "LandingReFuAr"
waypoint.action = PointAction.LandingReFuAr
waypoint.landing_refuel_rearm_time = 2 # Minutes.
if (control_point := self.waypoint.control_point) is not None:
waypoint.airdrome_id = control_point.airdrome_id_for_landing
return waypoint

View File

@ -1,15 +0,0 @@
from dcs.point import MovingPoint, PointAction
from dcs.task import Land
from .pydcswaypointbuilder import PydcsWaypointBuilder
class StopoverBuilder(PydcsWaypointBuilder):
def build(self) -> MovingPoint:
waypoint = super().build()
waypoint.type = "LandingReFuAr"
waypoint.action = PointAction.LandingReFuAr
waypoint.landing_refuel_rearm_time = 2 # Minutes.
if (control_point := self.waypoint.control_point) is not None:
waypoint.airdrome_id = control_point.airdrome_id_for_landing
return waypoint

View File

@ -16,7 +16,7 @@ from game.ato import Flight, FlightWaypoint
from game.ato.flightstate import InFlight, WaitingForStart
from game.ato.flightwaypointtype import FlightWaypointType
from game.ato.starttype import StartType
from game.missiongenerator.aircraft.waypoints.stopover import StopoverBuilder
from game.missiongenerator.aircraft.waypoints.cargostop import CargoStopBuilder
from game.missiongenerator.missiondata import MissionData
from game.settings import Settings
from game.utils import pairwise
@ -135,7 +135,7 @@ class WaypointGenerator:
FlightWaypointType.PATROL_TRACK: RaceTrackBuilder,
FlightWaypointType.PICKUP: CargoStopBuilder,
FlightWaypointType.REFUEL: RefuelPointBuilder,
FlightWaypointType.STOPOVER: StopoverBuilder,
FlightWaypointType.CARGO_STOP: CargoStopBuilder,
}
builder = builders.get(waypoint.waypoint_type, DefaultWaypointBuilder)
return builder(