GE Lua Documentation

Press F to search!

formatMission

Definition


-- @/lua/ge/extensions/gameplay/missions/missionScreen.lua:19

-- formats a single mission.
local function formatMission(m)
  local previewFile = m.previewFile
  if previewFile:sub(1, 1) == "/" then
      previewFile = previewFile:sub(2)
  end

  -- this will check for a parent mission, as used in the rally loop.
  local missionIdForAttempt = m.missionIdForAttempt
  local parentMission = nil
  if missionIdForAttempt then
    parentMission = gameplay_missions_missions.getMissionById(missionIdForAttempt)
  end

  local info = {
    id = m.id,
    name = m.name,
    icon = m.iconFontIcon,
    description = m.description,
    previews = {previewFile},
    missionTypeLabel = m.missionTypeLabel or mission.missionType,
    userSettings = m:getUserSettingsData() or {},
    defaultUserSettings = m.defaultUserSettings or {},
    lastUserSettings = m.lastUserSettings,
    --activeStars = M.getActiveStarsForUserSettings(m.id,nil),
    additionalAttributes = {},
    progress = m.saveData.progress,
    currentProgressKey = m.currentProgressKey or m.defaultProgressKey,
    unlocks = m.unlocks,
    hasUserSettingsUnlocked = gameplay_missions_progress.missionHasUserSettingsUnlocked(m.id),
    devMission = m.devMission,
    hasRules = m:hasRules(),
    official = m.official,
    author = m.author,
    date = m.date,
    parentInfo = parentMission and {
      id = parentMission.id,
      name = parentMission.name,
      description = parentMission.description,
      missionTypeLabel = parentMission.missionTypeLabel,
      progress = parentMission.saveData.progress,
      currentProgressKey = parentMission.currentProgressKey,
      icon = parentMission.iconFontIcon,
      date = parentMission.date,
    } or nil,
  }

  -- Process parentInfo additional fields if parent mission exists
  if parentMission then
    -- Format progress for parentInfo
    info.parentInfo.formattedProgress = gameplay_missions_progress.formatSaveDataForUi(parentMission.id)

    -- Pre-format aggregates for the UI
    for key, prog in pairs(info.parentInfo.formattedProgress.formattedProgressByKey) do
      local ownAggregate = {}
      for i, label in ipairs(prog.ownAggregate.labels) do
        table.insert(ownAggregate, {
          label = label,
          value = prog.ownAggregate.rows[1][i]
        })
      end
      prog.ownAggregate = ownAggregate
    end

    -- Set leaderboard key
    info.parentInfo.leaderboardKey = parentMission.defaultLeaderboardKey or 'recent'
  end

  if gameplay_missions_missionManager.getForegroundMissionId() == m.id then
    --dump("default user settings from ",info.defaultUserSettings)
    --info.defaultUserSettings = deepcopy(m.lastUserSettings or {})
    --dump(info.defaultUserSettings)
    --info.activeStars = M.getActiveStarsForUserSettings(m.id, info.defaultUserSettings)
    for _, s in ipairs(info.userSettings) do
      if (m.lastUserSettings and m.lastUserSettings[s.key] ~= nil) then
        s.value = m.lastUserSettings[s.key]
      end
    end
  else
    if m._lastUserSettingsOutsideOfMission then
      for _, s in ipairs(info.userSettings) do
        for _, l in ipairs(m._lastUserSettingsOutsideOfMission) do
          if l.key == s.key then
            s.value = l.value
          end
        end
      end
    end
  end
  m:setPreviewsForCustomVehicles(info.userSettings)


  info.hasUserSettings = #info.userSettings > 0
  local additionalAttributes, additionalAttributesSortedKeys = gameplay_missions_missions.getAdditionalAttributes()

  for _, attKey in ipairs(additionalAttributesSortedKeys) do
    local att = additionalAttributes[attKey]
    local mAttKey = m.additionalAttributes[attKey]
    local val
    if type(mAttKey) == 'string' then
      val = att.valuesByKey[m.additionalAttributes[attKey]]
    elseif type(mAttKey) == 'table' then
      val = m.additionalAttributes[attKey]
    end
    if val then
      table.insert(info.additionalAttributes, {
        icon = att.icon or "",
        labelKey = att.translationKey,
        valueKey = val.translationKey
      })
    end
  end
  for _, customAtt in ipairs(m.customAdditionalAttributes or {}) do
    table.insert(info.additionalAttributes, customAtt)
  end
  info.formattedProgress =  gameplay_missions_progress.formatSaveDataForUi(m.id)

  -- pre-format aggregates for the UI. This formatting might be the default later and then be moved to gameplay_missions_progress
  for key, prog in pairs(info.formattedProgress.formattedProgressByKey) do
    --dump(key)
    --dumpz(prog, 5)
    local ownAggregate = {}
    for i, label in ipairs(prog.ownAggregate.labels) do
      table.insert(ownAggregate, {
        label = label,
        value = prog.ownAggregate.rows[1][i]
      })
    end
    prog.ownAggregate = ownAggregate
  end

  info.leaderboardKey = m.defaultLeaderboardKey or 'recent'

  --info.gameContextUiButtons = {}
  info.gameContextUiButtons = m.getMissionScreenDataUiButtons and m:getMissionScreenDataUiButtons()

  --some career info like leagues
  if career_modules_branches_leagues then
    info.leagues = career_modules_branches_leagues.getLeaguesForMission(m.id)
  end
  return info
end

Callers

@/lua/ge/extensions/flowgraph/modules/uiModule.lua
        local m = gameplay_missions_missions.getMissionById(mId)
        league.missions[i] = formatMission(m)
      end
      local m = gameplay_missions_missions.getMissionById(elem.id)
      elem.formatted = formatMission(m)
      if m.startCondition.type == "league" then
@/lua/ge/extensions/career/modules/branches/landing.lua
            local m = gameplay_missions_missions.getMissionById(mId)
            league.missions[i] = M.formatMission(m)
            if league.isCertification then
@/lua/ge/extensions/gameplay/markerInteraction.lua
    if m.missionId then
      table.insert(dataToSend, M.formatMission(gameplay_missions_missions.getMissionById(m.missionId)))
    end
@/lua/ge/extensions/gameplay/missions/missionScreen.lua
    if m.missionId then
      table.insert(dataToSend, M.formatMission(gameplay_missions_missions.getMissionById(m.missionId)))
    end
  for _, m in ipairs(gameplay_missions_missions.get()) do
    --table.insert(dataToSend, M.formatMission(gameplay_missions_missions.getMissionById(m.id)))
  end
    context = 'ongoingMission',
    missions = {M.formatMission(activeMission)},
    preselectedMissionId = gameplay_missions_missionManager.getForegroundMissionId(),
      for _, id in ipairs(openMenuWithCustomMissionList) do
        table.insert(missions, M.formatMission(gameplay_missions_missions.getMissionById(id)))
      end