mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
There doesn't appear to be any reason for us to be poking at implementation details here aside from changing the name from "unit" to "building" for that case. Just iterate over the known strike targets. Making this change uncovered some latent type errors. Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2564. (cherry picked from commit 5e7e5e2636c03e5b0da3fccf45b88951a3756059)
59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import timedelta
|
|
from typing import Literal, TYPE_CHECKING
|
|
|
|
from dcs import Point
|
|
|
|
from game.ato.flightwaypointtype import FlightWaypointType
|
|
from game.theater.theatergroup import TheaterUnit
|
|
from game.utils import Distance, meters
|
|
|
|
if TYPE_CHECKING:
|
|
from game.theater import ControlPoint
|
|
|
|
AltitudeReference = Literal["BARO", "RADIO"]
|
|
|
|
|
|
@dataclass
|
|
class FlightWaypoint:
|
|
name: str
|
|
waypoint_type: FlightWaypointType
|
|
position: Point
|
|
alt: Distance = meters(0)
|
|
alt_type: AltitudeReference = "BARO"
|
|
control_point: ControlPoint | None = None
|
|
|
|
# TODO: Merge with pretty_name.
|
|
# Only used in the waypoint list in the flight edit page. No sense
|
|
# having three names. A short and long form is enough.
|
|
description: str = ""
|
|
|
|
targets: list[TheaterUnit] = field(default_factory=list)
|
|
obj_name: str = ""
|
|
pretty_name: str = ""
|
|
only_for_player: bool = False
|
|
flyover: bool = False
|
|
|
|
# The minimum amount of fuel remaining at this waypoint in pounds.
|
|
min_fuel: float | None = None
|
|
|
|
# These are set very late by the air conflict generator (part of mission
|
|
# generation). We do it late so that we don't need to propagate changes
|
|
# to waypoint times whenever the player alters the package TOT or the
|
|
# flight's offset in the UI.
|
|
tot: timedelta | None = None
|
|
departure_time: timedelta | None = None
|
|
|
|
@property
|
|
def x(self) -> float:
|
|
return self.position.x
|
|
|
|
@property
|
|
def y(self) -> float:
|
|
return self.position.y
|
|
|
|
def __hash__(self) -> int:
|
|
return hash(id(self))
|