GE Lua Documentation

Press F to search!

getList

Definition


-- @/lua/ge/extensions/core/levels.lua:67

local function getList()
  if cache ~= nil then
    --dump{'cache valid: ', cache}
    return cache
  end

  local levels = {}
  if not FS:directoryExists('/levels/') then
    log('E', '', 'main levels folder not found: /levels/')
    return {}
  end

  -- find all levels
  local found_levels = _findAvailableLevels()
  --dump{'found_levels', found_levels}

  for _, l in pairs(found_levels) do
    -- so, enrich the data of the levels for the user interface below
    local info = jsonReadFile(l.infoPath) or {}

    -- figure out the mod this belongs to
    local mod = extensions.core_modmanager.getModFromPath(l.infoPath, true)
    if mod then
      info.modID = mod.modID
      info.modName = mod.modname
      if mod.modData and mod.modData.title then
        info.modTitle = mod.modData.title
      end
    else
      info.modID = nil
      info.modName = 'BeamNG'
      info.modTitle = 'BeamNG.drive'
    end

    info.misFilePath = l.dir ..'/'..l.entryPoint
    info.dir = l.dir
    info.levelName = l.levelName
    info.fullfilename = l.fullfilename

    if info.hidden ~= nil then
      log("W", "", "Found deprecated flag 'hidden' in level: "..dumps(l.levelName)..". The flag has been renamed to 'isAuxiliary'")
      if info.isAuxiliary == nil then
        info.isAuxiliary = info.hidden
      end
    end

    info["official"] = isOfficialContentVPath(l.dir)

    if type(info["previews"]) == 'table' and #info["previews"] > 0 then
      -- add prefix
      local newPreviews = {}
      for _, img in pairs(info["previews"]) do
        table.insert(newPreviews, l.dir..'/' .. img)
      end
      info["previews"] = newPreviews
    else
      info["title"] = l.levelName
      info["previews"] = {
        imageExistsDefault(l.dirEntry..'.png', imageExistsDefault(l.dirEntry..'_preview.png')),
      }
    end
    info["preview"] = nil

    local foundDefaultSpawn = false
    if type(info.spawnPoints) == 'table' then
      for _, point in pairs(info.spawnPoints) do
        if not point.previews then point.previews = {} end

        -- add path prefix
        local newPreviews = {}
        for _, img in pairs(point.previews) do
          table.insert(newPreviews, l.dir..'/' .. img)
        end
        table.insert(newPreviews, imageExistsDefault(l.dir..'/'.. (point.preview or ''), l.dirEntry..'_preview.png'))
        point.previews = newPreviews
        point.preview = nil
        if point.objectname == info.defaultSpawnPointName then
          foundDefaultSpawn = true
          point.previews = info["previews"]
          point.flag = 'default'
        end
      end
    else
      info.spawnPoints = {}
    end

    if not foundDefaultSpawn then
      -- insert default spawn point
      table.insert(info.spawnPoints, {
        previews = info["previews"],
        translationId = 'ui.common.default',
        flag = 'default'
      })
    end

    if type(info.minimap) == 'table' then
      for _, elem in ipairs(info.minimap) do
        elem.file = l.dir..'/' .. elem.file
      end
    end

    -- default to true if not set
    if info.supportsTraffic == nil then info.supportsTraffic = true end
    if info.supportsTimeOfDay == nil then info.supportsTimeOfDay = true end

    table.insert(levels, info)
    ::continue::
  end

  -- now filter out .mis levels if a json version of the same exists
  local jsonLevels = {}
  for _, level in pairs(levels) do
    if string.find(level.fullfilename, ".json") then
      jsonLevels[level.levelName] = true
    end
  end

  local newLevels = {}
  for _, level in pairs(levels) do
    -- check if there is a json version of this, thus hide the old .mis file format
    if string.find(level.fullfilename, ".mis") and jsonLevels[level.levelName] then
      --log('D', '', 'not adding .mis level as .json format is existing for the same level: ' .. dumps(level))
    else
      table.insert(newLevels, level)
    end
  end
  levels = newLevels

  -- sort by name, case insensitive
  table.sort(levels, function(a, b) return string.lower(a.levelName) < string.lower(b.levelName) end )

  cache = levels
  --dump{"generated levels cache: ", cache}

  return cache
end

Callers

@/lua/ge/extensions/scenario/scenariosLoader.lua
-- this function is used by the UI to display the list of scenarios, and by techCore to get the list of available scenarios
local function getList(subdirectory, includeAll, skipMissions)
  displayedRestrictMessage = false
  -- refresh the list
  local scenarios = getList()
  -- select the scenario again
local function load(name)
  local list = getList()
  for _, v in ipairs(list) do
@/lua/ge/extensions/gameplay/garageMode.lua
    local levelInfo = {}
    for _, level in ipairs(core_levels.getList()) do
      if string.lower(level.levelName) == string.lower(getCurrentLevelIdentifier()) then
