VE Lua Documentation

Press F to search!

updateWheelVelocities

Definition


-- @/lua/vehicle/wheels.lua:559

local function updateWheelVelocities(dt)
  updateVirtualAirspeedMethod(dt)

  local airspeed = absBehavior == "arcade" and electrics.values.airspeed or virtualAirspeed
  --local airspeed = controller.getController("CMU").virtualSensors.virtual.speed or 0
  local invAirspeed = 1 / (airspeed + 1e-30)
  local airspeedCutOffSpeed = 5
  local airspeedCutOff = airspeed > airspeedCutOffSpeed

  local parkingbrakeInput = input.parkingbrake or 0
  absActive = false

  brakeABSCoefLimitCache.left = 0
  brakeABSCoefLimitCache.right = 0

  local avgAV = 0
  local avgWheelSpeed = 0

  local wheels = M.wheels
  for i = 0, initialWheelCountDec do
    local wd = wheels[i]
    if not wd.isBroken then
      local brake = electrics.values[wd.brakeElectricsName] or 0
      wd.lastAngularVelocity = wd.angularVelocity
      wd.lastAngularVelocityBrakeCouple = wd.angularVelocityBrakeCouple
      local wav = wd.coreData
      local wheelAV = wav.angularVelocity
      wd.angularVelocity = wheelAV
      wd.angularVelocityBrakeCouple = wav.angularVelocityBrakeCouple
      local wheelAVdir = wheelAV * wd.wheelDir
      local wheelSpeed = wheelAVdir * wd.dynamicRadius
      local isSpeedo = wd.isSpeedo
      avgAV = avgAV + wheelAVdir * isSpeedo
      avgWheelSpeed = avgWheelSpeed + wheelSpeed * isSpeedo
      wd.wheelSpeed = wheelSpeed
      -- composite brake (normal + parking)
      wd.desiredMainBrakingTorque = wd:updateBrake(brake * wd.defaultBrakeInputUsageCoef, invAirspeed, airspeed, airspeedCutOff, dt)
      wd.desiredBrakingTorque = max(wd.desiredMainBrakingTorque, wd.parkingTorque * parkingbrakeInput * wd.defaultBrakeInputUsageCoef)
    end
  end

  local rotators = M.rotators
  for i = 0, initialRotatorCountDec do
    local wd = rotators[i]
    if not wd.isBroken then
      local brake = electrics.values[wd.brakeElectricsName] or 0
      local wav = wd.coreData
      wd.lastAngularVelocity = wd.angularVelocity
      wd.lastAngularVelocityBrakeCouple = wd.angularVelocityBrakeCouple
      local wheelAV = wav.angularVelocity
      wd.angularVelocity = wheelAV
      wd.angularVelocityBrakeCouple = wav.angularVelocityBrakeCouple

      local wheelAVdir = wheelAV * wd.wheelDir
      local wheelSpeed = wheelAVdir * wd.radius
      local isSpeedo = wd.isSpeedo
      avgAV = avgAV + wheelAVdir * isSpeedo
      avgWheelSpeed = avgWheelSpeed + wheelSpeed * isSpeedo
      wd.wheelSpeed = wheelSpeed

      -- composite brake (normal + parking)
      wd.desiredMainBrakingTorque = wd:updateBrake(brake * wd.defaultBrakeInputUsageCoef, invAirspeed, airspeed, airspeedCutOff, dt)
      wd.desiredBrakingTorque = max(wd.desiredMainBrakingTorque, wd.parkingTorque * parkingbrakeInput * wd.defaultBrakeInputUsageCoef)
    end
  end

  local evals = electrics.values
  avgAV = avgAV * invSpeedoWheelCount
  avgAV = isnaninf(avgAV) and 0 or avgAV
  evals.avgWheelAV = avgAV
  avgWheelSpeed = abs(avgWheelSpeed) * invSpeedoWheelCount
  avgWheelSpeed = isnaninf(avgWheelSpeed) and 0 or avgWheelSpeed
  evals.wheelspeed = avgWheelSpeed

  brakeABSCoefLimits.left = brakeABSCoefLimitCache.left
  brakeABSCoefLimits.right = brakeABSCoefLimitCache.right
end

Callers

@/lua/vehicle/main.lua
function onPhysicsStep(dtPhys)
  wheels.updateWheelVelocities(dtPhys)
  powertrain.update(dtPhys)