dcs-retribution/gen/airfields.py
2020-09-01 20:23:52 +02:00

332 lines
7.7 KiB
Python

"""Extra airfield data that is not exposed by pydcs.
Remove once https://github.com/pydcs/dcs/issues/69 tracks getting the missing
data added to pydcs. Until then, missing data can be manually filled in here.
"""
from dataclasses import dataclass, field
from typing import Dict, List, Optional
RadioFrequency = str
@dataclass
class AtcData:
hf: RadioFrequency
vhf_fm: RadioFrequency
vhf_am: RadioFrequency
uhf: RadioFrequency
@dataclass
class AirfieldData:
"""Additional airfield data not included in pydcs."""
#: ICAO airport code
icao: Optional[str] = None
#: Elevation (in ft).
elevation: int = 0
#: Runway length (in ft).
runway_length: int = 0
#: TACAN channel as a string, i.e. "74X".
tacan: Optional[str] = None
#: TACAN callsign
tacan_callsign: Optional[str] = None
#: VOR channel as a string, i.e. "114.90 (MA)".
vor: Optional[str] = None
#: RSBN channel as a string, i.e. "ch 28 (KW)".
rsbn: Optional[str] = None
#: Radio channels used by the airfield's ATC.
atc: AtcData = AtcData("", "", "", "")
#: Dict of runway heading -> ILS frequency.
ils: Dict[str, RadioFrequency] = field(default_factory=dict)
#: Dict of runway heading -> PRMG info, i.e "ch 26 (KW)"
prmg: Dict[str, str] = field(default_factory=dict)
#: Dict of runway heading -> outer ndb, i.e "408.00 (KW)"
outer_ndb: Dict[str, str] = field(default_factory=dict)
#: Dict of runway heading -> inner ndb, i.e "803.00 (K)
inner_ndb: Dict[str, str] = field(default_factory=dict)
def ils_freq(self, runway: str) -> Optional[RadioFrequency]:
return self.ils.get(runway)
# TODO: Add more airfields.
AIRFIELD_DATA = {
# TODO : CAUCASUS MAP
"Batumi": AirfieldData(
"UGSB",
32, 6792,
"16X", "BTM",
"", "",
AtcData("4.250", "131.000", "40.400", "260.000"),
{"13": "110.30 (ILU)"},
{},
{},
{}
),
"Kobuleti": AirfieldData(
"UG5X",
59, 7406,
"67X", "KBL",
"", "",
AtcData("4.350", "133.000", "40.800", "262.000"),
{"7": "111.50 (IKB)"},
{},
{"7": "870.00 (KT)"},
{"7": "490.00 (T)"},
),
"Senaki-Kolkhi": AirfieldData(
"UGKS",
43, 7256,
"31X", "TSK",
"", "",
AtcData("4.300", "132.000", "40.600", "261.000"),
{"9": "108.90 (ITS)"},
{},
{"9": "335.00 (BI)"},
{"9": "688.00 (I)"},
),
"Kutaisi": AirfieldData(
"UGKO",
147, 7937,
"44X", "KTS",
"113.60 (KT)", "",
AtcData("4.400", "134.000", "41.000", "263.000"),
{"8": "109.75 (IKS)"},
{},
{},
{},
),
"Sukhumi-Babushara": AirfieldData(
"UGSS",
43, 11217,
"", "",
"", "",
AtcData("4.150", "129.000", "40.000", "258.000"),
{},
{},
{"30": "489.00 (AV)"},
{"30": "995.00 (A)"},
),
"Gudauta": AirfieldData(
"UG23",
68, 7839,
"", "",
"", "",
AtcData("4.200", "120.000", "40.200", "259.000"),
{},
{},
{},
{},
),
"Sochi-Adler": AirfieldData(
"URSS",
98, 9686,
"", "",
"", "",
AtcData("4.050", "127.000", "39.600", "256.000"),
{"6": "111.10 (ISO)"},
{},
{},
{},
),
"Gelendzhik": AirfieldData(
"URKG",
72, 5452,
"", "",
"114.30 (GN)", "",
AtcData("4.000", "126.000", "39.400", "255.000"),
{},
{},
{},
{},
),
"Novorossiysk": AirfieldData(
"URKN",
131, 5639,
"", "",
"", "",
AtcData("3.850", "123.000", "38.800", "252.000"),
{},
{},
{},
{},
),
"Anapa-Vityazevo": AirfieldData(
"URKA",
141, 8623,
"", "",
"", "",
AtcData("3.750", "121.000", "38.400", "250.000"),
{},
{},
{"22": "443.00 (AP)", "4": "443.00 (AN)"},
{"22": "215.00 (P)", "4": "215.00 (N)"},
),
"Krymsk": AirfieldData(
"URKW",
65, 6733,
"", "",
"", "ch 28 (KW)",
AtcData("3.900", "124.000", "39.000", "253.000"),
{},
{"4": "ch 26 (OX)", "22": "ch 26 (KW)"},
{"4": "408.00 (OX)", "22": "408.00 (KW)"},
{"4": "803.00 (O)", "22": "803.00 (K)"},
),
"Krasnodar-Center": AirfieldData(
"URKL",
98, 7659,
"", "",
"", "ch 40 (MB)",
AtcData("3.800", "122.000", "38.600", "251.000"),
{},
{"9": "ch 38 (MB)"},
{"9": "625.00 (MB)", "27": "625.00 (OC)"},
{"9": "303.00 (M)", "27": "303.00 (C)"},
),
"Krasnodar-Pashkovsky": AirfieldData(
"URKK",
111, 9738,
"", "",
"115.80 (KN)", "",
AtcData("4.100", "128.000", "39.800", "257.000"),
{},
{},
{"23": "493.00 (LD)", "5": "493.00 (KR)"},
{"23": "240.00 (L)", "5": "240.00 (K)"},
),
"Maykop-Khanskaya": AirfieldData(
"URKH",
590, 10195,
"", "",
"", "ch 34 (DG)",
AtcData("3.950", "125.000", "39.200", "254.000"),
{},
{"4": "ch 36 (DG)"},
{"4": "289.00 (DG)", "22": "289.00 (RK)"},
{"4": "591.00 (D)", "22": "591.00 (R)"},
),
"Mineralnye Vody": AirfieldData(
"URMM",
1049, 12316,
"", "",
"117.10 (MN)", "",
AtcData("4.450", "135.000", "41.200", "264.000"),
{"30": "109.30 (IMW)", "12": "111.70 (IMD)"},
{},
{"30": "583.00 (NR)", "12": "583.00 (MD)"},
{"30": "283.00 (N)", "12": "283.00 (D)"},
),
"Nalchik": AirfieldData(
"URMN",
1410, 7082,
"", "",
"", "",
AtcData("4.500", "136.000", "41.400", "265.000"),
{"24": "110.50 (INL)"},
{},
{"24": "718.00 (NL)"},
{"24": "350.00 (N)"},
),
"Mozdok": AirfieldData(
"XRMF",
507, 7734,
"", "",
"", "ch 20 (MZ)",
AtcData("4.550", "137.000", "41.600", "266.000"),
{},
{"26": "ch 22 (MZ)", "8": "ch 22 (MZ)"},
{"26": "525.00 (RM)", "8": "525.00 (DO)"},
{"26": "1.06 (R)", "8": "1.06 (D)"}
),
"Beslan": AirfieldData(
"URMO",
1719, 9327,
"", "",
"", "",
AtcData("4.750", "141.000", "42.400", "270.000"),
{"10": "110.50 (ICH)"},
{},
{"10": "1.05 (CX)"},
{"10": "250.00 (C)"}
),
"Tbilisi-Lochini": AirfieldData(
"UGTB",
1573, 7692,
"25X", "GTB",
"113.70 (INA)", "",
AtcData("4.600", "138.000", "41.800", "267.000"),
{"13": "110.30 (INA)", "30": "108.90 (INA)"},
{},
{"13": "342.00 (BP)", "30": "211.00 (NA)"},
{"13": "923.00 (B)", "30": "435.00 (N)"},
),
"Soganlung": AirfieldData(
"UG24",
1474, 7871,
"25X", "GTB",
"113.70 (INA)", "",
AtcData("4.650", "139.000", "42.000", "268.000"),
{},
{},
{},
{},
),
"Vaziani": AirfieldData(
"UG27",
1523, 7842,
"22X", "VAS",
"", "",
AtcData("4.700", "140.000", "42.200", "269.000"),
{"13": "108.75 (IVZ)", "31": "108.75 (IVZ)"},
{},
{},
{},
),
# TODO : PERSIAN GULF MAP
# TODO : SYRIA MAP
# "Incirlik": AirfieldData(
# AtcData("3.85", "38.6", "129.4", "360.1"),
# "21X",
# {"050": "109.3", "230": "111.7"}
# ),
# TODO : NEVADA MAP
# TODO : NORMANDY MAP
# TODO : THE CHANNEL MAP
}