mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Use ATC radio info from pydcs.
This commit is contained in:
@@ -9,7 +9,7 @@ import logging
|
||||
from collections.abc import Iterator
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import Any, ClassVar, Dict, Optional, TYPE_CHECKING, Tuple
|
||||
from typing import ClassVar, Dict, Optional, TYPE_CHECKING, Tuple
|
||||
|
||||
import yaml
|
||||
from dcs.task import Modulation
|
||||
@@ -30,15 +30,14 @@ class AtcData:
|
||||
uhf: RadioFrequency
|
||||
|
||||
@classmethod
|
||||
def from_yaml(cls, data: dict[str, Any]) -> Optional[AtcData]:
|
||||
atc_data = data.get("atc")
|
||||
if atc_data is None:
|
||||
def from_pydcs(cls, airport: Airport) -> Optional[AtcData]:
|
||||
if airport.atc_radio is None:
|
||||
return None
|
||||
return AtcData(
|
||||
RadioFrequency.parse(atc_data["hf"], Modulation.FM),
|
||||
RadioFrequency.parse(atc_data["vhf_low"], Modulation.FM),
|
||||
RadioFrequency.parse(atc_data["vhf_high"], Modulation.AM),
|
||||
RadioFrequency.parse(atc_data["uhf"], Modulation.AM),
|
||||
RadioFrequency(airport.atc_radio.hf_hz, Modulation.FM),
|
||||
RadioFrequency(airport.atc_radio.vhf_low_hz, Modulation.FM),
|
||||
RadioFrequency(airport.atc_radio.vhf_high_hz, Modulation.AM),
|
||||
RadioFrequency(airport.atc_radio.uhf_hz, Modulation.AM),
|
||||
)
|
||||
|
||||
|
||||
@@ -73,10 +72,6 @@ class AirfieldData:
|
||||
#: RSBN channel as a tuple of (callsign, channel).
|
||||
rsbn: Optional[Tuple[str, int]] = None
|
||||
|
||||
#: Radio channels used by the airfield's ATC. Note that not all airfields
|
||||
#: have ATCs.
|
||||
atc: Optional[AtcData] = None
|
||||
|
||||
#: Dict of runway heading -> ILS tuple of (callsign, frequency).
|
||||
ils: Dict[str, Tuple[str, RadioFrequency]] = field(default_factory=dict)
|
||||
|
||||
@@ -155,7 +150,6 @@ class AirfieldData:
|
||||
tacan_callsign,
|
||||
vor,
|
||||
rsbn,
|
||||
AtcData.from_yaml(data),
|
||||
ils,
|
||||
prmg,
|
||||
outer_ndb,
|
||||
|
||||
@@ -10,7 +10,7 @@ from dcs import Mission, Point
|
||||
from dcs.coalition import Coalition
|
||||
from dcs.countries import country_dict
|
||||
|
||||
from game.airfields import AirfieldData
|
||||
from game.airfields import AtcData
|
||||
from game.dcs.helpers import unit_type_from_name
|
||||
from game.missiongenerator.aircraft.aircraftgenerator import (
|
||||
AircraftGenerator,
|
||||
@@ -21,8 +21,6 @@ from game.radio.tacan import TacanRegistry
|
||||
from game.theater import Airfield, FrontLine
|
||||
from game.theater.bullseye import Bullseye
|
||||
from game.unitmap import UnitMap
|
||||
from .aircraft.flightdata import FlightData
|
||||
from .missiondata import MissionData
|
||||
from .airsupportgenerator import AirSupportGenerator
|
||||
from .beacons import load_beacons_for_terrain
|
||||
from .briefinggenerator import BriefingGenerator, MissionInfoGenerator
|
||||
@@ -36,6 +34,7 @@ from .frontlineconflictdescription import FrontLineConflictDescription
|
||||
from .kneeboard import KneeboardGenerator
|
||||
from .lasercoderegistry import LaserCodeRegistry
|
||||
from .luagenerator import LuaGenerator
|
||||
from .missiondata import MissionData
|
||||
from .tgogenerator import TgoGenerator
|
||||
from .triggergenerator import TriggerGenerator
|
||||
from .visualsgenerator import VisualsGenerator
|
||||
@@ -181,12 +180,12 @@ class MissionGenerator:
|
||||
def initialize_radio_registry(
|
||||
self, unique_map_frequencies: set[RadioFrequency]
|
||||
) -> None:
|
||||
for data in AirfieldData.for_theater(self.game.theater):
|
||||
if data.atc is not None:
|
||||
unique_map_frequencies.add(data.atc.hf)
|
||||
unique_map_frequencies.add(data.atc.vhf_fm)
|
||||
unique_map_frequencies.add(data.atc.vhf_am)
|
||||
unique_map_frequencies.add(data.atc.uhf)
|
||||
for airport in self.game.theater.terrain.airport_list():
|
||||
if (atc := AtcData.from_pydcs(airport)) is not None:
|
||||
unique_map_frequencies.add(atc.hf)
|
||||
unique_map_frequencies.add(atc.vhf_fm)
|
||||
unique_map_frequencies.add(atc.vhf_am)
|
||||
unique_map_frequencies.add(atc.uhf)
|
||||
# No need to reserve ILS or TACAN because those are in the
|
||||
# beacon list.
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from typing import Iterator, Optional, TYPE_CHECKING
|
||||
|
||||
from dcs.terrain.terrain import Airport
|
||||
|
||||
from game.airfields import AirfieldData
|
||||
from game.airfields import AirfieldData, AtcData
|
||||
from game.radio.radios import RadioFrequency
|
||||
from game.radio.tacan import TacanChannel
|
||||
from game.utils import Heading
|
||||
@@ -48,12 +48,12 @@ class RunwayData:
|
||||
tacan: Optional[TacanChannel] = None
|
||||
tacan_callsign: Optional[str] = None
|
||||
ils: Optional[RadioFrequency] = None
|
||||
atc_radio = AtcData.from_pydcs(airport)
|
||||
if atc_radio is not None:
|
||||
atc = atc_radio.uhf
|
||||
|
||||
try:
|
||||
airfield = AirfieldData.for_airport(theater, airport)
|
||||
if airfield.atc is not None:
|
||||
atc = airfield.atc.uhf
|
||||
else:
|
||||
atc = None
|
||||
tacan = airfield.tacan
|
||||
tacan_callsign = airfield.tacan_callsign
|
||||
ils = airfield.ils_freq(runway_name)
|
||||
|
||||
Reference in New Issue
Block a user