mirror of
https://github.com/akaAgar/the-universal-mission-for-dcs-world.git
synced 2025-11-25 19:31:01 +00:00
Added Library.environment table
This commit is contained in:
parent
4526601509
commit
ba63c5b9cd
277
Script/Library/Environment.lua
Normal file
277
Script/Library/Environment.lua
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
Library.environment = {}
|
||||||
|
|
||||||
|
Library.environment.windAmount = {
|
||||||
|
CALM = 1,
|
||||||
|
LIGHT_BREEZE = 2,
|
||||||
|
MODERATE_BREEZE = 3,
|
||||||
|
STRONG_BREEZE = 4,
|
||||||
|
GALE = 5,
|
||||||
|
STORM = 6
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
local DAYTIME_TABLE = {
|
||||||
|
["Afghanistan"] = {
|
||||||
|
{ 05 * 60 + 31, 18 * 60 + 33 },
|
||||||
|
{ 05 * 60 + 14, 19 * 60 + 00 },
|
||||||
|
{ 04 * 60 + 40, 19 * 60 + 24 },
|
||||||
|
{ 03 * 60 + 53, 19 * 60 + 54 },
|
||||||
|
{ 03 * 60 + 12, 20 * 60 + 27 },
|
||||||
|
{ 02 * 60 + 54, 20 * 60 + 53 },
|
||||||
|
{ 03 * 60 + 09, 20 * 60 + 48 },
|
||||||
|
{ 03 * 60 + 42, 20 * 60 + 12 },
|
||||||
|
{ 04 * 60 + 11, 19 * 60 + 24 },
|
||||||
|
{ 04 * 60 + 35, 18 * 60 + 42 },
|
||||||
|
{ 04 * 60 + 59, 18 * 60 + 15 },
|
||||||
|
{ 05 * 60 + 22, 18 * 60 + 14 },
|
||||||
|
},
|
||||||
|
["Caucasus"] = {
|
||||||
|
{ 08 * 60 + 26, 17 * 60 + 57 },
|
||||||
|
{ 07 * 60 + 49, 18 * 60 + 30 },
|
||||||
|
{ 07 * 60 + 14, 19 * 60 + 01 },
|
||||||
|
{ 07 * 60 + 30, 19 * 60 + 34 },
|
||||||
|
{ 06 * 60 + 35, 20 * 60 + 06 },
|
||||||
|
{ 05 * 60 + 33, 20 * 60 + 40 },
|
||||||
|
{ 06 * 60 + 06, 20 * 60 + 18 },
|
||||||
|
{ 06 * 60 + 39, 19 * 60 + 45 },
|
||||||
|
{ 07 * 60 + 11, 19 * 60 + 13 },
|
||||||
|
{ 08 * 60 + 02, 18 * 60 + 40 },
|
||||||
|
{ 08 * 60 + 17, 18 * 60 + 07 },
|
||||||
|
{ 08 * 60 + 39, 17 * 60 + 45 },
|
||||||
|
},
|
||||||
|
["Falklands"] = {
|
||||||
|
{ 04 * 60 + 42, 20 * 60 + 48 },
|
||||||
|
{ 05 * 60 + 32, 19 * 60 + 54 },
|
||||||
|
{ 06 * 60 + 24, 18 * 60 + 43 },
|
||||||
|
{ 07 * 60 + 18, 17 * 60 + 40 },
|
||||||
|
{ 08 * 60 + 08, 16 * 60 + 57 },
|
||||||
|
{ 08 * 60 + 51, 16 * 60 + 56 },
|
||||||
|
{ 09 * 60 + 04, 17 * 60 + 31 },
|
||||||
|
{ 08 * 60 + 33, 18 * 60 + 19 },
|
||||||
|
{ 07 * 60 + 33, 19 * 60 + 07 },
|
||||||
|
{ 06 * 60 + 24, 20 * 60 + 01 },
|
||||||
|
{ 05 * 60 + 17, 20 * 60 + 53 },
|
||||||
|
{ 04 * 60 + 36, 21 * 60 + 17 },
|
||||||
|
},
|
||||||
|
["GermanyCW"] = {
|
||||||
|
{ 08 * 60 + 09, 16 * 60 + 25 },
|
||||||
|
{ 07 * 60 + 22, 17 * 60 + 19 },
|
||||||
|
{ 06 * 60 + 20, 18 * 60 + 11 },
|
||||||
|
{ 06 * 60 + 08, 20 * 60 + 05 },
|
||||||
|
{ 05 * 60 + 10, 20 * 60 + 56 },
|
||||||
|
{ 04 * 60 + 42, 21 * 60 + 31 },
|
||||||
|
{ 05 * 60 + 02, 21 * 60 + 22 },
|
||||||
|
{ 05 * 60 + 49, 20 * 60 + 31 },
|
||||||
|
{ 06 * 60 + 40, 19 * 60 + 21 },
|
||||||
|
{ 07 * 60 + 32, 18 * 60 + 11 },
|
||||||
|
{ 07 * 60 + 28, 16 * 60 + 13 },
|
||||||
|
{ 08 * 60 + 11, 15 * 60 + 52 },
|
||||||
|
},
|
||||||
|
["Iraq"] = {
|
||||||
|
{ 07 * 60 + 06, 17 * 60 + 33 },
|
||||||
|
{ 06 * 60 + 58, 17 * 60 + 58 },
|
||||||
|
{ 06 * 60 + 30, 18 * 60 + 21 },
|
||||||
|
{ 05 * 60 + 50, 18 * 60 + 44 },
|
||||||
|
{ 05 * 60 + 14, 19 * 60 + 06 },
|
||||||
|
{ 04 * 60 + 53, 19 * 60 + 15 },
|
||||||
|
{ 04 * 60 + 56, 19 * 60 + 03 },
|
||||||
|
{ 05 * 60 + 15, 18 * 60 + 28 },
|
||||||
|
{ 05 * 60 + 36, 17 * 60 + 48 },
|
||||||
|
{ 05 * 60 + 56, 17 * 60 + 11 },
|
||||||
|
{ 06 * 60 + 20, 16 * 60 + 54 },
|
||||||
|
{ 06 * 60 + 47, 17 * 60 + 04 },
|
||||||
|
},
|
||||||
|
["Kola"] = {
|
||||||
|
{ 11 * 60 + 52, 14 * 60 + 02 },
|
||||||
|
{ 09 * 60 + 15, 16 * 60 + 50 },
|
||||||
|
{ 07 * 60 + 07, 18 * 60 + 47 },
|
||||||
|
{ 04 * 60 + 49, 20 * 60 + 48 },
|
||||||
|
{ 02 * 60 + 10, 23 * 60 + 24 },
|
||||||
|
{ 00 * 60 + 00, 23 * 60 + 59 },
|
||||||
|
{ 00 * 60 + 00, 23 * 60 + 59 },
|
||||||
|
{ 03 * 60 + 59, 21 * 60 + 41 },
|
||||||
|
{ 06 * 60 + 03, 19 * 60 + 19 },
|
||||||
|
{ 07 * 60 + 56, 17 * 60 + 08 },
|
||||||
|
{ 10 * 60 + 16, 14 * 60 + 47 },
|
||||||
|
{ 12 * 60 + 00, 13 * 60 + 01 },
|
||||||
|
},
|
||||||
|
["MarianaIslands"] = {
|
||||||
|
{ 07 * 60 + 10, 16 * 60 + 15 },
|
||||||
|
{ 06 * 60 + 50, 16 * 60 + 45 },
|
||||||
|
{ 06 * 60 + 13, 17 * 60 + 11 },
|
||||||
|
{ 05 * 60 + 31, 19 * 60 + 35 },
|
||||||
|
{ 05 * 60 + 00, 19 * 60 + 59 },
|
||||||
|
{ 04 * 60 + 49, 20 * 60 + 18 },
|
||||||
|
{ 05 * 60 + 31, 20 * 60 + 17 },
|
||||||
|
{ 05 * 60 + 24, 19 * 60 + 51 },
|
||||||
|
{ 05 * 60 + 46, 19 * 60 + 10 },
|
||||||
|
{ 06 * 60 + 09, 18 * 60 + 28 },
|
||||||
|
{ 06 * 60 + 37, 15 * 60 + 58 },
|
||||||
|
{ 07 * 60 + 03, 15 * 60 + 54 },
|
||||||
|
},
|
||||||
|
["MarianaIslandsWWII"] = {
|
||||||
|
{ 07 * 60 + 10, 16 * 60 + 15 },
|
||||||
|
{ 06 * 60 + 50, 16 * 60 + 45 },
|
||||||
|
{ 06 * 60 + 13, 17 * 60 + 11 },
|
||||||
|
{ 05 * 60 + 31, 19 * 60 + 35 },
|
||||||
|
{ 05 * 60 + 00, 19 * 60 + 59 },
|
||||||
|
{ 04 * 60 + 49, 20 * 60 + 18 },
|
||||||
|
{ 05 * 60 + 31, 20 * 60 + 17 },
|
||||||
|
{ 05 * 60 + 24, 19 * 60 + 51 },
|
||||||
|
{ 05 * 60 + 46, 19 * 60 + 10 },
|
||||||
|
{ 06 * 60 + 09, 18 * 60 + 28 },
|
||||||
|
{ 06 * 60 + 37, 15 * 60 + 58 },
|
||||||
|
{ 07 * 60 + 03, 15 * 60 + 54 },
|
||||||
|
},
|
||||||
|
["Nevada"] = {
|
||||||
|
{ 07 * 60 + 21, 16 * 60 + 19 },
|
||||||
|
{ 06 * 60 + 58, 16 * 60 + 51 },
|
||||||
|
{ 06 * 60 + 21, 17 * 60 + 18 },
|
||||||
|
{ 06 * 60 + 37, 18 * 60 + 44 },
|
||||||
|
{ 06 * 60 + 04, 19 * 60 + 10 },
|
||||||
|
{ 05 * 60 + 53, 19 * 60 + 29 },
|
||||||
|
{ 06 * 60 + 05, 19 * 60 + 27 },
|
||||||
|
{ 06 * 60 + 29, 19 * 60 + 00 },
|
||||||
|
{ 06 * 60 + 53, 18 * 60 + 17 },
|
||||||
|
{ 07 * 60 + 28, 17 * 60 + 34 },
|
||||||
|
{ 06 * 60 + 47, 16 * 60 + 02 },
|
||||||
|
{ 07 * 60 + 14, 15 * 60 + 58 },
|
||||||
|
},
|
||||||
|
["Normandy"] = {
|
||||||
|
{ 09 * 60 + 23, 17 * 60 + 01 },
|
||||||
|
{ 08 * 60 + 43, 17 * 60 + 52 },
|
||||||
|
{ 07 * 60 + 48, 18 * 60 + 37 },
|
||||||
|
{ 06 * 60 + 43, 19 * 60 + 24 },
|
||||||
|
{ 05 * 60 + 50, 20 * 60 + 09 },
|
||||||
|
{ 05 * 60 + 26, 20 * 60 + 40 },
|
||||||
|
{ 05 * 60 + 42, 20 * 60 + 34 },
|
||||||
|
{ 06 * 60 + 23, 19 * 60 + 51 },
|
||||||
|
{ 07 * 60 + 08, 18 * 60 + 48 },
|
||||||
|
{ 07 * 60 + 53, 17 * 60 + 44 },
|
||||||
|
{ 08 * 60 + 42, 16 * 60 + 52 },
|
||||||
|
{ 09 * 60 + 21, 16 * 60 + 34 },
|
||||||
|
},
|
||||||
|
["PersianGulf"] = {
|
||||||
|
{ 07 * 60 + 34, 17 * 60 + 17 },
|
||||||
|
{ 07 * 60 + 22, 17 * 60 + 39 },
|
||||||
|
{ 06 * 60 + 55, 17 * 60 + 55 },
|
||||||
|
{ 06 * 60 + 23, 18 * 60 + 09 },
|
||||||
|
{ 06 * 60 + 01, 18 * 60 + 25 },
|
||||||
|
{ 05 * 60 + 55, 18 * 60 + 39 },
|
||||||
|
{ 06 * 60 + 05, 18 * 60 + 40 },
|
||||||
|
{ 06 * 60 + 20, 18 * 60 + 21 },
|
||||||
|
{ 06 * 60 + 32, 17 * 60 + 50 },
|
||||||
|
{ 06 * 60 + 45, 17 * 60 + 19 },
|
||||||
|
{ 07 * 60 + 04, 16 * 60 + 58 },
|
||||||
|
{ 07 * 60 + 25, 16 * 60 + 58 },
|
||||||
|
},
|
||||||
|
["SinaiMap"] = {
|
||||||
|
{ 07 * 60 + 10, 16 * 60 + 15 },
|
||||||
|
{ 06 * 60 + 50, 16 * 60 + 45 },
|
||||||
|
{ 06 * 60 + 13, 17 * 60 + 11 },
|
||||||
|
{ 05 * 60 + 31, 19 * 60 + 35 },
|
||||||
|
{ 05 * 60 + 00, 19 * 60 + 59 },
|
||||||
|
{ 04 * 60 + 49, 20 * 60 + 18 },
|
||||||
|
{ 05 * 60 + 31, 20 * 60 + 17 },
|
||||||
|
{ 05 * 60 + 24, 19 * 60 + 51 },
|
||||||
|
{ 05 * 60 + 46, 19 * 60 + 10 },
|
||||||
|
{ 06 * 60 + 09, 18 * 60 + 28 },
|
||||||
|
{ 06 * 60 + 37, 15 * 60 + 58 },
|
||||||
|
{ 07 * 60 + 03, 15 * 60 + 54 },
|
||||||
|
},
|
||||||
|
["Syria"] = {
|
||||||
|
{ 07 * 60 + 10, 16 * 60 + 15 },
|
||||||
|
{ 06 * 60 + 50, 16 * 60 + 45 },
|
||||||
|
{ 06 * 60 + 13, 17 * 60 + 11 },
|
||||||
|
{ 05 * 60 + 31, 19 * 60 + 35 },
|
||||||
|
{ 05 * 60 + 00, 19 * 60 + 59 },
|
||||||
|
{ 04 * 60 + 49, 20 * 60 + 18 },
|
||||||
|
{ 05 * 60 + 31, 20 * 60 + 17 },
|
||||||
|
{ 05 * 60 + 24, 19 * 60 + 51 },
|
||||||
|
{ 05 * 60 + 46, 19 * 60 + 10 },
|
||||||
|
{ 06 * 60 + 09, 18 * 60 + 28 },
|
||||||
|
{ 06 * 60 + 37, 15 * 60 + 58 },
|
||||||
|
{ 07 * 60 + 03, 15 * 60 + 54 },
|
||||||
|
},
|
||||||
|
["TheChannel"] = {
|
||||||
|
{ 09 * 60 + 23, 17 * 60 + 01 },
|
||||||
|
{ 08 * 60 + 43, 17 * 60 + 52 },
|
||||||
|
{ 07 * 60 + 48, 18 * 60 + 37 },
|
||||||
|
{ 06 * 60 + 43, 19 * 60 + 24 },
|
||||||
|
{ 05 * 60 + 50, 20 * 60 + 09 },
|
||||||
|
{ 05 * 60 + 26, 20 * 60 + 40 },
|
||||||
|
{ 05 * 60 + 42, 20 * 60 + 34 },
|
||||||
|
{ 06 * 60 + 23, 19 * 60 + 51 },
|
||||||
|
{ 07 * 60 + 08, 18 * 60 + 48 },
|
||||||
|
{ 07 * 60 + 53, 17 * 60 + 44 },
|
||||||
|
{ 08 * 60 + 42, 16 * 60 + 52 },
|
||||||
|
{ 09 * 60 + 21, 16 * 60 + 34 },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Library.environment.getDayTime(monthIndex, sunset)
|
||||||
|
monthIndex = DCSEx.math.clamp(monthIndex or env.mission.date.Month, 1, 12)
|
||||||
|
sunset = sunset or false
|
||||||
|
|
||||||
|
if not env or not env.mission or not env.mission.theatre then return 0 end
|
||||||
|
if not DAYTIME_TABLE[env.mission.theatre] then return 0 end
|
||||||
|
|
||||||
|
local sunIndex = 1
|
||||||
|
if sunset then sunIndex = 2 end
|
||||||
|
|
||||||
|
return DAYTIME_TABLE[env.mission.theatre][monthIndex][sunIndex] * 60
|
||||||
|
end
|
||||||
|
|
||||||
|
function Library.environment.isItNightTime(timeOfDayInSeconds)
|
||||||
|
if not env or not env.mission or not env.mission.theatre then return false end
|
||||||
|
if not DAYTIME_TABLE[env.mission.theatre] then return false end
|
||||||
|
|
||||||
|
timeOfDayInSeconds = math.max(0, timeOfDayInSeconds or timer.getAbsTime())
|
||||||
|
|
||||||
|
if timeOfDayInSeconds > 86400 then
|
||||||
|
while timeOfDayInSeconds > 86400 do
|
||||||
|
timeOfDayInSeconds = timeOfDayInSeconds - 86400
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local sunriseTime = Library.environment.getDayTime(nil, false)
|
||||||
|
local sunsetTime = Library.environment.getDayTime(nil, true)
|
||||||
|
|
||||||
|
return timeOfDayInSeconds < sunriseTime or timeOfDayInSeconds > sunsetTime
|
||||||
|
end
|
||||||
|
|
||||||
|
function Library.environment.getWindLevel()
|
||||||
|
local windSpeed = 0
|
||||||
|
local windSpeedValuesCount = 0
|
||||||
|
|
||||||
|
if not env or not env.mission or not env.mission.weather or not env.mission.weather.wind then
|
||||||
|
return Library.environment.windAmount.CALM
|
||||||
|
end
|
||||||
|
|
||||||
|
for _,v in ipairs({"at8000", "atGround", "at2000"}) do
|
||||||
|
if env.mission.weather.wind[v] and env.mission.weather.wind[v].speed then
|
||||||
|
windSpeed = windSpeed + env.mission.weather.wind[v].speed
|
||||||
|
windSpeedValuesCount = windSpeedValuesCount + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if windSpeedValuesCount == 0 then
|
||||||
|
return Library.environment.windAmount.CALM
|
||||||
|
end
|
||||||
|
|
||||||
|
windSpeed = windSpeed / windSpeedValuesCount
|
||||||
|
if windSpeed < 1 then
|
||||||
|
return Library.environment.windAmount.CALM
|
||||||
|
elseif windSpeed < 4 then
|
||||||
|
return Library.environment.windAmount.LIGHT_BREEZE
|
||||||
|
elseif windSpeed < 8 then
|
||||||
|
return Library.environment.windAmount.MODERATE_BREEZE
|
||||||
|
elseif windSpeed < 14 then
|
||||||
|
return Library.environment.windAmount.STRONG_BREEZE
|
||||||
|
elseif windSpeed < 21 then
|
||||||
|
return Library.environment.windAmount.GALE
|
||||||
|
else
|
||||||
|
return Library.environment.windAmount.STORM
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user