landsandboat/scripts/utils/common.lua

121 lines
4.2 KiB
Lua
Raw Permalink Normal View History

2016-01-16 01:26:33 -05:00
-----------------------------------
-- switch
-----------------------------------
function switch(c)
local swtbl =
{
2018-05-01 21:53:02 -04:00
casevar = c,
caseof = function(self, code)
local f
if self.casevar then
f = code[self.casevar] or code.default
2018-05-01 21:53:02 -04:00
else
f = code.missing or code.default
2018-05-01 21:53:02 -04:00
end
if f then
if type(f) == 'function' then
return f(self.casevar, self)
2018-05-01 21:53:02 -04:00
else
error('case '..tostring(self.casevar)..' not a function')
2018-05-01 21:53:02 -04:00
end
end
end
}
return swtbl
end
2016-01-16 01:26:33 -05:00
-----------------------------------
-- printf
-----------------------------------
function printf(s, ...)
print(s:format(...))
end
2016-01-16 01:26:33 -05:00
2020-02-23 07:05:57 -08:00
-----------------------------------
-- set()
-- Returns a set that can be checked against
-----------------------------------
function set(list)
local set = {}
for _, item in pairs(list) do
set[item] = true
end
2020-02-23 07:05:57 -08:00
return set
end
-----------------------------------
-- getVanaMidnight(day)
-- Returns earth time value for midnight for current (or supplied day) in epoch format
-----------------------------------
function getVanaMidnight(day)
local curtime = GetSystemTime()
local secondsToMidnight = xi.vanaTime.DAY - (VanadielTime() % xi.vanaTime.DAY)
if day ~= nil then
secondsToMidnight = secondsToMidnight + (day * xi.vanaTime.DAY)
end
return curtime + secondsToMidnight
end
-----------------------------------
-- getVanadielMoonCycle()
-- Returns the current moon cycle index (011) based on Vanadiel moon phase and direction
-----------------------------------
function getVanadielMoonCycle()
local phase = VanadielMoonPhase()
local direction = VanadielMoonDirection()
local moonTable =
{
-- Peak State
[0] =
{
{ 100, xi.moonCycle.FULL_MOON }, -- Full Moon - 100% Full
{ 0, xi.moonCycle.NEW_MOON }, -- New Moon - 0% Full
},
-- Descending
[1] =
{
{ 94, xi.moonCycle.FULL_MOON }, -- Full Moon - 100 to 94%
{ 77, xi.moonCycle.GREATER_WANING_GIBBOUS }, -- Greater Waning Gibbous - 93 to 77%
{ 61, xi.moonCycle.LESSER_WANING_GIBBOUS }, -- Lesser Waning Gibbous - 76 to 61%
{ 41, xi.moonCycle.THIRD_QUARTER }, -- Third Quarter - 60 to 41%
{ 25, xi.moonCycle.GREATER_WANING_CRESCENT }, -- Greater Waning Crescent - 40 to 25%
{ 11, xi.moonCycle.LESSER_WANING_CRESCENT }, -- Lesser Waning Crescent - 24 to 11%
{ 0, xi.moonCycle.NEW_MOON }, -- New Moon - 10 to 0%
},
-- Ascending
[2] =
{
{ 90, xi.moonCycle.FULL_MOON }, -- Full Moon - 100 to 90%
{ 72, xi.moonCycle.GREATER_WAXING_GIBBOUS }, -- Greater Waxing Gibbous - 89 to 72%
{ 56, xi.moonCycle.LESSER_WAXING_GIBBOUS }, -- Lesser Waxing Gibbous - 71 to 56%
{ 39, xi.moonCycle.FIRST_QUARTER }, -- First Quarter - 55 to 39%
{ 22, xi.moonCycle.GREATER_WAXING_CRESCENT }, -- Greater Waxing Crescent - 38 to 22%
{ 6, xi.moonCycle.LESSER_WAXING_CRESCENT }, -- Lesser Waxing Crescent - 21 to 6%
{ 0, xi.moonCycle.NEW_MOON }, -- New Moon - 5 to 0%
},
}
local directionTable = moonTable[direction]
if not directionTable then
return xi.moonCycle.GREATER_WANING_GIBBOUS -- Greater Waxing Gibbous is the least offensive as base case.
end
-- Itterate down and trigger on the first matching phase
for _, entry in ipairs(directionTable) do
local threshold, moonCycle = entry[1], entry[2]
if phase >= threshold then
return moonCycle
end
end
return xi.moonCycle.GREATER_WANING_GIBBOUS -- Greater Waxing Gibbous is the least offensive as base case. (Shouldn't be able to hit this.)
end