GE Lua Documentation

Press F to search!

onBeamNGTrigger

Definition


-- @/lua/ge/extensions/gameplay/speedTraps.lua:45
local function onBeamNGTrigger(data)
  if not data or not data.speedTrapType then return end

  if data.event == 'enter' and not gameplay_missions_missionManager.getForegroundMissionId() then
    -- Exit early if too far from camera
    vehPos:set(be:getObjectPositionXYZ(data.subjectID))
    camPos:set(core_camera.getPositionXYZ())
    if vehPos:distance(camPos) > camDistanceLimit then return end

    local isRedLightCamera = data.speedTrapType == "redLight"

    vehVelocity:set(be:getObjectVelocityXYZ(data.subjectID))
    local vehSpeed = vehVelocity:length()
    local speedLimit = data.speedLimit or 0
    local speedLimitTolerance = data.speedLimitTolerance or speedLimit * 0.1
    local triggerSpeed = isRedLightCamera and (tonumber(data.triggerSpeed) or defaultRedLightTriggerSpeed) or (speedLimit + speedLimitTolerance)
    local overSpeed = vehSpeed - speedLimit

    -- check if over speedlimit
    if vehSpeed > triggerSpeed then
      local triggerObj = scenetree.findObjectById(data.triggerID)
      if not triggerObj then return end

      -- TODO could also make a cache for the trigger direction
      local triggerRotation = quat(triggerObj:getRotation())
      triggerDir:setRotate(triggerRotation, yVec)

      if triggerDir:dot(vehVelocity) > 0 then

        local trafficSignalColor
        if isRedLightCamera then
          local trafficSignal = core_trafficSignals.getSignalByName(data.trafficSignalId)
          trafficSignalColor = trafficSignal:getState()
          if trafficSignalColor == "redTrafficLight" then
            extensions.hook('onRedLightCamTriggered', data, vehSpeed)
          end
        else
          extensions.hook('onSpeedTrapTriggered', data, vehSpeed, overSpeed)
        end

        if data.speedTrapLightName then
          -- TODO maybe build a cache with ids if findObject is too slow
          local lightObj = scenetree.findObject(data.speedTrapLightName)
          if isRedLightCamera then
            if lightObj and trafficSignalColor == "redTrafficLight" then
              lightObj.isEnabled = true
              core_jobsystem.create(redLightLightJob, 1, lightObj, 10 / math.max(vehSpeed, 0.01))
            end
          else
            if lightObj then
              lightObj.isEnabled = true
              core_jobsystem.create(speedCamLightJob, 1, lightObj)
            end
          end
        end
      end
    end
  end
end

Callers

@/lua/ge/extensions/flowgraph/nodes/events/onBeamNGTrigger.lua

function C:onBeamNGTrigger(data)
  if self.data.filterName ~= "" and data.triggerName ~= self.data.filterName then
@/lua/ge/extensions/scenario/busdriver.lua

local function onBeamNGTrigger(data)
  if running == false then return end
@/lua/ge/main.lua
-- do not delete - this is the default function name for the BeamNGTrigger from the c++ side
function onBeamNGTrigger(data)
  extensions.hook('onBeamNGTrigger', data)
@/lua/ge/extensions/campaign/exploration.lua

local function onBeamNGTrigger(data)
  -- log('I', logTag, 'onBeamNGTrigger for exploration lua')
@/lua/ge/extensions/career/modules/vehiclePerformance.lua

local function onBeamNGTrigger(data)
  if not testInProgress or not data or not data.triggerName or not data.event then return end
@/lua/ge/extensions/scenario/scenarios.lua

local function onBeamNGTrigger(data)
  -- log('I',logTag, 'onBeamNGTrigger called...')
@/lua/ge/extensions/freeroam/dragRace.lua

local function onBeamNGTrigger(data)
  local veh = getPlayerVehicle(0)
@/lua/ge/extensions/campaign/photoSafari.lua

local function onBeamNGTrigger(data)
  local vid = be:getPlayerVehicleID(0)
@/lua/ge/extensions/freeroam/specialTriggers.lua

local function onBeamNGTrigger(data)
  if not M.active or not data.triggerName then return end
@/lua/ge/extensions/core/busRouteManager.lua

local function onBeamNGTrigger(data)
  if data.type and data.type == "busstop" then