GE Lua Documentation

Press F to search!

setNewParts

Definition


-- @/lua/ge/extensions/core/vehicle/partmgmt.lua:886

-- Merge old part highlights with new vehicle parts
-- When new part added, its visiblity is set to the parent part visiblity,
-- as well as its children to prevent weirdness
-- If inVehID is nil, it uses player vehicle
local function setNewParts(inVehID)
  local vehObj, vehData, vehID, partsData = getVehData(inVehID)
  if not vehObj then return end

  local partsFlattened = {}
  local newHighlightedParts = {}
  local oldPartsHighlighted = partsData.partsHighlighted

  local function recHighlightNode(node, parentHighlight)
    local highlight = nil
    if node.partPath then
      partsFlattened[node.partPath] = true
      if oldPartsHighlighted then
        if oldPartsHighlighted[node.partPath] ~= nil then
          -- Existing part uses old highlight
          highlight = oldPartsHighlighted[node.partPath]
        else
          -- New part uses parent part highlight
          highlight = parentHighlight
        end
      else
        highlight = parentHighlight
      end
      newHighlightedParts[node.partPath] = highlight
    end
    if node.children then
      for _, childNode in pairs(node.children) do
        recHighlightNode(childNode, highlight)
      end
    end
  end

  recHighlightNode(vehData.config.partsTree or {}, true)

  local partsSorted = tableKeysSorted(partsFlattened)
  partsData.partsHighlighted = newHighlightedParts
  partsData.partsSorted = partsSorted

  table.clear(partsData.partsHighlightedIdxs)
  table.clear(partsData.partNameToIdx)

  for k, partName in ipairs(partsSorted) do
    if newHighlightedParts[partName] then
      table.insert(partsData.partsHighlightedIdxs, k)
    end
    partsData.partNameToIdx[partName] = k
  end
end

Callers

@/lua/ge/extensions/freeroam/freeroam.lua
  extensions.core_vehicle_partmgmt.resetVehicleHighlights(true, vehID)
  extensions.core_vehicle_partmgmt.setNewParts(vehID)
  extensions.core_vehicle_partmgmt.showHighlightedParts(vehID)