mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Should prevent mid-air collisions in most cases, though I'm still worried about "off map" spawns that can possibly collide, though an easy fix would be to manually use time-spacing. Alternatively we need to treat it as a special case, assigning different altitudes to avoid collisions during the first leg of the flight if that turns out to be the case...
100 lines
2.3 KiB
Python
100 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import timedelta
|
|
from typing import Optional, TYPE_CHECKING
|
|
|
|
from game.dcs.aircrafttype import AircraftType
|
|
from game.missiongenerator.aircraft.flightdata import FlightData
|
|
from game.runways import RunwayData
|
|
|
|
if TYPE_CHECKING:
|
|
from game.radio.radios import RadioFrequency
|
|
from game.radio.tacan import TacanChannel
|
|
from game.utils import Distance
|
|
from uuid import UUID
|
|
|
|
|
|
@dataclass
|
|
class GroupInfo:
|
|
group_name: str
|
|
callsign: str
|
|
freq: RadioFrequency
|
|
blue: bool
|
|
|
|
|
|
@dataclass
|
|
class UnitInfo(GroupInfo):
|
|
unit_name: str
|
|
|
|
|
|
@dataclass
|
|
class AwacsInfo(GroupInfo):
|
|
"""AWACS information for the kneeboard."""
|
|
|
|
depature_location: Optional[str]
|
|
start_time: Optional[timedelta]
|
|
end_time: Optional[timedelta]
|
|
|
|
|
|
@dataclass
|
|
class TankerInfo(GroupInfo):
|
|
"""Tanker information for the kneeboard."""
|
|
|
|
variant: str
|
|
tacan: TacanChannel
|
|
start_time: Optional[timedelta]
|
|
end_time: Optional[timedelta]
|
|
|
|
|
|
@dataclass
|
|
class CarrierInfo(UnitInfo):
|
|
"""Carrier information."""
|
|
|
|
tacan: TacanChannel
|
|
|
|
|
|
@dataclass
|
|
class JtacInfo(UnitInfo):
|
|
"""JTAC information."""
|
|
|
|
region: str
|
|
code: str
|
|
|
|
|
|
@dataclass
|
|
class CargoInfo:
|
|
"""Cargo information."""
|
|
|
|
unit_type: str = field(default_factory=str)
|
|
spawn_zone: str = field(default_factory=str)
|
|
amount: int = field(default=1)
|
|
|
|
|
|
@dataclass
|
|
class LogisticsInfo:
|
|
"""Logistics information."""
|
|
|
|
pilot_names: list[str]
|
|
transport: AircraftType
|
|
blue: bool
|
|
|
|
logistic_unit: str = field(default_factory=str)
|
|
pickup_zone: str = field(default_factory=str)
|
|
drop_off_zone: str = field(default_factory=str)
|
|
target_zone: str = field(default_factory=str)
|
|
cargo: list[CargoInfo] = field(default_factory=list)
|
|
preload: bool = field(default=False)
|
|
|
|
|
|
@dataclass
|
|
class MissionData:
|
|
awacs: list[AwacsInfo] = field(default_factory=list)
|
|
runways: list[RunwayData] = field(default_factory=list)
|
|
carriers: list[CarrierInfo] = field(default_factory=list)
|
|
flights: list[FlightData] = field(default_factory=list)
|
|
tankers: list[TankerInfo] = field(default_factory=list)
|
|
jtacs: list[JtacInfo] = field(default_factory=list)
|
|
logistics: list[LogisticsInfo] = field(default_factory=list)
|
|
cp_stack: dict[UUID, Distance] = field(default_factory=dict)
|