VE Lua Documentation

Press F to search!

compileCustomValueUpdates

Definition


-- @/lua/vehicle/electricsCustomValueParser.lua:159

local function compileCustomValueUpdates(customValueData)
  buildBaseEnv()
  --print("base env")
  --dump(customElectricsEnv)

  --print("customValueData")
  --dump(customValueData)

  customDefaultValues = {}

  local customValueUpdateStrings = {}
  for _, customValue in ipairs(customValueData) do
    local sanitizedExpression = sanitizeCustomExpression(customValue.electricsFunction)
    local parseResult = parse(sanitizedExpression)
    if parseResult then
      --only add to updates if there is a function (empty functions are still valid, but don't need updates here)
      if customValue.electricsFunction then
        table.insert(customValueUpdateStrings, customValue.electricsName)
        table.insert(customValueUpdateStrings, sanitizedExpression)
      end
      if customValue.electricsDefault then
        customDefaultValues[customValue.electricsName] = customValue.electricsDefault

        --init custom value in normal electrics
        electrics.values[customValue.electricsName] = customValue.electricsDefault
      else
        log("D", "electricsCustomValueParser.compileCustomValueUpdates", string.format("No default value for custom electrics value: %s", customValue.electricsName))
      end
    end
  end

  --print("customDefaultValues")
  --dump(customDefaultValues)

  --print("customValueUpdateStrings")
  --dump(customValueUpdateStrings)

  local customValueUpdates = {}
  for i = 1, #customValueUpdateStrings, 2 do
    --check length of code string and only add to updates if it's not empty (empty update strings are still valid, but don't need updates here)
    if #customValueUpdateStrings[i + 1] > 0 then
      table.insert(customValueUpdates, string.format("electrics.%s = %s", customValueUpdateStrings[i], customValueUpdateStrings[i + 1]))
    end
  end

  --print("customValueUpdates")
  --dump(customValueUpdates)

  local customValueUpdateString = "return function(dt) " .. table.concat(customValueUpdates, ";") .. " end"

  --print("customValueUpdateString")
  --dump(customValueUpdateString)
  local customValuesFunc, message = load(customValueUpdateString, nil, "t", customElectricsEnv)
  if customValuesFunc then
    updateCustomElectricsFunction = customValuesFunc()
  else
    --syntax error most likely
    log("E", "electricsCustomValueParser.compileCustomValueUpdates", "Compiling custom electrics values failed, message: " .. message)
    return nil
  end
end

Callers

@/lua/vehicle/electrics.lua

  customValueParser.compileCustomValueUpdates(customValues)