@/lua/ge/extensions/editor/missionEditor.lua

  for _, scenario in ipairs(scenario_scenariosLoader.getList()) do
    local origin = "Scenario"
@/lua/ge/extensions/ui/apps/minimap/additionalInfo.lua
  else
    for _, lvl in ipairs(core_levels.getList()) do
      if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then
@/lua/ge/extensions/career/modules/uiUtils.lua
local function getCareerCurrentLevelName()
  for _, lvl in ipairs(core_levels.getList()) do
    if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then
@/lua/ge/extensions/tech/techCore.lua
  scenarios = {}
  local scenarioList = scenariosLoader.getList(nil, true)
  for _, v in ipairs(scenarioList) do
M.handleGetLevels = function(request)
  local list = core_levels.getList()
  local resp = {type = 'GetLevels', result = list}
@/lua/ge/extensions/gameplay/sites/sitesManager.lua
  local fileCount = 0
  for _, info in ipairs(core_levels.getList()) do
    local level = string.lower(info.levelName)
@/lua/ge/extensions/editor/flowgraphEditor.lua
local function isActionMapEnabled(map)
  local list = ActionMap:getList()
  if list and list.active then
@/lua/ge/extensions/ui/gameplaySelector/tileGenerators/levelTiles.lua
local function onGameplaySelectorGetTiles(items)
  for _, level in ipairs(core_levels.getList()) do
    local defaultSpawnPointCount = 0
@/lua/ge/extensions/ui/bindingsLegend.lua
  local name = actionMapName.."ActionMap"
  for _, actionMap in ipairs(ActionMap:getList().active) do
    if actionMap.enabled and actionMap.name == name then
@/lua/ge/extensions/util/precompileShaders.lua
local function onInit()
    local allLevels = core_levels.getList()
    for _, value in pairs(allLevels) do
@/ui/modules/scenarioselect/scenarioselect.js

  bngApi.engineLua('scenario_scenariosLoader.getList()', function(res) {
    $scope.filtered = []
@/lua/ge/extensions/util/docCreator.lua

  local levels = deepcopy(extensions.core_levels.getList())
  cleanupTable(job, levels)
@/lua/ge/extensions/util/stepHandler.lua
    local foundLevel = false
    for i, v in ipairs(core_levels.getList()) do
      if v.levelName:lower() == step.level:lower() then
@/lua/ge/extensions/gameplay/missions/missionManager.lua
    local foundLevel = false
    for i, v in ipairs(core_levels.getList()) do
      if v.levelName:lower() == step.level:lower() then
@/lua/ge/extensions/ui/gameplaySelector/tileGenerators/campaignTiles.lua
  if backend.backendName == "gameplaySelector" then
    for _, campaign in ipairs(campaign_campaignsLoader.getList()) do
      local item = {
@/lua/ge/extensions/core/input/bindings.lua
  actionToControl = nil
  for i,s in pairs(ActionMap:getList())do
    for j,v in ipairs(s) do
@/lua/ge/extensions/career/modules/spawnPoints.lua
    levelInfo = nil
    for _, info in ipairs(core_levels.getList()) do
      if string.lower(info.levelName) == string.lower(currentLevel) then
@/lua/ge/extensions/ui/gameplaySelector/tileGenerators/scenarioTiles.lua
  if backend.backendName == "gameplaySelector" then
    for _, scenario in ipairs(scenario_scenariosLoader.getList(nil, false, true)) do
      local item = {
@/ui/modules/campaignselect/campaignselect.js

    bngApi.engineLua('campaign_campaignsLoader.getList()', function(res) {
      $scope.filtered = []
@/lua/ge/extensions/core/levels.lua
  local res = {}
  for _, level in ipairs(getList()) do
    table.insert(res, level.levelName)
  local res = {}
  for _, level in ipairs(getList()) do
    table.insert(res, level.dir.."/")
  levelName = string.lower(levelName)
  for _, l in ipairs(getList()) do
    if string.lower(l.levelName) == levelName then
local function getListWithStats()
  return { levels = getList(), uiStats = freeroam_levelStats.getUiStats() }
end
@/lua/ge/extensions/freeroam/vueBigMap.lua
  }
  for _, lvl in ipairs(core_levels.getList()) do
    if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then
@/lua/ge/extensions/campaign/campaignsLoader.lua

local function getList()
  -- log('D', logTag, 'getList called...')

  local campaigns = getList()
  for _,campaign in pairs(campaigns) do
local function startByFolder(path, endCallback)
  local campaignList = getList()
  for _,camp in ipairs(campaignList) do
@/ui/modules/rallyselect/rallyselect.js

  bngApi.engineLua('scenario_scenariosLoader.getList()', function(res) {
    $scope.filtered = []
@/lua/ge/extensions/freeroam/bigMapPoiProvider.lua

  for _, lvl in ipairs(core_levels.getList()) do
    if string.lower(lvl.levelName) == getCurrentLevelIdentifier() then