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