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)