GE Lua Documentation

Press F to search!

setupPaints

Definition


-- @/lua/ge/extensions/core/vehiclePaints.lua:209

local function setupPaints(model, configs)
  debugModelKey = model.key
  debugConfigKey = nil
  --debugLog = model.key == 'simple_traffic' and debugLogFun or nop
  debugLog("setupPaints for model " .. dumps(model.key))

  local paintIdsToPaintNames = {}
  local multiPaintIdsToMultiPaintSetups = {}


  -- create paint list if it doesn't exist
  model.paints = model.paints or {}
  debugLog("Model has " .. #tableKeys(model.paints) .. " explicit paints: " .. table.concat(tableKeysSorted(model.paints), ", "))

  -- add names to old paint format
  for name, paint in pairs(model.paints) do
    paint.name = name
  end

  -- convert paint names from library to actual paint data
  for _, paint in pairs(model.libraryPaints or {}) do
    if type(paint) == 'string' then paint = {id = paint} end
    local paintFromLibrary = getPaintById(paint.id)
    if paintFromLibrary then
      debugLog("adding paint from model.libraryPaints to model: " .. dumps(paintFromLibrary.id) .. "/" .. dumps(paintFromLibrary.name) .. " (from library) ")
      tableMerge(paintFromLibrary, paint)
      model.paints[paintFromLibrary.name] = paintFromLibrary
      paintIdsToPaintNames[paintFromLibrary.id] = paintFromLibrary.name
    else
      log('E', 'vehicles', "paint " .. dumps(paint.id) .. " not found in any paint library for model " .. dumps(key))
    end
  end
  model.libraryPaints = nil

  -- convert paint collections to actual paint data
  for _, collectionId in pairs(model.paintCollections or {}) do
    local collection = getPaintCollectionById(collectionId)
    if collection then
      for _, paint in pairs(collection) do
        debugLog("adding paint from model.paintCollections to model: " .. dumps(paint.id) .. "/" .. dumps(paint.name) .. " (from collection " .. dumps(collectionId) .. ")")
        tableMerge(paint, paintsByIdCache[paint.id])
        model.paints[paint.name] = paint
        paintIdsToPaintNames[paint.id] = paint.name
      end
    else
      log('E', 'vehicles', "paint collection " .. dumps(collectionId) .. " not found for model " .. dumps(key))
    end
  end
  model.paintCollections = nil

  -- process multiPaintSetups
  local multiPaintSetupsToProcess = model.multiPaintSetups or {}
  model.multiPaintSetups = {}
  local multiPaintSetupsByIdOrName = {}
  -- process all the setups already in the model
  for _, multiPaintSetup in pairs(multiPaintSetupsToProcess) do
    local multiPaintSetupWithNames = resolveMultiPaintSetupHelper(model, multiPaintSetup, paintIdsToPaintNames, multiPaintSetupsByIdOrName)
    if multiPaintSetupWithNames then
      if not multiPaintSetupWithNames.id then
        multiPaintSetupWithNames.id = multiPaintSetup.name
      end
      if multiPaintSetupWithNames.id then
        multiPaintSetupsByIdOrName[multiPaintSetupWithNames.id] = multiPaintSetupWithNames
      end
      multiPaintSetupWithNames.forAllConfigs = true
    end
  end
  table.clear(multiPaintSetupsToProcess)

  -- add a setup for the default paints of the model
  local defaultMultiPaintSetup = model.defaultMultiPaintSetup
  if not defaultMultiPaintSetup then
    debugLog("no defaultMultiPaintSetup found for model " .. dumps(model.key)..". Using defaultPaintName1, defaultPaintName2, defaultPaintName3: " .. dumps(model.defaultPaintName1) .. ", " .. dumps(model.defaultPaintName2) .. ", " .. dumps(model.defaultPaintName3))
    defaultMultiPaintSetup = {
      name = model.Name .. " default paints",
      paint1 = model.defaultPaintName1,
      paint2 = model.defaultPaintName2 or model.defaultPaintName1,
      paint3 = model.defaultPaintName3 or model.defaultPaintName1,
    }
  end
  local defaultMultiPaintSetupWithNames = resolveMultiPaintSetupHelper(model, defaultMultiPaintSetup, paintIdsToPaintNames, multiPaintSetupsByIdOrName)
  if defaultMultiPaintSetupWithNames then
    if not model.defaultMultiPaintSetup then
      defaultMultiPaintSetupWithNames.name = model.Name .. " default paints"
    end
    defaultMultiPaintSetupWithNames.defaultForModel = true

    model.defaultPaintName1 = defaultMultiPaintSetupWithNames.paintName1
    model.defaultPaintName2 = defaultMultiPaintSetupWithNames.paintName2
    model.defaultPaintName3 = defaultMultiPaintSetupWithNames.paintName3

    local paint1 = model.paints[model.defaultPaintName1]
    model.defaultPaint = paint1 or {}
  end

  -- process configs
  for _, config in pairs(configs) do
    debugConfigKey = config.key
    if config.defaultPaintName1 and config.defaultMultiPaintSetup then
      log("W","", model.key .. " " .. dumps(config.key) .. ": defaultPaintName1 overriden by defaultMultiPaintSetup")
    end
    -- add a setup for the default paints of the config
    local defaultMultiPaintSetup = config.defaultMultiPaintSetup
    if not defaultMultiPaintSetup then
      for i = 1, 3 do
        local defaultPaintKey = "defaultPaintName" .. i
        if config[defaultPaintKey] == nil or config[defaultPaintKey] == "" then
          config[defaultPaintKey] = i == 1 and model.defaultPaintName1 or config.defaultPaintName1
        end
      end
      defaultMultiPaintSetup = {
        name = config.Name .. " default paints",
        paint1 = config.defaultPaintName1,
        paint2 = config.defaultPaintName2,
        paint3 = config.defaultPaintName3,
      }
      debugLog("no defaultMultiPaintSetup found for config " .. dumps(config.key)..". Using defaultPaintName1, defaultPaintName2, defaultPaintName3: " .. dumps(defaultMultiPaintSetup.paint1) .. ", " .. dumps(defaultMultiPaintSetup.paint2) .. ", " .. dumps(defaultMultiPaintSetup.paint3))
    end
    local defaultMultiPaintSetupWithNames = resolveMultiPaintSetupHelper(model, defaultMultiPaintSetup, paintIdsToPaintNames, multiPaintSetupsByIdOrName)
    if defaultMultiPaintSetupWithNames then
      if not config.defaultMultiPaintSetup then
        defaultMultiPaintSetupWithNames.name = config.Name .. " default paints"
      end
      defaultMultiPaintSetupWithNames.isDefaultForConfigByKey[config.key] = true
      defaultMultiPaintSetupWithNames.usedByConfigByKey[config.key] = true


      config.defaultPaintName1 = defaultMultiPaintSetupWithNames.paintName1
      config.defaultPaintName2 = defaultMultiPaintSetupWithNames.paintName2
      config.defaultPaintName3 = defaultMultiPaintSetupWithNames.paintName3

      config.defaultPaint = model.paints[config.defaultPaintName1] or {}
    end
  end

  -- validate paints and set up factory and custom paints lists
  for _, paint in pairs(model.paints) do
    if not paint.class then
      paint.class = 'factory'
    end
  end

  debugLog("Finished: Model has " .. #tableKeys(model.paints) .. " paints: " .. table.concat(tableKeysSorted(model.paints), ", "))




  --[[
  model.factoryPaintNames = {}
  model.customPaintNames = {}
  for _, paint in pairs(model.paints) do
    if paint.class == 'factory' then
      table.insert(model.factoryPaintNames, paint.name)
    elseif paint.class == 'custom' then
      table.insert(model.customPaintNames, paint.name)
    end
  end
  if model.key == 'pickup' then
    log("I", "vehicles", "model " .. dumps(key) .. "Factory paints: " .. table.concat(model.factoryPaintNames, ", "))
    log("I", "vehicles", "model " .. dumps(key) .. "Custom paints: " .. table.concat(model.customPaintNames, ", "))
  end
  ]]
end

Callers

@/lua/ge/extensions/core/vehicles.lua

  extensions.core_vehiclePaints.setupPaints(model, cache[key].configs)