getModel
Definition
-- @/lua/ge/extensions/core/vehicles.lua:763
-- get all info to one model
local function getModel(key)
if type(key) ~= 'string' then return {} end
local modelsData = getModelsData()[key]
if not modelsData then
log('E', '', 'Vehicle not available: ' .. dumps(key))
return {}
end
if cache[key] then
return cache[key]
end
local infoFilename = "/vehicles/"..key.."/info.json"
local data = getFilesParsed()[infoFilename]
if data then
local mod = extensions.core_modmanager.getModFromPath(infoFilename, true)
local source = infoFilename
if mod then
if mod.modData and mod.modData.title then
source = infoFilename .. " (from Mod: " .. mod.modData.title .. ")"
else
source = infoFilename .. " (from Mod: " .. mod.modname .. ")"
end
end
data = sanitizeInfoFile(data, source)
end
if data and (data.colors or data.default_color or data.default_color_2 or data.default_color_3) then
convertVehicleInfo(data, infoFilename)
end
local fixedVehicle = false
if data == nil then
data = _parseVehicleNameBackwardCompatibility(key)
fixedVehicle = true
end
-- sanitize colors
if data then
local validatedPaints = {}
for name, data in pairs(data.paints or {}) do
if type(data) ~= 'table' then
log("E","","Invalid paint setup in "..dumps(infoFilename)..". Paint "..dumps(name).." is not a valid paint: "..dumps(data))
validatedPaints[name] = createVehiclePaint({x = 1, y = 1, z = 1, w = 1})
else
validatedPaints[name] = data
end
end
data.paints = validatedPaints
end
-- Patch up old vehicles for new System
local missingInfoConfigs = nil
if data.configs then
missingInfoConfigs = data.configs
for mConfigName, mConfig in pairs(missingInfoConfigs) do
mConfig.is_default_config = false
if not data.default_pc then
data.default_pc = mConfigName
mConfig.is_default_config = true
end
mConfig.aggregates = {}
mConfig.Configuration = mConfigName
mConfig.Name = data.Name .. ' ' .. mConfigName
mConfig.key = mConfigName
mConfig.model_key = key
mConfig.preview = _imageExistsDefault('/vehicles/' .. key .. '/' .. mConfigName .. '.png', '/vehicles/' .. key .. '/' .. mConfigName .. '.jpg')
end
data.configs = nil
end
local model = {}
if data then
model = deepcopy(data)
if not data.Type then
model.Type = "Unknown"
--log('E', 'vehicles', "model" .. dumps(model) .. "has type \"Unknown\"")
end
model.aggregates = {} -- values for filtering
end
-- get preview if it exists
model.preview = _imageExistsDefault('/vehicles/' .. key .. '/default.png', '/vehicles/' .. key .. '/default.jpg')
--model.infoFilename = infoFilename
--model.pcFilename = ''
model.logo = _imageExistsDefault('/vehicles/' .. key .. '/logo.png', '/vehicles/' .. key .. '/logo.jpg')
model.key = key -- redundant but makes life easy
-- figure out the mod this belongs to
--model.mod, model.modFingerprint = extensions.core_modmanager.getModFromPath(infoFilename, true) -- TODO: FIXME: SUPER SLOW
cache[key] = {}
cache[key].model = model
cache[key].configs = missingInfoConfigs or _modelConfigsHelper(key, model, ignoreCache)
if cache[key].configs and tableSize(cache[key].configs) < 1 then
cache[key].configs[key] = deepcopy(model)
if cache[key].configs[key].model_key == nil then
cache[key].configs[key].model_key = cache[key].configs[key].key
cache[key].configs[key].infoFilename = infoFilename
end
if cache[key].model.default_pc == nil then
cache[key].model.default_pc = key
end
end
model.missingJbeamFiles = modelsData.missingJbeamFiles
extensions.core_vehiclePaints.setupPaints(model, cache[key].configs)
if data then
data.Source = getSourceAttr(infoFilename)
if fixedVehicle then
data.Source = 'Mod'
end
_fillAggregates(data, model.aggregates)
end
-- all configs should have the same aggregates as the base model
-- the model should have all aggregates of the configs
local aggHelper = {}
for _, config in pairs(cache[key].configs) do
_mergeAggregates(config.aggregates, aggHelper)
-- I remember removing this in rev 40591 but i cannot tell why that was. The only difference now is that the merge function is "fixed" and never should overwrite values
_mergeAggregates(cache[key].model.aggregates, config.aggregates)
end
_mergeAggregates(aggHelper, cache[key].model.aggregates)
return cache[key]
end
Callers
@/lua/ge/extensions/ui/vehicleSelector/general.lua
local function vehiclePassesFilters(itemData, validFilters, searchText)
local model = core_vehicles.getModel(itemData.model).model
local config = core_vehicles.getConfig(itemData.model, itemData.config)
for modelName, _ in pairs(core_vehicles.getModelsData()) do
table.insert(modelList, core_vehicles.getModel(modelName).model)
table.insert(modelAndConfigList, core_vehicles.getModel(modelName).model)
table.insert(modelList, core_vehicles.getModel(modelName).model)
table.insert(modelAndConfigList, core_vehicles.getModel(modelName).model)
for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
table.insert(modelAndConfigList, core_vehicles.getModel(modelName).model)
for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
table.insert(configList, config)
end
local model = core_vehicles.getModel(info.model)
if not model or not model.model then return nil end
if modelKey then
local model = core_vehicles.getModel(modelKey)
if model then
@/lua/ge/extensions/core/vehicle/manager.lua
local data = core_vehicles.getModel(vehicle.jbeam)
if not data.model.paints then return end
@/lua/ge/extensions/freeroam/dragRace.lua
for i,v in pairs(configs.configs) do
local model = core_vehicles.getModel(v.model_key).model
if model.Type == "Truck" or model.Type == "Car" then
-- append Brand and Country for UI
local randomVehicleModel = core_vehicles.getModel(randomVehicle.model_key).model
randomVehicle.Brand = randomVehicleModel.Brand
@/lua/ge/extensions/campaign/exploration.lua
-- log('I', logTag, 'Buying vehicle.... ')
local modelData = core_vehicles.getModel(vehicleData.model)
core_inventory.addItem("$$$_VEHICLES", vehicleData)
@/lua/ge/extensions/editor/util/vehicleSelectUtil.lua
self.model = model
local modelData = core_vehicles.getModel(self.model)
if modelData and modelData.model then
self.config = config
local modelData = core_vehicles.getModel(self.model)
if modelData and modelData.model then
if self.enableConfigs and self.model and not self.configs then -- refresh configs list, using the current model
local modelData = core_vehicles.getModel(self.model)
if modelData and modelData.model then
if self.enablePaints and self.model and not self.paints then -- refreshes paints list, using the current model
local modelData = core_vehicles.getModel(self.model)
if modelData and modelData.model then
if self.configs then
local modelData = core_vehicles.getModel(self.model)
local modelConfigs = modelData and modelData.configs or {}
@/lua/ge/extensions/gameplay/traffic/vehicle.lua
local modelData = core_vehicles.getModel(obj.jbeam).model
local modelType = modelData and string.lower(modelData.Type) or 'none'
local obj = getObjectByID(self.id)
local modelData = core_vehicles.getModel(obj.jbeam).model
local _, configKey = path.splitWithoutExt(obj.partConfig)
local _, configKey = path.splitWithoutExt(obj.partConfig)
local configData = core_vehicles.getModel(obj.jbeam).configs[configKey]
@/lua/ge/extensions/gameplay/missions/missionManager.lua
local paintData = core_vehicles.getModel(model).model.paints
local paint = vehicleInstance.paintName and paintData[vehicleInstance.paintName]
@/lua/ge/extensions/editor/multiSpawnManager.lua
local modelData = core_vehicles.getModel(model)
if modelData and next(modelData) then
local modelName, configName
local model = core_vehicles.getModel(v.model).model
if model.Name then
end
local config = v.config and core_vehicles.getModel(v.model).configs[v.config]
configName = config and config.Configuration or ""
@/lua/ge/extensions/flowgraph/nodes/gameplay/race/raceHighscoresComplete.lua
local vData = core_vehicle_manager.getVehicleData(self.pinIn.vehId.value)
local mData = core_vehicles.getModel(veh.jbeam)
local config = {Name = "Custom Config"}
@/ui/modules/quickrace/quickrace.js
return
var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
popoverCounter++
return
var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
popoverCounter++
@/lua/ge/extensions/core/devices.lua
else
local modelData = core_vehicles.getModel(veh.jbeam)
local vehType = modelData and modelData.model and modelData.model.Type
@/lua/ge/extensions/ui/vehicleSelector/tiles.lua
local function configToTile(config, fullName)
local model = core_vehicles.getModel(config.model_key).model
local sources = M.getSources(config, model, true) or {}
-- VEHICLE-SPECIFIC: Get vehicle model data
local model = core_vehicles.getModel(modelKey)
extensions.hook("onVehicleSelectorGetTiles", "configsForBrandSubModelOrModel", modelKey, modelSubKey, brandKey, groupMode, groupName)
@/ui/modules/vehicleselect/vehicleselect.js
} else {
bngApi.engineLua('core_vehicles.getModel("' + $stateParams.model + '")', function (response) {
if(response === undefined) {
@/lua/ge/extensions/editor/util/vehicleFilterUtil.lua
-- Get model to access paints
local model = core_vehicles.getModel(modelKey)
modelsMap[modelKey] = {
for modelName, _ in pairs(core_vehicles.getModelsData()) do
table.insert(modelList, core_vehicles.getModel(modelName).model)
for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
table.insert(modelList, core_vehicles.getModel(modelName).model)
for _, config in pairs(core_vehicles.getModel(modelName).configs or {}) do
table.insert(configList, config)
for modelName, _ in pairs(core_vehicles.getModelsData()) do
local model = core_vehicles.getModel(modelName)
if model and model.model then
if selectedModel and selectedModel ~= "" then
local model = core_vehicles.getModel(selectedModel)
if model and model.configs then
@/lua/ge/extensions/ui/vehicleSelector/vehicleOperations.lua
if additionalData then
local model = core_vehicles.getModel(modelKey)
if model then
if additionalData then
local model = core_vehicles.getModel(modelKey)
if model then
local vehicleNameSTR = {veh.JBeam}
local vehMainInfo = core_vehicles.getModel(vehKey)
local vehConfig = veh.partConfig
local vehMainInfo = core_vehicles.getModel(vehKey)
local randomConfig = validConfigs[math.random(1, #validConfigs)]
local model = core_vehicles.getModel(randomConfig.model_key)
@/lua/common/extensions/ui/flowgraph/editor.lua
if self.model and self.config and self.configs then
self.configs = core_vehicles.getModel(self.model).configs
-- non-indexed table has to be wrapped, to be able to iterate in sorted order later
if self.model and self.model ~= "" then
local modelData = core_vehicles.getModel(self.model)
if modelData and modelData.model then
if not onlyModel then
self.configs = core_vehicles.getModel(m.key).configs
-- non-indexed table has to be wrapped, to be able to iterate in sorted order later
for mIdx, m in ipairs(self.models) do
for cIdx, c in pairs(core_vehicles.getModel(m.key).configs) do
vehSearch:queryElement({
if self.model and self.model ~= "" then
local modelData = core_vehicles.getModel(self.model)
if modelData and modelData.model then
@/lua/ge/extensions/career/modules/vehicleClassGrouping.lua
if (modelType == "Car" or modelType == "Truck") and not checkFilter(modelFilter, model.key, invertedFilters.modelFilter) then
for _, config in pairs(core_vehicles.getModel(model.key).configs) do
local modelConfigKey = string.format("%s/%s", model.key, config.key)
@/lua/ge/ge_utils.lua
for _, veh in ipairs(getAllVehicles()) do
local model = core_vehicles.getModel(veh.jbeam).model
if arrayFindValueIndex(typeList, model.Type) then
local modelData = core_vehicles.getModel(model).model
local modelDataPaints = modelData and modelData.paints or {}
local _, configKey = path.splitWithoutExt(config)
local configData = core_vehicles.getModel(model).configs[configKey or 0]
paintName = configData and configData.defaultPaintName1 or modelData.defaultPaintName1
function fillVehicleSpawnOptionDefaults(modelName, opt)
local model = core_vehicles.getModel(modelName)
@/lua/ge/extensions/flowgraph/nodes/gameplay/race/raceHighscoresLap.lua
local vData = core_vehicle_manager.getVehicleData(self.pinIn.vehId.value)
local mData = core_vehicles.getModel(veh.jbeam)
local config = {Name = "Custom Config"}
@/lua/ge/extensions/ui/vehicleSelector/tileClustering.lua
['brandSubModelOrModel'] = function(config)
local model = core_vehicles.getModel(config.model_key)
local brand = config.Brand or model.model.Brand
local _, config = next(clusteredItems.configsByKey)
local model = core_vehicles.getModel(config.model_key)
local preview = model.model.preview or model.model.preview or ("/vehicles/" .. model.model.key .. "/default.jpg")
local _, config = next(clusteredItems.configsByKey)
local model = core_vehicles.getModel(config.model_key)
local subModel = config.SubModel or model.model.SubModel
local _, config = next(clusteredItems.configsByKey)
local model = core_vehicles.getModel(config.model_key)
local brand = model.model.Brand
@/lua/ge/extensions/ui/vehicleSelector/tileGrouping.lua
if value == nil then
local model = core_vehicles.getModel(config.model_key)
if model and model.model then
@/lua/ge/extensions/career/modules/inventory.lua
vehicles[vehicleData.id] = vehicleData
if tableIsEmpty(core_vehicles.getModel(vehicleData.model)) or not FS:fileExists(vehicleData.config.partConfigFilename) then
vehicleData.missingFile = true
-- if the vehicle doesnt exist (deleted mod) then dont spawn
if tableIsEmpty(core_vehicles.getModel(carModelToLoad)) or not FS:fileExists(vehInfo.config.partConfigFilename) then
return
local function getDefaultVehicleThumb(vehInfo)
local model = core_vehicles.getModel(vehInfo.model)
if not model then return nil end
@/lua/ge/extensions/flowgraph/nodes/vehicle/customPartsConfigProvider.lua
if self.model then
self.configs = core_vehicles.getModel(self.model).configs
end
@/lua/ge/extensions/flowgraph/nodes/vehicle/spawnVehicle.lua
local allPaints = nil
local modelData = core_vehicles.getModel(self.pinIn.model.value)
local configData = core_vehicles.getConfig(model, configKey)
@/lua/ge/extensions/gameplay/missions/missionTypes/editorHelper.lua
local issues = {}
local model = core_vehicles.getModel(mtd[e.fieldNameModel])
if not model or not next(model) then
@/lua/ge/extensions/core/multiSpawn.lua
for _, config in pairs(core_vehicles.getModel(model.key).configs) do
local officialConfig = isOfficialSource(config)
local modelData = core_vehicles.getModel(options.model)
if modelData and next(modelData) then
for _, v in ipairs(group) do
local modelData = core_vehicles.getModel(v.model or '')
local configData = modelData.configs and modelData.configs[v.config or '']
@/lua/ge/extensions/core/vehiclePaints.lua
local function setupRandomPaintHelper(model_key)
local modelData = core_vehicles.getModel(model_key)
local model = modelData.model
local function getRandomPaints(model_key, config_key)
local modelData = core_vehicles.getModel(model_key)
local model = modelData.model
@/lua/ge/extensions/flowgraph/nodes/gameplay/dragRace/generateDragOpponents.lua
local function getAvailablePaints(modelKey)
local modelData = core_vehicles.getModel(modelKey)
if modelData and modelData.model and modelData.model.paints then
for i, v in pairs(configs.configs) do
local modelData = core_vehicles.getModel(v.model_key)
if modelData and modelData.model then
@/lua/ge/extensions/ui/vehicleSelector/detailsInteraction.lua
-- pre-fill additional data with the default paints
local model = core_vehicles.getModel(details.modelKey)
if model then
@/lua/ge/extensions/career/modules/loanerVehicles.lua
function(res)
local vehModel = core_vehicles.getModel(vehObj:getField('JBeam','0')).model
local spots = vehModel.Type == "Trailer" and fac.loanerTrailerSpots or fac.loanerNonTrailerSpots
@/lua/ge/extensions/ui/vehicleSelector/vehicleSpecifications.lua
local configKey = itemDetails.config
local modelDetails = core_vehicles.getModel(modelKey).model
local configDetails = core_vehicles.getConfig(modelKey, configKey) or {}
@/lua/ge/extensions/freeroam/freeroamConfigurator.lua
if configuration.vehicle.additionalData then
local model = core_vehicles.getModel(configuration.vehicle.model)
if model then
@/ui/modules/lightrunner/lightrunner.js
if (!$scope.selections.vehicle.file) {
bngApi.engineLua('core_vehicles.getModel("sbr")', function (res) {
LightRunnerService.setVehicle({
return
var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
popoverCounter++
return
var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
popoverCounter++
@/lua/ge/extensions/gameplay/missions/missionTypes/flowMission.lua
for i, v in ipairs(setupModule.vehicles) do
local model = core_vehicles.getModel(v.model or "").model
if model then
local config = v.config and core_vehicles.getModel(v.model).configs[v.config]
local thumb = nil
end
local model = core_vehicles.getModel(viaSetting.value.model or "").model
if model then
local config = viaSetting.value.config and core_vehicles.getModel(viaSetting.value.model).configs[viaSetting.value.config]
local thumb = nil
@/lua/ge/extensions/tech/techCore.lua
if not core_vehicles.getModel(model).model then
request:sendBNGError('Model not found: ' .. tostring(model))
@/lua/ge/extensions/core/trailerRespawn.lua
local veh = getObjectByID(objId)
local vehModel = core_vehicles.getModel(veh:getField('JBeam','0')).model
return vehModel.Type
@/lua/ge/extensions/gameplay/drag/dragBridge.lua
if config["Drag Times"] and config["Drag Times"].time_1_4 and config["Drag Times"].time_1_4 >= minTime and config["Drag Times"].time_1_4 < maxTime then
local model = core_vehicles.getModel(config.model_key).model
if checkVehiclePermission(model, vehiclePermissionRules) and not string.match(config.key, 'simple_traffic') then
local selectedConfig = eligibleVehicles[math.random(eligibleCount)]
local paints = tableKeys(tableValuesAsLookupDict(core_vehicles.getModel(selectedConfig.model_key).model.paints or {}))
local paintCount = #paints
@/ui/modules/busRoute/busRoute.js
return
var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
popoverCounter++
return
var luaCmd = "core_vehicles.getModel('" + $scope.highscores[index].vehicleModel + "')"
popoverCounter++
if ($scope.selected.userSelectedVehicle) {
bngApi.engineLua(`core_vehicles.getModel(${bngApi.serializeToLua($scope.selected.userSelectedVehicle.model)})`, function(data) {
var carObj = data
}
// bngApi.engineLua('core_vehicles.getModel()', function(data) {
// var carObj = data
@/lua/ge/extensions/editor/gen/exp_meshexplorer.lua
]]
local model = core_vehicles.getModel(config.model_key).model
-- if _ == 1 then dump(config, '?? for_MODEL:'..tostring(config.model_key)) end
for modelName, _ in pairs(core_vehicles.getModelsData()) do
lo('?? for_model:'..modelName..':'..tostring(core_vehicles.getModel(modelName).model))
end
amodel[#amodel+1] = modelName
-- lo('?? for_model:'..modelName..':'..tostring(core_vehicles.getModel(modelName).model))
end
-- amodel[#amodel+1] = modelName
-- lo('?? for_model:'..modelName..':'..tostring(core_vehicles.getModel(modelName).model))
-- end
@/lua/ge/extensions/career/modules/delivery/cargoScreen.lua
local function getVehicleThumb(vehicle)
local model = core_vehicles.getModel(vehicle.model)
if not model or not model.configs or not vehicle.config then return nil end
@/lua/ge/extensions/core/levels.lua
local model, options = unpack(nextSpawnVehicle)
local modelData = core_vehicles.getModel(model)
if not modelData or not next(modelData) then
@/lua/ge/extensions/core/vehicles.lua
local model = res.key and getModel(res.key) or {}
local config = {}
for modelName, _ in pairs(getModelsData()) do
local model = getModel(modelName)
if array then
for modelName, _ in pairs(getModelsData()) do
local model = getModel(modelName)
-- dump(model.configs)
local function getConfig(modelName, configKey)
local model = getModel(modelName)
if not model.configs then return end
if p then p:add("model begin") end
local model = getModel(modelName)
if p then p:add("model get") end
for i,m in pairs(models) do
local vehicle = getModel(m.key)
if vehicle ~= nil then
local function prepareConfigData(modelName, opts)
local model = core_vehicles.getModel(modelName)
log('D', 'main', "Loading the default vehicle " .. modelName)
local model = M.getModel(modelName)
local model, _ = string.match(arg, modelRegexPC)
local modelData = M.getModel(model)
if modelData and next(modelData) then
--TorqueScriptLua.setVar( '$beamngVehicleColor', mycolor )
local myvehModel = M.getModel(myveh)
if myvehModel and next(myvehModel) then
@/lua/ge/extensions/editor/util/editorElementHelper.lua
local issues = {}
local model = core_vehicles.getModel(ctd[e.fieldNameModel])
if not model or not next(model) then
@/lua/ge/extensions/core/quickAccess.lua
local vehKey = veh.JBeam
local vehMainInfo = core_vehicles.getModel(vehKey)
local vehicleNameSTR = {veh.JBeam}
local vehMainInfo = core_vehicles.getModel(vehKey)
@/lua/ge/extensions/util/screenshotCreator.lua
for _, modelName in pairs(listOfSelectedModels) do
for _, configData in pairs(core_vehicles.getModel(modelName).configs) do
if forceQuit then
local isCurrent
for _, configData in pairs(core_vehicles.getModel(currModelName).configs) do
isCurrent = configData.key == currConfigName
@/lua/ge/extensions/ui/apps/minimap/vehicles.lua
end
local model = core_vehicles.getModel(otherVeh.jbeam)
if model and model.model and model.model.Type and ignoredTypes[model.model.Type] then
@/lua/ge/extensions/editor/trafficManager.lua
local isVehicle = false
local modelData = core_vehicles.getModel(obj.jbeam)
if modelData and next(modelData) and modelData.model.Type then
vehData.config = veh.partConfig
vehData.vehType = core_vehicles.getModel(vehData.model).model.Type
vehData.home = vehData.home or {pos = veh:getPosition(), rot = quatFromDir(veh:getDirectionVector(), veh:getDirectionVectorUp())} -- reset transform
for _, model in ipairs(modelKeys) do
if string.find(model, "signs") and core_vehicles.getModel(model).model.Type == "Prop" then
table.insert(signSelector.models, model)
if signSelector.model and signSelector.config then
local modelData = core_vehicles.getModel(signSelector.model)
if modelData then
for _, m in ipairs(signSelector.models) do
for _, c in ipairs(tableKeysSorted(core_vehicles.getModel(signSelector.model).configs)) do
label = core_vehicles.getModel(m).configs[c].Configuration.." ["..c.."]"
for _, c in ipairs(tableKeysSorted(core_vehicles.getModel(signSelector.model).configs)) do
label = core_vehicles.getModel(m).configs[c].Configuration.." ["..c.."]"
if im.Selectable1(label.."##trafficManagerSignConfig", signSelector.model == m and signSelector.config == c) then
local obj = getObjectByID(id)
local modelData = core_vehicles.getModel(obj.jbeam)
if modelData then
@/lua/ge/extensions/core/funstuff.lua
if not veh then return end
local modelInfo = core_vehicles.getModel(veh.JBeam)
if not modelInfo then return end