From 4eb886d0f35ccb3e3cf39e9de327664b65be9441 Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Sat, 11 Jul 2020 12:32:47 -0700 Subject: [PATCH 1/6] 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/6] 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/6] 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/6] 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/6] 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/6] 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