VE Lua Documentation

Press F to search!

tableFromHeaderTable

Definition


-- @/lua/vehicle/ve_utils.lua:36

function tableFromHeaderTable(entry)
  if #entry == 0 then
    return {}
  end
  --local function processTableWithSchema(vehicle, keyEntry, entry, newList)
  -- its a list, so a table for us. Verify that the first row is the header
  local header = entry[1]

  if type(header) ~= "table" then
    log("W", "tableFromHeaderTable", "*** Invalid table header: " .. dumpsz(entry, 2) .. " - " .. debug.tracesimple())

    return false
  end

  local headerSize = #header
  local localOptions = {}
  local output = {}
  local outputidx = 1

  -- walk the list entries
  for i = 2, #entry do
    local rowValue = entry[i]

    if type(rowValue) ~= "table" then
      log("W", "tableFromHeaderTable", "*** Invalid table row: " .. dumps(rowValue))
      return false
    end
    if tableIsDict(rowValue) then
      -- case where options is a dict on its own, filling a whole line
      localOptions = tableMerge(localOptions, deepcopy(rowValue))
    else
      -- allow last type to be the options always
      if #rowValue > headerSize + 1 then -- and type(rowValue[#rowValue]) ~= "table" then
        log("W", "tableFromHeaderTable", "*** Invalid table header, must be as long as all table cells (plus one additional options column):")
        log("W", "tableFromHeaderTable", "*** Table header: " .. dumps(header))
        log("W", "tableFromHeaderTable", "*** Mismatched row: " .. dumps(rowValue))
        return false
      end

      local newRow
      if next(localOptions) == nil then
        newRow = {}
      else
        newRow = deepcopy(localOptions)
      end

      local rvcc = 0
      for rk, rv in pairs(rowValue) do
        --log('D', "jbeam.processTableWithSchema", "### "..header[rk].."//"..tostring(newRow[header[rk]]))
        if header[rk] ~= nil then
          newRow[header[rk]] = rv
        end
        -- check if inline options are provided, merge them then
        if rvcc >= headerSize and type(rv) == "table" and tableIsDict(rv) and #rowValue > headerSize then
          tableMerge(newRow, rv)
          break
        end
        rvcc = rvcc + 1
      end

      if newRow.id ~= nil then
        newRow.name = newRow.id -- this keeps the name for debugging or alike
        newRow.id = nil
      end

      output[outputidx] = newRow
      outputidx = outputidx + 1
    end
  end
  return output
end

Callers

@/lua/vehicle/controller/drivingDynamics/supervisors/components/motorTorqueControl.lua
    --TODO we should make sure there's at least dummy data for all existing wheelGroups, even if not configured in jbeam to avoid expensive runtime checks
    local wheelGroupSettings = tableFromHeaderTable(jbeamData.tractionControl.wheelGroupSettings or {})
    if wheelGroupSettings then
    if jbeamData.yawControl.PIDSettings then
      jbeamPIDSettings = tableFromHeaderTable(jbeamData.yawControl.PIDSettings)
    else
@/lua/vehicle/controller/drivingDynamics/actuators/adaptiveDampers.lua

  local modeData = tableFromHeaderTable(jbeamData.modes or {})
@/lua/vehicle/powertrain/combustionEngine.lua

  local baseTorqueTable = tableFromHeaderTable(jbeamData.torque)
  local rawBasePoints = {}
  if jbeamData.torqueModMult then
    local multTorqueTable = tableFromHeaderTable(jbeamData.torqueModMult)
    local rawTorqueMultPoints = {}
  if jbeamData.torqueModIntake then
    local intakeTorqueTable = tableFromHeaderTable(jbeamData.torqueModIntake)
    local rawIntakePoints = {}
  if jbeamData.torqueModExhaust then
    local exhaustTorqueTable = tableFromHeaderTable(jbeamData.torqueModExhaust)
    local rawExhaustPoints = {}
  if jbeamData.torqueCompressionBrake then
    local compressionBrakeTorqueTable = tableFromHeaderTable(jbeamData.torqueCompressionBrake)
    local rawPoints = {}
@/lua/vehicle/controller/esc.lua
  if escConfigs.throttleFactorAssingment then
    throttleFactorAssingment = tableFromHeaderTable(escConfigs.throttleFactorAssingment)
  else
@/lua/vehicle/controller/tech/screens.lua
  end
  local screens = tableFromHeaderTable(jbeamData.screenDefinitions)
@/lua/vehicle/controller/drivingDynamics/supervisors/components/brakeControl.lua
    controlParameters.tractionControl.wheelBrakingPID = {}
    local wheelGroupSettings = tableFromHeaderTable(jbeamData.tractionControl.wheelGroupSettings or {})
    local wheelGroupSettingsLookup = {}

    local jbeamPIDSettings = tableFromHeaderTable(jbeamData.yawControl.PIDSettings or {})
    controlParameters.absControl.wheelSettings = {}
    local wheelSettings = tableFromHeaderTable(jbeamData.absControl.wheelSettings or {})
    for _, wheelSetting in pairs(wheelSettings) do
