mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Flights without a meaningful TOT make the code around startup time (and other scheduling behaviors) unnecessarily complicated because they have to handle unpredictable flight plans. We can simplify this by requiring that all flight plans have a waypoint associated with their TOT. For custom flight plans, we can just fall back to the takeoff waypoint. For RTB flight plans (which are only synthetic flight plans injected for aborted flights), we can use the abort point. This also means that all flight plans now have, at the very least, a departure waypoint. Deleting this waypoint is invalid even for custom flights, so that's no a problem.
30 lines
801 B
Python
30 lines
801 B
Python
from __future__ import annotations
|
|
|
|
from abc import ABC
|
|
from dataclasses import dataclass
|
|
from typing import TYPE_CHECKING, TypeVar
|
|
|
|
from game.ato.flightplans.flightplan import FlightPlan, Layout
|
|
|
|
if TYPE_CHECKING:
|
|
from ..flightwaypoint import FlightWaypoint
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class StandardLayout(Layout, ABC):
|
|
arrival: FlightWaypoint
|
|
divert: FlightWaypoint | None
|
|
bullseye: FlightWaypoint
|
|
|
|
|
|
LayoutT = TypeVar("LayoutT", bound=StandardLayout)
|
|
|
|
|
|
class StandardFlightPlan(FlightPlan[LayoutT], ABC):
|
|
"""Base type for all non-custom flight plans.
|
|
|
|
We can't reason about custom flight plans so they get special treatment, but all
|
|
others are guaranteed to have certain properties like departure and arrival points,
|
|
potentially a divert field, and a bullseye
|
|
"""
|