diff --git a/Moose Development/Moose/Core/Point.lua b/Moose Development/Moose/Core/Point.lua index ef54e3d5e..0559ed660 100644 --- a/Moose Development/Moose/Core/Point.lua +++ b/Moose Development/Moose/Core/Point.lua @@ -2034,8 +2034,10 @@ do -- COORDINATE -- Sunrise in seconds of the day. local sunrise=UTILS.GetSunRiseAndSet(DayOfYear, Latitude, Longitude, true, Tdiff) + local date=UTILS.GetDCSMissionDate() + -- Debug output. - --self:I(string.format("Sun rise at lat=%.3f long=%.3f on %s + %d days (DayOfYear=%d): %s (GMT %d)", Latitude, Longitude, date, x, DayOfYear, UTILS.SecondsToClock(sunrise), Tdiff)) + --self:I(string.format("Sun rise at lat=%.3f long=%.3f on %s (DayOfYear=%d): %s (%d sec of the day) (GMT %d)", Latitude, Longitude, date, DayOfYear, tostring(UTILS.SecondsToClock(sunrise)), sunrise, Tdiff)) if InSeconds then return sunrise @@ -2197,8 +2199,10 @@ do -- COORDINATE -- Sunrise in seconds of the day. local sunrise=UTILS.GetSunRiseAndSet(DayOfYear, Latitude, Longitude, false, Tdiff) + local date=UTILS.GetDCSMissionDate() + -- Debug output. - --self:I(string.format("Sun rise at lat=%.3f long=%.3f on %s + %d days (DayOfYear=%d): %s (GMT %d)", Latitude, Longitude, date, x, DayOfYear, UTILS.SecondsToClock(sunrise), Tdiff)) + --self:I(string.format("Sun set at lat=%.3f long=%.3f on %s (DayOfYear=%d): %s (%d sec of the day) (GMT %d)", Latitude, Longitude, date, DayOfYear, tostring(UTILS.SecondsToClock(sunrise)), sunrise, Tdiff)) if InSeconds then return sunrise diff --git a/Moose Development/Moose/Ops/ATIS.lua b/Moose Development/Moose/Ops/ATIS.lua index db2fa22a9..23b0c014e 100644 --- a/Moose Development/Moose/Ops/ATIS.lua +++ b/Moose Development/Moose/Ops/ATIS.lua @@ -434,6 +434,8 @@ ATIS.RunwayM2T={ -- @field #ATIS.Soundfile Right -- @field #ATIS.Soundfile Snow -- @field #ATIS.Soundfile SnowStorm +-- @field #ATIS.Soundfile SunriseAt +-- @field #ATIS.Soundfile SunsetAt -- @field #ATIS.Soundfile Temperature -- @field #ATIS.Soundfile Thousand -- @field #ATIS.Soundfile ThunderStorm @@ -505,6 +507,8 @@ ATIS.Sound = { Right={filename="Right.ogg", duration=0.44}, Snow={filename="Snow.ogg", duration=0.48}, SnowStorm={filename="SnowStorm.ogg", duration=0.82}, + SunriseAt={filename="SunriseAt.ogg", duration=0.92}, + SunsetAt={filename="SunsetAt.ogg", duration=0.95}, Temperature={filename="Temperature.ogg", duration=0.64}, Thousand={filename="Thousand.ogg", duration=0.55}, ThunderStorm={filename="ThunderStorm.ogg", duration=0.81}, @@ -531,7 +535,7 @@ _ATIS={} --- ATIS class version. -- @field #string version -ATIS.version="0.7.1" +ATIS.version="0.8.0" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- TODO list @@ -599,12 +603,12 @@ function ATIS:New(airbasename, frequency, modulation) -- Add FSM transitions. -- From State --> Event --> To State - self:AddTransition("Stopped", "Start", "Running") -- Start FSM. - self:AddTransition("*", "Status", "*") -- Update status. - self:AddTransition("*", "Broadcast", "*") -- Broadcast ATIS message. - self:AddTransition("*", "CheckQueue", "*") -- Check if radio queue is empty. - self:AddTransition("*", "Report", "*") -- Report ATIS text. - self:AddTransition("*", "Stop", "Stopped") -- Stop. + self:AddTransition("Stopped", "Start", "Running") -- Start FSM. + self:AddTransition("*", "Status", "*") -- Update status. + self:AddTransition("*", "Broadcast", "*") -- Broadcast ATIS message. + self:AddTransition("*", "CheckQueue", "*") -- Check if radio queue is empty. + self:AddTransition("*", "Report", "*") -- Report ATIS text. + self:AddTransition("*", "Stop", "Stopped") -- Stop. ------------------------ --- Pseudo Functions --- @@ -943,9 +947,10 @@ end -- Default is per map: -- -- * Caucasus +4 --- * Nevada -7 --- * Normandy +1 +-- * Nevada -8 +-- * Normandy 0 -- * Persian Gulf +4 +-- * The Channel +2 (should be 0) -- -- @param #ATIS self -- @param #number delta Time difference in hours. @@ -1244,8 +1249,6 @@ function ATIS:onafterBroadcast(From, Event, To) if WINDFROM=="000" then WINDFROM="360" end - - env.info(string.format("FF WINDFROM = %s", tostring(WINDFROM))) if self.metric then WINDSPEED=string.format("%d", windSpeed) @@ -1267,15 +1270,7 @@ function ATIS:onafterBroadcast(From, Event, To) -- User specified. time=time-self.zuludiff*60*60 else - if self.theatre==DCSMAP.Caucasus then - time=time-4*60*60 -- Caucasus UTC+4 hours - elseif self.theatre==DCSMAP.PersianGulf then - time=time-4*60*60 -- Abu Dhabi UTC+4 hours - elseif self.theatre==DCSMAP.NTTR then - time=time+7*60*60 -- Las Vegas UTC-7 hours - elseif self.theatre==DCSMAP.Normandy then - time=time-1*60*60 -- Calais UTC+1 hour - end + time=time-UTILS.GMTToLocalTimeDifference()*60*60 end local clock=UTILS.SecondsToClock(time) @@ -1293,6 +1288,18 @@ function ATIS:onafterBroadcast(From, Event, To) self:T3(string.format("ZULU =%s", tostring(ZULU))) self:T3(string.format("NATO =%s", tostring(NATO))) + -------------------------- + --- Sunrise and Sunset --- + -------------------------- + + local sunrise=coord:GetSunrise() + sunrise=UTILS.Split(sunrise, ":") + local SUNRISE=string.format("%s%s", sunrise[1], sunrise[2]) + + local sunset=coord:GetSunset() + sunset=UTILS.Split(sunset, ":") + local SUNSET=string.format("%s%s", sunset[1], sunset[2]) + --------------------------------- --- Temperature and Dew Point --- --------------------------------- @@ -1444,6 +1451,20 @@ function ATIS:onafterBroadcast(From, Event, To) self:Transmission(ATIS.Sound.TimeZulu, 0.2, subtitle) alltext=alltext..";\n"..subtitle + -- 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 + -- Visibility if self.metric then subtitle=string.format("Visibility %s km", VISIBILITY) diff --git a/Moose Development/Moose/Utilities/Utils.lua b/Moose Development/Moose/Utilities/Utils.lua index f5bb7def9..ece8a111b 100644 --- a/Moose Development/Moose/Utilities/Utils.lua +++ b/Moose Development/Moose/Utilities/Utils.lua @@ -48,11 +48,13 @@ BIGSMOKEPRESET = { -- @field #string Normandy Normandy map. -- @field #string NTTR Nevada Test and Training Range map. -- @field #string PersianGulf Persian Gulf map. +-- @field #string TheChannel The Channel map. DCSMAP = { Caucasus="Caucasus", NTTR="Nevada", Normandy="Normandy", - PersianGulf="PersianGulf" + PersianGulf="PersianGulf", + TheChannel="TheChannel", } @@ -1114,6 +1116,8 @@ function UTILS.GetMagneticDeclination(map) declination=-10 elseif map==DCSMAP.PersianGulf then declination=2 + elseif map==DCSMAP.TheChannel then + declination=-10 else declination=0 end @@ -1235,9 +1239,11 @@ function UTILS.GMTToLocalTimeDifference() elseif theatre==DCSMAP.PersianGulf then return 4 -- Abu Dhabi UTC+4 hours elseif theatre==DCSMAP.NTTR then - return -7 -- Las Vegas UTC-7 hours + return -8 -- Las Vegas UTC-8 hours elseif theatre==DCSMAP.Normandy then - return 1 -- Calais UTC+1 hour + return 0 -- Calais UTC+1 hour + elseif theatre==DCSMAP.TheChannel then + return 2 -- This map currently needs +2 else BASE:E(string.format("ERROR: Unknown Map %s in UTILS.GMTToLocal function. Returning 0", tostring(theatre))) return 0 @@ -1359,9 +1365,9 @@ function UTILS.GetSunRiseAndSet(DayOfYear, Latitude, Longitude, Rising, Tlocal) local T = H + RA - (0.06571 * t) - 6.622 -- Adjust back to UTC - local UT = fit_into_range(T - lng_hour, 0, 24) + local UT = fit_into_range(T - lng_hour +Tlocal, 0, 24) - return floor(UT)*60*60+frac(UT)*60*60+Tlocal*60*60 + return floor(UT)*60*60+frac(UT)*60*60--+Tlocal*60*60 end --- Get sun rise of a specific day of the year at a specific location. diff --git a/Moose Development/Moose/Wrapper/Airbase.lua b/Moose Development/Moose/Wrapper/Airbase.lua index b27fd5f07..55c78a30c 100644 --- a/Moose Development/Moose/Wrapper/Airbase.lua +++ b/Moose Development/Moose/Wrapper/Airbase.lua @@ -289,6 +289,31 @@ AIRBASE.PersianGulf = { ["Tunb_Island_AFB"] = "Tunb Island AFB", ["Tunb_Kochak"] = "Tunb Kochak", } + +--- These are all airbases of the The Channel Map: +-- +-- * AIRBASE.TheChannel.Abbeville_Drucat +-- * AIRBASE.TheChannel.Merville_Calonne +-- * AIRBASE.TheChannel.Saint_Omer_Longuenesse +-- * AIRBASE.TheChannel.Dunkirk_Mardyck +-- * AIRBASE.TheChannel.Manston +-- * AIRBASE.TheChannel.Hawkinge +-- * AIRBASE.TheChannel.Lympne +-- * AIRBASE.TheChannel.Detling +-- * AIRBASE.TheChannel.High_Halden +-- +-- @field TheChannel +AIRBASE.TheChannel = { + ["Abbeville_Drucat"] = "Abbeville Drucat", + ["Merville_Calonne"] = "Merville Calonne", + ["Saint_Omer_Longuenesse"] = "Saint Omer Longuenesse", + ["Dunkirk_Mardyck"] = "Dunkirk Mardyck", + ["Manston"] = "Manston", + ["Hawkinge"] = "Hawkinge", + ["Lympne"] = "Lympne", + ["Detling"] = "Detling", + ["High_Halden"] = "High Halden", +} --- AIRBASE.ParkingSpot ".Coordinate, ".TerminalID", ".TerminalType", ".TOAC", ".Free", ".TerminalID0", ".DistToRwy". -- @type AIRBASE.ParkingSpot