getTimeOfDayOptions
Definition
-- @/lua/ge/extensions/core/levels.lua:291
local function getTimeOfDayOptions(levelName)
if not levelName then
return {}
end
local lowerLevelName = string.lower(levelName)
-- Check cache first
if timeOfDayOptionsCache[lowerLevelName] then
return timeOfDayOptionsCache[lowerLevelName]
end
-- Find the level and calculate time of day options
local level = getLevelByName(levelName)
local timeOfDayOptions = {}
if level and level.supportsTimeOfDay then
-- Start with default options if level includes them (default behavior)
if not level.excludeDefaultTimeOfDayOptions then
local defaultOptions = core_environment.getDefaultTimeOfDayOptions()
for _, option in ipairs(defaultOptions) do
table.insert(timeOfDayOptions, {
key = option.key,
value = option.value,
label = option.label
})
end
end
-- Override or add level-specific presets
if level.timeOfDayPresets then
for _, preset in ipairs(level.timeOfDayPresets) do
-- Check if this key already exists in our options
local existingIndex = nil
for i, option in ipairs(timeOfDayOptions) do
if option.key == preset.key then
existingIndex = i
break
end
end
if existingIndex then
-- Override existing option
timeOfDayOptions[existingIndex] = {
key = preset.key,
value = preset.value,
label = preset.label
}
else
-- Add new option
table.insert(timeOfDayOptions, {
key = preset.key,
value = preset.value,
label = preset.label
})
end
end
end
else
-- Level not found, use default options
timeOfDayOptions = {}
end
-- Sort options by time value (morning to night)
-- Time values: 0.5-1.0 = morning/day, 0.0-0.5 = evening/night
table.sort(timeOfDayOptions, function(a, b)
-- If both values are >= 0.5, sort normally
if a.value > 0.5 and b.value > 0.5 then
return a.value < b.value
end
-- If both values are < 0.5, sort normally
if a.value <= 0.5 and b.value <= 0.5 then
return a.value < b.value
end
-- If one is >= 0.5 and other is < 0.5, the >= 0.5 comes first
return a.value > 0.5
end)
-- Cache the result
timeOfDayOptionsCache[lowerLevelName] = timeOfDayOptions
return timeOfDayOptions
end
Callers
@/lua/ge/extensions/freeroam/freeroam.lua
local levelName = getCurrentLevelIdentifier()
local timeOfDayOptions = core_levels.getTimeOfDayOptions(levelName)
local timeValue = nil
@/ui/modules/environment/environment.js
// Fetch time of day options from backend
bngApi.engineLua('core_environment.getTimeOfDayOptions()',
(data) => {
@/lua/ge/extensions/freeroam/configuratorOptions/freeroamOptions.lua
-- Time of day options
local timeOfDayOptions = core_levels.getTimeOfDayOptions(level.levelName)
if timeOfDayOptions and #timeOfDayOptions > 0 then
@/lua/ge/extensions/core/environment.lua
levelIdentifier = levelIdentifier or getCurrentLevelIdentifier()
return core_levels.getTimeOfDayOptions(levelIdentifier)
end