From 4eb886d0f35ccb3e3cf39e9de327664b65be9441 Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Sat, 11 Jul 2020 12:32:47 -0700 Subject: [PATCH 1/9] Typo fix --- Moose Development/Moose/Ops/ATIS.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 23b0c014e..31b7fc4a1 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -365,7 +365,7 @@ ATIS.Alphabet = { ATIS.RunwayM2T={ Caucasus=0, Nevada=12, - Normany=-10, + Normandy=-10, PersianGulf=2, } From f3f3406d649f9252595e75abed08337b1af8567e Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Sat, 11 Jul 2020 11:50:47 -0700 Subject: [PATCH 2/9] Reorder ATIS components to match real-life ATIS, add option to suppress all but Zulu times --- Moose Development/Moose/Ops/ATIS.lua | 267 ++++++++++++++------------- 1 file changed, 140 insertions(+), 127 deletions(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 31b7fc4a1..8feff6962 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -69,6 +69,7 @@ -- @field #boolean PmmHg If true, give pressure in millimeters of Mercury. Default is inHg for imperial and hecto Pascal (=mili Bars) for metric units. -- @field #boolean TDegF If true, give temperature in degrees Fahrenheit. Default is in degrees Celsius independent of chosen unit system. -- @field #number zuludiff Time difference local vs. zulu in hours. +-- @field #boolean zulutimeonly If true, suppresses report of local time, sunrise, and sunset. -- @field #number magvar Magnetic declination/variation at the airport in degrees. -- @field #table ils Table of ILS frequencies (can be runway specific). -- @field #table ndbinner Table of inner NDB frequencies (can be runway specific). @@ -304,6 +305,7 @@ ATIS = { PmmHg = nil, TDegF = nil, zuludiff = nil, + zulutimeonly = false, magvar = nil, ils = {}, ndbinner = {}, @@ -960,6 +962,14 @@ function ATIS:SetZuluTimeDifference(delta) return self end +-- Suppresses local time, sunrise, and sunset. Default is to report all these times. +-- @param #ATIS self +-- @return #ATIS self +function ATIS:ReportZuluTimeOnly() + self.zulutimeonly=true + return self +end + --- Add ILS station. Note that this can be runway specific. -- @param #ATIS self -- @param #number frequency ILS frequency in MHz. @@ -1450,19 +1460,46 @@ function ATIS:onafterBroadcast(From, Event, To) self.radioqueue:Number2Transmission(ZULU, nil, 0.5) self:Transmission(ATIS.Sound.TimeZulu, 0.2, subtitle) alltext=alltext..";\n"..subtitle + + if not self.zulutimeonly then - -- Sunrise Time - subtitle=string.format("Sunrise at %s local time", SUNRISE) - self:Transmission(ATIS.Sound.SunriseAt, 0.5, subtitle) - self.radioqueue:Number2Transmission(SUNRISE, nil, 0.2) - self:Transmission(ATIS.Sound.TimeLocal, 0.2) - alltext=alltext..";\n"..subtitle - - -- Sunset Time - subtitle=string.format("Sunset at %s local time", SUNSET) - self:Transmission(ATIS.Sound.SunsetAt, 0.5, subtitle) - self.radioqueue:Number2Transmission(SUNSET, nil, 0.5) - self:Transmission(ATIS.Sound.TimeLocal, 0.2) + -- Sunrise Time + subtitle=string.format("Sunrise at %s local time", SUNRISE) + self:Transmission(ATIS.Sound.SunriseAt, 0.5, subtitle) + self.radioqueue:Number2Transmission(SUNRISE, nil, 0.2) + self:Transmission(ATIS.Sound.TimeLocal, 0.2) + alltext=alltext..";\n"..subtitle + + -- Sunset Time + subtitle=string.format("Sunset at %s local time", SUNSET) + self:Transmission(ATIS.Sound.SunsetAt, 0.5, subtitle) + self.radioqueue:Number2Transmission(SUNSET, nil, 0.5) + self:Transmission(ATIS.Sound.TimeLocal, 0.2) + alltext=alltext..";\n"..subtitle + end + + -- Wind + if self.metric then + subtitle=string.format("Wind from %s at %s m/s", WINDFROM, WINDSPEED) + else + subtitle=string.format("Wind from %s at %s knots", WINDFROM, WINDSPEED) + end + if turbulence>0 then + subtitle=subtitle..", gusting" + end + local _WIND=subtitle + self:Transmission(ATIS.Sound.WindFrom, 1.0, subtitle) + self.radioqueue:Number2Transmission(WINDFROM) + self:Transmission(ATIS.Sound.At, 0.2) + self.radioqueue:Number2Transmission(WINDSPEED) + if self.metric then + self:Transmission(ATIS.Sound.MetersPerSecond, 0.2) + else + self:Transmission(ATIS.Sound.Knots, 0.2) + end + if turbulence>0 then + self:Transmission(ATIS.Sound.Gusting, 0.2) + end alltext=alltext..";\n"..subtitle -- Visibility @@ -1479,43 +1516,7 @@ function ATIS:onafterBroadcast(From, Event, To) self:Transmission(ATIS.Sound.NauticalMiles, 0.2) end alltext=alltext..";\n"..subtitle - - -- Cloud base - self:Transmission(CloudCover, 1.0, CLOUDSsub) - if CLOUDBASE and static then - -- Base - if self.metric then - subtitle=string.format("Cloudbase %s, ceiling %s meters", CLOUDBASE, CLOUDCEIL) - else - subtitle=string.format("Cloudbase %s, ceiling %s ft", CLOUDBASE, CLOUDCEIL) - end - self:Transmission(ATIS.Sound.CloudBase, 1.0, subtitle) - if tonumber(CLOUDBASE1000)>0 then - self.radioqueue:Number2Transmission(CLOUDBASE1000) - self:Transmission(ATIS.Sound.Thousand, 0.1) - end - if tonumber(CLOUDBASE0100)>0 then - self.radioqueue:Number2Transmission(CLOUDBASE0100) - self:Transmission(ATIS.Sound.Hundred, 0.1) - end - -- Ceiling - self:Transmission(ATIS.Sound.CloudCeiling, 0.5) - if tonumber(CLOUDCEIL1000)>0 then - self.radioqueue:Number2Transmission(CLOUDCEIL1000) - self:Transmission(ATIS.Sound.Thousand, 0.1) - end - if tonumber(CLOUDCEIL0100)>0 then - self.radioqueue:Number2Transmission(CLOUDCEIL0100) - self:Transmission(ATIS.Sound.Hundred, 0.1) - end - if self.metric then - self:Transmission(ATIS.Sound.Meters, 0.1) - else - self:Transmission(ATIS.Sound.Feet, 0.1) - end - end - alltext=alltext..";\n"..subtitle - + -- Weather phenomena local wp=false local wpsub="" @@ -1571,6 +1572,96 @@ function ATIS:onafterBroadcast(From, Event, To) alltext=alltext..";\n"..subtitle end + -- Cloud base + self:Transmission(CloudCover, 1.0, CLOUDSsub) + if CLOUDBASE and static then + -- Base + if self.metric then + subtitle=string.format("Cloudbase %s, ceiling %s meters", CLOUDBASE, CLOUDCEIL) + else + subtitle=string.format("Cloudbase %s, ceiling %s ft", CLOUDBASE, CLOUDCEIL) + end + self:Transmission(ATIS.Sound.CloudBase, 1.0, subtitle) + if tonumber(CLOUDBASE1000)>0 then + self.radioqueue:Number2Transmission(CLOUDBASE1000) + self:Transmission(ATIS.Sound.Thousand, 0.1) + end + if tonumber(CLOUDBASE0100)>0 then + self.radioqueue:Number2Transmission(CLOUDBASE0100) + self:Transmission(ATIS.Sound.Hundred, 0.1) + end + -- Ceiling + self:Transmission(ATIS.Sound.CloudCeiling, 0.5) + if tonumber(CLOUDCEIL1000)>0 then + self.radioqueue:Number2Transmission(CLOUDCEIL1000) + self:Transmission(ATIS.Sound.Thousand, 0.1) + end + if tonumber(CLOUDCEIL0100)>0 then + self.radioqueue:Number2Transmission(CLOUDCEIL0100) + self:Transmission(ATIS.Sound.Hundred, 0.1) + end + if self.metric then + self:Transmission(ATIS.Sound.Meters, 0.1) + else + self:Transmission(ATIS.Sound.Feet, 0.1) + end + end + alltext=alltext..";\n"..subtitle + + -- Temperature + if self.TDegF then + if temperature<0 then + subtitle=string.format("Temperature -%s °F", TEMPERATURE) + else + subtitle=string.format("Temperature %s °F", TEMPERATURE) + end + else + if temperature<0 then + subtitle=string.format("Temperature -%s °C", TEMPERATURE) + else + subtitle=string.format("Temperature %s °C", TEMPERATURE) + end + end + local _TEMPERATURE=subtitle + self:Transmission(ATIS.Sound.Temperature, 1.0, subtitle) + if temperature<0 then + self:Transmission(ATIS.Sound.Minus, 0.2) + end + self.radioqueue:Number2Transmission(TEMPERATURE) + if self.TDegF then + self:Transmission(ATIS.Sound.DegreesFahrenheit, 0.2) + else + self:Transmission(ATIS.Sound.DegreesCelsius, 0.2) + end + alltext=alltext..";\n"..subtitle + + -- Dew point + if self.TDegF then + if dewpoint<0 then + subtitle=string.format("Dew point -%s °F", DEWPOINT) + else + subtitle=string.format("Dew point %s °F", DEWPOINT) + end + else + if dewpoint<0 then + subtitle=string.format("Dew point -%s °C", DEWPOINT) + else + subtitle=string.format("Dew point %s °C", DEWPOINT) + end + end + local _DEWPOINT=subtitle + self:Transmission(ATIS.Sound.DewPoint, 1.0, subtitle) + if dewpoint<0 then + self:Transmission(ATIS.Sound.Minus, 0.2) + end + self.radioqueue:Number2Transmission(DEWPOINT) + if self.TDegF then + self:Transmission(ATIS.Sound.DegreesFahrenheit, 0.2) + else + self:Transmission(ATIS.Sound.DegreesCelsius, 0.2) + end + alltext=alltext..";\n"..subtitle + -- Altimeter QNH/QFE. if self.PmmHg then subtitle=string.format("Altimeter QNH %s.%s, QFE %s.%s mmHg", QNH[1], QNH[2], QFE[1], QFE[2]) @@ -1602,84 +1693,6 @@ function ATIS:onafterBroadcast(From, Event, To) end alltext=alltext..";\n"..subtitle - -- Temperature - if self.TDegF then - if temperature<0 then - subtitle=string.format("Temperature -%s °F", TEMPERATURE) - else - subtitle=string.format("Temperature %s °F", TEMPERATURE) - end - else - if temperature<0 then - subtitle=string.format("Temperature -%s °C", TEMPERATURE) - else - subtitle=string.format("Temperature %s °C", TEMPERATURE) - end - end - local _TEMPERATURE=subtitle - self:Transmission(ATIS.Sound.Temperature, 1.0, subtitle) - if temperature<0 then - self:Transmission(ATIS.Sound.Minus, 0.2) - end - self.radioqueue:Number2Transmission(TEMPERATURE) - if self.TDegF then - self:Transmission(ATIS.Sound.DegreesFahrenheit, 0.2) - else - self:Transmission(ATIS.Sound.DegreesCelsius, 0.2) - end - alltext=alltext..";\n"..subtitle - - -- Dew point - if self.TDegF then - if dewpoint<0 then - subtitle=string.format("Dew point -%s °F", DEWPOINT) - else - subtitle=string.format("Dew point %s °F", DEWPOINT) - end - else - if dewpoint<0 then - subtitle=string.format("Dew point -%s °C", DEWPOINT) - else - subtitle=string.format("Dew point %s °C", DEWPOINT) - end - end - local _DEWPOINT=subtitle - self:Transmission(ATIS.Sound.DewPoint, 1.0, subtitle) - if dewpoint<0 then - self:Transmission(ATIS.Sound.Minus, 0.2) - end - self.radioqueue:Number2Transmission(DEWPOINT) - if self.TDegF then - self:Transmission(ATIS.Sound.DegreesFahrenheit, 0.2) - else - self:Transmission(ATIS.Sound.DegreesCelsius, 0.2) - end - alltext=alltext..";\n"..subtitle - - -- Wind - if self.metric then - subtitle=string.format("Wind from %s at %s m/s", WINDFROM, WINDSPEED) - else - subtitle=string.format("Wind from %s at %s knots", WINDFROM, WINDSPEED) - end - if turbulence>0 then - subtitle=subtitle..", gusting" - end - local _WIND=subtitle - self:Transmission(ATIS.Sound.WindFrom, 1.0, subtitle) - self.radioqueue:Number2Transmission(WINDFROM) - self:Transmission(ATIS.Sound.At, 0.2) - self.radioqueue:Number2Transmission(WINDSPEED) - if self.metric then - self:Transmission(ATIS.Sound.MetersPerSecond, 0.2) - else - self:Transmission(ATIS.Sound.Knots, 0.2) - end - if turbulence>0 then - self:Transmission(ATIS.Sound.Gusting, 0.2) - end - alltext=alltext..";\n"..subtitle - -- Active runway. local subtitle=string.format("Active runway %s", runway) if rwyLeft==true then From 9f7471178b4481f917a1a2b4e9e72ee10acb7401 Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Sat, 11 Jul 2020 11:56:49 -0700 Subject: [PATCH 3/9] Add option to suppress reporting QFE --- Moose Development/Moose/Ops/ATIS.lua | 44 +++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 8feff6962..ec74af834 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -67,6 +67,7 @@ -- @field #number subduration Duration how long subtitles are displayed in seconds. -- @field #boolean metric If true, use metric units. If false, use imperial (default). -- @field #boolean PmmHg If true, give pressure in millimeters of Mercury. Default is inHg for imperial and hecto Pascal (=mili Bars) for metric units. +-- @field #boolean qnhonly If true, suppresses reporting QFE. Default is to report both QNH and QFE. -- @field #boolean TDegF If true, give temperature in degrees Fahrenheit. Default is in degrees Celsius independent of chosen unit system. -- @field #number zuludiff Time difference local vs. zulu in hours. -- @field #boolean zulutimeonly If true, suppresses report of local time, sunrise, and sunset. @@ -303,6 +304,7 @@ ATIS = { subduration = nil, metric = nil, PmmHg = nil, + qnhonly = false, TDegF = nil, zuludiff = nil, zulutimeonly = false, @@ -900,6 +902,14 @@ function ATIS:SetAltimeterQNH(switch) return self end +-- Suppresses QFE readout. Default is to report both QNH and QFE. +-- @param #ATIS self +-- @return #ATIS self +function ATIS:ReportQNHOnly() + self.qnhonly=true + return self +end + --- Set magnetic declination/variation at the airport. -- -- Default is per map: @@ -1664,24 +1674,42 @@ function ATIS:onafterBroadcast(From, Event, To) -- Altimeter QNH/QFE. if self.PmmHg then - subtitle=string.format("Altimeter QNH %s.%s, QFE %s.%s mmHg", QNH[1], QNH[2], QFE[1], QFE[2]) + if self.qnhonly then + subtitle=string.format("Altimeter %s.%s mmHg", QNH[1], QNH[2]) + else + subtitle=string.format("Altimeter QNH %s.%s, QFE %s.%s mmHg", QNH[1], QNH[2], QFE[1], QFE[2]) + end else if self.metric then - subtitle=string.format("Altimeter QNH %s.%s, QFE %s.%s hPa", QNH[1], QNH[2], QFE[1], QFE[2]) + if self.qnhonly then + subtitle=string.format("Altimeter %s.%s hPa", QNH[1], QNH[2]) + else + subtitle=string.format("Altimeter QNH %s.%s, QFE %s.%s hPa", QNH[1], QNH[2], QFE[1], QFE[2]) + end else - subtitle=string.format("Altimeter QNH %s.%s, QFE %s.%s inHg", QNH[1], QNH[2], QFE[1], QFE[2]) + if self.qnhonly then + subtitle=string.format("Altimeter %s.%s inHg", QNH[1], QNH[2]) + else + subtitle=string.format("Altimeter QNH %s.%s, QFE %s.%s inHg", QNH[1], QNH[2], QFE[1], QFE[2]) + end end end local _ALTIMETER=subtitle self:Transmission(ATIS.Sound.Altimeter, 1.0, subtitle) - self:Transmission(ATIS.Sound.QNH, 0.5) + if not self.qnhonly then + self:Transmission(ATIS.Sound.QNH, 0.5) + end self.radioqueue:Number2Transmission(QNH[1]) self:Transmission(ATIS.Sound.Decimal, 0.2) self.radioqueue:Number2Transmission(QNH[2]) - self:Transmission(ATIS.Sound.QFE, 0.75) - self.radioqueue:Number2Transmission(QFE[1]) - self:Transmission(ATIS.Sound.Decimal, 0.2) - self.radioqueue:Number2Transmission(QFE[2]) + + if not self.qnhonly then + self:Transmission(ATIS.Sound.QFE, 0.75) + self.radioqueue:Number2Transmission(QFE[1]) + self:Transmission(ATIS.Sound.Decimal, 0.2) + self.radioqueue:Number2Transmission(QFE[2]) + end + if self.PmmHg then self:Transmission(ATIS.Sound.MillimetersOfMercury, 0.1) else From 25b8cff44288d0c88ee27523bf10e4d188406096 Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Sat, 11 Jul 2020 12:34:19 -0700 Subject: [PATCH 4/9] Don't use ICAO phraseology for US airports --- Moose Development/Moose/Ops/ATIS.lua | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index ec74af834..706695eb2 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -373,6 +373,19 @@ ATIS.RunwayM2T={ PersianGulf=2, } +--- Whether ICAO phraseology is used for ATIS broadcasts. +-- @type ATIS.ICAOPhraseology +-- @field #boolean Caucasus true. +-- @field #boolean Nevada false. +-- @field #boolean Normandy true. +-- @field #boolean PersianGulf true. +ATIS.ICAOPhraseology={ + Caucasus=true, + Nevada=false, + Normandy=true, + PersianGulf=true +} + --- Nav point data. -- @type ATIS.NavPoint -- @field #number frequency Nav point frequency. @@ -1700,13 +1713,18 @@ function ATIS:onafterBroadcast(From, Event, To) self:Transmission(ATIS.Sound.QNH, 0.5) end self.radioqueue:Number2Transmission(QNH[1]) - self:Transmission(ATIS.Sound.Decimal, 0.2) + + if ATIS.ICAOPhraseology[UTILS.GetDCSMap()] then + self:Transmission(ATIS.Sound.Decimal, 0.2) + end self.radioqueue:Number2Transmission(QNH[2]) if not self.qnhonly then self:Transmission(ATIS.Sound.QFE, 0.75) self.radioqueue:Number2Transmission(QFE[1]) - self:Transmission(ATIS.Sound.Decimal, 0.2) + if ATIS.ICAOPhraseology[UTILS.GetDCSMap()] then + self:Transmission(ATIS.Sound.Decimal, 0.2) + end self.radioqueue:Number2Transmission(QFE[2]) end From 0c6aae45c1daeb325bb4583855421df31f8b41ce Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Sat, 11 Jul 2020 13:07:20 -0700 Subject: [PATCH 5/9] Do not report visibilities > 10 NM or 9999 m --- Moose Development/Moose/Ops/ATIS.lua | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 706695eb2..13104cec8 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -1387,13 +1387,24 @@ function ATIS:onafterBroadcast(From, Event, To) visibilitymin=dust end end + + local VISIBILITY="" - -- Visibility in NM. - local VISIBILITY=string.format("%d", UTILS.Round(UTILS.MetersToNM(visibilitymin))) - - -- Visibility in km. if self.metric then - VISIBILITY=string.format("%d", UTILS.Round(visibilitymin/1000)) + -- Visibility in km. + local reportedviz=UTILS.Round(visibilitymin/1000) + -- max reported visibility 9999 m + if reportedviz > 10 then + reportedviz=10 + end + VISIBILITY=string.format("%d", reportedviz) + else + -- max reported visibility 10 NM + local reportedviz=UTILS.Round(UTILS.MetersToNM(visibilitymin)) + if reportedviz > 10 then + reportedviz=10 + end + VISIBILITY=string.format("%d", reportedviz) end -------------- From 652f29b7821483b8f8497c2a0b3265994951574a Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Sat, 11 Jul 2020 13:07:44 -0700 Subject: [PATCH 6/9] Use SM for visibility, not NM --- Moose Development/Moose/Ops/ATIS.lua | 8 +++++--- Moose Development/Moose/Utilities/Utils.lua | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 13104cec8..04bf3cbc0 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -432,6 +432,7 @@ ATIS.ICAOPhraseology={ -- @field #ATIS.Soundfile MegaHertz -- @field #ATIS.Soundfile Meters -- @field #ATIS.Soundfile MetersPerSecond +-- @field #ATIS.Soundfile Miles -- @field #ATIS.Soundfile MillimetersOfMercury -- @field #ATIS.Soundfile N0 -- @field #ATIS.Soundfile N1 @@ -504,6 +505,7 @@ ATIS.Sound = { MegaHertz={filename="MegaHertz.ogg", duration=0.87}, Meters={filename="Meters.ogg", duration=0.59}, MetersPerSecond={filename="MetersPerSecond.ogg", duration=1.14}, + Miles={filename="Miles.ogg", duration=1.04}, MillimetersOfMercury={filename="MillimetersOfMercury.ogg", duration=1.53}, Minus={filename="Minus.ogg", duration=0.64}, N0={filename="N-0.ogg", duration=0.55}, @@ -1400,7 +1402,7 @@ function ATIS:onafterBroadcast(From, Event, To) VISIBILITY=string.format("%d", reportedviz) else -- max reported visibility 10 NM - local reportedviz=UTILS.Round(UTILS.MetersToNM(visibilitymin)) + local reportedviz=UTILS.Round(UTILS.MetersToSM(visibilitymin)) if reportedviz > 10 then reportedviz=10 end @@ -1540,14 +1542,14 @@ function ATIS:onafterBroadcast(From, Event, To) if self.metric then subtitle=string.format("Visibility %s km", VISIBILITY) else - subtitle=string.format("Visibility %s NM", VISIBILITY) + subtitle=string.format("Visibility %s SM", VISIBILITY) end self:Transmission(ATIS.Sound.Visibilty, 1.0, subtitle) self.radioqueue:Number2Transmission(VISIBILITY) if self.metric then self:Transmission(ATIS.Sound.Kilometers, 0.2) else - self:Transmission(ATIS.Sound.NauticalMiles, 0.2) + self:Transmission(ATIS.Sound.Miles, 0.2) end alltext=alltext..";\n"..subtitle diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index ece8a111b..291994188 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -313,6 +313,10 @@ UTILS.MetersToNM = function(meters) return meters/1852 end +UTILS.MetersToSM = function(meters) + return meters/1609.34 +end + UTILS.MetersToFeet = function(meters) return meters/0.3048 end From 999aba5d77d48b8cbad6dd44158294767e0c3765 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 19 Jul 2020 21:15:18 +0200 Subject: [PATCH 7/9] Update README.md --- README.md | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/README.md b/README.md index de1c7817f..7ba71d91c 100644 --- a/README.md +++ b/README.md @@ -73,19 +73,7 @@ MOOSE has a living (chat and video) community of users, beta testers and contrib - -# [Please DONATE ...](https://donorbox.org/fund-github-subscriptionfor-moose) - -If you appreciate this development, please support to extend the framework. The development of this framework takes a lot of time. -A small gift would help me to buy a new small laptop that I can use to extend this framework while commuting to and from work ... -Also, your donations will be saved and spent wisely to the advantage of the community! - -If everyone helps with a small amount, it would be really great! - -Donate - - Kind regards, FlightControl (FC) - \ No newline at end of file + From 6a04f83280a0fd85aac9865393845781f27bb9e6 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 19 Aug 2020 23:04:38 +0200 Subject: [PATCH 8/9] Syria MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ATIS - Added runway magnetic to true conversion. Channel map -10°, Syria +5°. - ICAOP phraseology The Channel and Syria true. UTILS - Added DCSMAP.Syria="Syria" - Magnetic declination for Syria set to 5° - GMT to local time for Syria is GMT+3. AIRBASE - Added AIRBASE.Syria enums. --- Moose Development/Moose/Ops/ATIS.lua | 12 +++- Moose Development/Moose/Utilities/Utils.lua | 8 ++- Moose Development/Moose/Wrapper/Airbase.lua | 74 +++++++++++++++++++++ 3 files changed, 91 insertions(+), 3 deletions(-) diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index 04bf3cbc0..15e37ed47 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -366,11 +366,15 @@ ATIS.Alphabet = { -- @field #number Nevada +12° (East). -- @field #number Normandy -10° (West). -- @field #number PersianGulf +2° (East). +-- @field #number TheChannel -10° (West). +-- @field #number Syria +5° (East). ATIS.RunwayM2T={ Caucasus=0, Nevada=12, Normandy=-10, PersianGulf=2, + TheChannel=-10, + Syria=5, } --- Whether ICAO phraseology is used for ATIS broadcasts. @@ -379,11 +383,15 @@ ATIS.RunwayM2T={ -- @field #boolean Nevada false. -- @field #boolean Normandy true. -- @field #boolean PersianGulf true. +-- @field #boolean TheChannel true. +-- @field #boolean Syria true. ATIS.ICAOPhraseology={ Caucasus=true, Nevada=false, Normandy=true, - PersianGulf=true + PersianGulf=true, + TheChannel=true, + Syria=true, } --- Nav point data. @@ -554,7 +562,7 @@ _ATIS={} --- ATIS class version. -- @field #string version -ATIS.version="0.8.0" +ATIS.version="0.9.0" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index 291994188..354a89221 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -49,12 +49,14 @@ BIGSMOKEPRESET = { -- @field #string NTTR Nevada Test and Training Range map. -- @field #string PersianGulf Persian Gulf map. -- @field #string TheChannel The Channel map. +-- @field #string Syria Syria map. DCSMAP = { Caucasus="Caucasus", NTTR="Nevada", Normandy="Normandy", PersianGulf="PersianGulf", TheChannel="TheChannel", + Syria="Syria", } @@ -1121,7 +1123,9 @@ function UTILS.GetMagneticDeclination(map) elseif map==DCSMAP.PersianGulf then declination=2 elseif map==DCSMAP.TheChannel then - declination=-10 + declination=-10 + elseif map==DCSMAP.Syria then + declination=5 else declination=0 end @@ -1248,6 +1252,8 @@ function UTILS.GMTToLocalTimeDifference() return 0 -- Calais UTC+1 hour elseif theatre==DCSMAP.TheChannel then return 2 -- This map currently needs +2 + elseif theatre==DCSMAP.Syria then + return 3 -- Damascus is UTC+3 hours else BASE:E(string.format("ERROR: Unknown Map %s in UTILS.GMTToLocal function. Returning 0", tostring(theatre))) return 0 diff --git a/Moose Development/Moose/Wrapper/Airbase.lua b/Moose Development/Moose/Wrapper/Airbase.lua index 55c78a30c..0bd6321b6 100644 --- a/Moose Development/Moose/Wrapper/Airbase.lua +++ b/Moose Development/Moose/Wrapper/Airbase.lua @@ -314,6 +314,80 @@ AIRBASE.TheChannel = { ["Detling"] = "Detling", ["High_Halden"] = "High Halden", } + +--- Airbases of Syria +-- +-- * AIRBASE.Syria.Kuweires +-- * AIRBASE.Syria.Marj_Ruhayyil +-- * AIRBASE.Syria.Kiryat_Shmona +-- * AIRBASE.Syria.Marj_as_Sultan_North +-- * AIRBASE.Syria.Eyn_Shemer +-- * AIRBASE.Syria.Incirlik +-- * AIRBASE.Syria.Damascus +-- * AIRBASE.Syria.Bassel_Al_Assad +-- * AIRBASE.Syria.Aleppo +-- * AIRBASE.Syria.Qabr_as_Sitt +-- * AIRBASE.Syria.Wujah_Al_Hajar +-- * AIRBASE.Syria.Al_Dumayr +-- * AIRBASE.Syria.Hatay +-- * AIRBASE.Syria.Haifa +-- * AIRBASE.Syria.Khalkhalah +-- * AIRBASE.Syria.Megiddo +-- * AIRBASE.Syria.Rayak +-- * AIRBASE.Syria.Mezzeh +-- * AIRBASE.Syria.King_Hussein_Air_College +-- * AIRBASE.Syria.Jirah +-- * AIRBASE.Syria.Taftanaz +-- * AIRBASE.Syria.Rene_Mouawad +-- * AIRBASE.Syria.Ramat_David +-- * AIRBASE.Syria.Minakh +-- * AIRBASE.Syria.Adana_Sakirpasa +-- * AIRBASE.Syria.Marj_as_Sultan_South +-- * AIRBASE.Syria.Hama +-- * AIRBASE.Syria.Al_Qusayr +-- * AIRBASE.Syria.Palmyra +-- * AIRBASE.Syria.Tabqa +-- * AIRBASE.Syria.Beirut_Rafic_Hariri +-- * AIRBASE.Syria.An_Nasiriyah +-- * AIRBASE.Syria.Abu_al_Duhur +-- +-- @field Syria +AIRBASE.Syria={ + ["Kuweires"]="Kuweires", + ["Marj_Ruhayyil"]="Marj Ruhayyil", + ["Kiryat_Shmona"]="Kiryat Shmona", + ["Marj_as_Sultan_North"]="Marj as Sultan North", + ["Eyn_Shemer"]="Eyn Shemer", + ["Incirlik"]="Incirlik", + ["Damascus"]="Damascus", + ["Bassel_Al_Assad"]="Bassel Al-Assad", + ["Aleppo"]="Aleppo", + ["Qabr_as_Sitt"]="Qabr as Sitt", + ["Wujah_Al_Hajar"]="Wujah Al Hajar", + ["Al_Dumayr"]="Al-Dumayr", + ["Hatay"]="Hatay", + ["Haifa"]="Haifa", + ["Khalkhalah"]="Khalkhalah", + ["Megiddo"]="Megiddo", + ["Rayak"]="Rayak", + ["Mezzeh"]="Mezzeh", + ["King_Hussein_Air_College"]="King Hussein Air College", + ["Jirah"]="Jirah", + ["Taftanaz"]="Taftanaz", + ["Rene_Mouawad"]="Rene Mouawad", + ["Ramat_David"]="Ramat David", + ["Minakh"]="Minakh", + ["Adana_Sakirpasa"]="Adana Sakirpasa", + ["Marj_as_Sultan_South"]="Marj as Sultan South", + ["Hama"]="Hama", + ["Al_Qusayr"]="Al Qusayr", + ["Palmyra"]="Palmyra", + ["Tabqa"]="Tabqa", + ["Beirut_Rafic_Hariri"]="Beirut-Rafic Hariri", + ["An_Nasiriyah"]="An Nasiriyah", + ["Abu_al_Duhur"]="Abu al-Duhur", +} + --- AIRBASE.ParkingSpot ".Coordinate, ".TerminalID", ".TerminalType", ".TOAC", ".Free", ".TerminalID0", ".DistToRwy". -- @type AIRBASE.ParkingSpot From 38f5fd824939c2c9a00bb220dab79fbb91a5959e Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 19 Aug 2020 23:10:20 +0200 Subject: [PATCH 9/9] SET_STATIC - Fixed #1345 --- Moose Development/Moose/Core/Set.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Moose Development/Moose/Core/Set.lua b/Moose Development/Moose/Core/Set.lua index 58cb5c386..f502578bf 100644 --- a/Moose Development/Moose/Core/Set.lua +++ b/Moose Development/Moose/Core/Set.lua @@ -3109,13 +3109,13 @@ do -- SET_STATIC self:F3( { Event } ) if Event.IniObjectCategory == Object.Category.STATIC then - if not self.Database[Event.IniDCSStaticName] then - self.Database[Event.IniDCSStaticName] = STATIC:Register( Event.IniDCSStaticName ) - self:T3( self.Database[Event.IniDCSStaticName] ) + if not self.Database[Event.IniDCSUnitName] then + self.Database[Event.IniDCSUnitName] = STATIC:Register( Event.IniDCSUnitName ) + self:T3( self.Database[Event.IniDCSUnitName] ) end end - return Event.IniDCSStaticName, self.Database[Event.IniDCSStaticName] + return Event.IniDCSUnitName, self.Database[Event.IniDCSUnitName] end --- Handles the Database to check on any event that Object exists in the Database. @@ -3125,10 +3125,10 @@ do -- SET_STATIC -- @return #string The name of the STATIC -- @return #table The STATIC function SET_STATIC:FindInDatabase( Event ) - self:F2( { Event.IniDCSStaticName, self.Set[Event.IniDCSStaticName], Event } ) + self:F2( { Event.IniDCSUnitName, self.Set[Event.IniDCSUnitName], Event } ) - return Event.IniDCSStaticName, self.Set[Event.IniDCSStaticName] + return Event.IniDCSUnitName, self.Set[Event.IniDCSUnitName] end