@/lua/vehicle/controller/propAnimation/hPattern.lua
local function init(jbeamData)
  local gearCoordinateTable = tableFromHeaderTable(jbeamData.gearCoordinates or {})
  gearCoordinates = {}
@/lua/vehicle/controller/gauges/genericGauges.lua
  local mergedConfig = {}
  for _, v in pairs(tableFromHeaderTable(config)) do
    mergedConfig[v.deviceName] = mergedConfig[v.deviceName] or {}
  local mergedConfig = {}
  for _, v in pairs(tableFromHeaderTable(config)) do
    mergedConfig[v.moduleName] = mergedConfig[v.moduleName] or {}
@/lua/vehicle/electrics.lua
  --convert data into a usable table
  jbeamSmootherSettings = tableFromHeaderTable(jbeamSmootherSettings)
  local jbeamCustomValues = jbeamData.customValues or {}
  jbeamCustomValues = tableFromHeaderTable(jbeamCustomValues)
  --merge default and jbeam data for final settings
@/lua/vehicle/controller/pneumatics/airbrakes.lua

  local torqueTable = tableFromHeaderTable(jbeamData.brakeTorque)
  local rawPoints = {}
  -- reuse vars for spring brake torque table
  torqueTable = tableFromHeaderTable(jbeamData.springBrakeTorque)
  rawPoints = {}
@/lua/vehicle/controller/tirePressureControl.lua
    activeGroupPressureElectricsName = jbeamData.activeGroupPressureElectricsName or (M.name .. "_activeGroupPressure")
    local wheelGroupData = tableFromHeaderTable(jbeamData.wheelGroups or {})
    for _, wheelGroup in pairs(wheelGroupData) do
@/lua/vehicle/powertrain/electricMotor.lua
  end
  local torqueTable = tableFromHeaderTable(jbeamData.torque)
  local points = {}
  if jbeamData.regenTorqueCurve then
    local regenTorqueTable = tableFromHeaderTable(jbeamData.regenTorqueCurve)
    points = {}
@/lua/vehicle/controller/lightbar.lua
  -- Process mode configurations from jbeam data
  modes = tableFromHeaderTable(jbeamData.modes)
  for _, vm in pairs(modes) do
    -- Convert mode config into usable format
    local configEntries = tableFromHeaderTable(deepcopy(vm.config))
    vm.config = nil
@/lua/vehicle/controller/advancedCouplerControl.lua
    openForceTimer = 0,
    openForceConditions = tableFromHeaderTable(jbeamData.openForceConditions or {}),
    attachUIMessage = jbeamData.attachUIMessage,

  local nodeData = tableFromHeaderTable(jbeamData.couplerNodes)
@/lua/vehicle/controller/controlModes.lua
local function init(jbeamData)
  controlModes = tableFromHeaderTable(jbeamData.modes)

  local config = tableFromHeaderTable(jbeamData.config)
  configurations = {}
@/lua/vehicle/controller/bypassDampers.lua

  local damperJbeamData = tableFromHeaderTable(jbeamData.dampers or {})
  for _, damperData in pairs(damperJbeamData) do

  local zoneJbeamData = tableFromHeaderTable(jbeamData.zones or {})
@/lua/vehicle/controller/propAnimation/dualAxisLever.lua
  targetModeQueue = dequeue.new()
  local modeCoordinateTable = tableFromHeaderTable(jbeamData.orderedModeCoordinates or {})
  modeCoordinates = {}
  --"impulse" mode like "M+" and "M-" need special treatment so that both their positions are just 1 away from the base
  local impulseModeCoordinateTable = tableFromHeaderTable(jbeamData.impulseModeCoordinates or {})
  for _, impulseMode in pairs(impulseModeCoordinateTable) do

  local modeChangesTable = tableFromHeaderTable(jbeamData.modeChanges or {})
  modeChanges = {}
@/lua/vehicle/powertrain/manualGearbox.lua

  local synchroSettings = tableFromHeaderTable(jbeamData.synchronizerSettings or {})
  local synchroSettingLookup = {}
@/lua/vehicle/controller/drivingDynamics/actuators/adaptiveTorsionBars.lua

  local modeData = tableFromHeaderTable(jbeamData.modes or {})
@/lua/vehicle/controller/pneumatics.lua
  if jbeamData.pressureLevels then
    for _, v in pairs(tableFromHeaderTable(jbeamData.pressureLevels)) do
      pressureLevels[v.name] = v.pressure
@/lua/vehicle/controller/driveModes.lua
    local defaults = jbeamData.defaultSettings
    local defaultSettingData = tableFromHeaderTable(defaults)
    for _, v in pairs(defaultSettingData) do

    local modeSettings = tableFromHeaderTable(mode.settings or {})
    if modeSettings then
@/lua/vehicle/controller/propAnimation/singleAxisLever.lua
local function init(jbeamData)
  local gearCoordinateTable = tableFromHeaderTable(jbeamData.gearCoordinates or {})
  gearCoordinates = {}