GE Lua Documentation

Press F to search!

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