Speed Traps and Cameras
Reference for `gameplay_speedTraps`, which handles speed trap and red light camera trigger events. Fires visual flash effects and dispatches hooks when vehicles exceed speed limits.
Reference for gameplay_speedTraps, which handles speed trap and red light camera trigger events. Fires visual flash effects and dispatches hooks when vehicles exceed speed limits.
Module Exports (M)
| Function | Signature | Description |
|---|---|---|
getSpeedTrapsInCurrentLevel | (speedTrapType) → table | Returns all BeamNGTrigger objects of the given type (e.g. "speed", "redLight") |
Hooks (Event Handlers)
| Hook | Description |
|---|---|
onBeamNGTrigger | Core trigger handler - processes speed trap and red light events |
Internals
- Camera distance limit: 100m - events are ignored if the vehicle is too far from camera
- Default red light trigger speed: 5 m/s
- Direction check: Uses dot product of trigger rotation vs vehicle velocity to ensure the vehicle is driving through the trap (not past it from the side)
Speed Trap Types
| Type | Behavior |
|---|---|
"speed" | Checks speedLimit + speedLimitTolerance; fires onSpeedTrapTriggered hook |
"redLight" | Checks triggerSpeed (default 5 m/s) + signal state; fires onRedLightCamTriggered if light is red |
M.getSpeedTrapsInCurrentLevel | (speedTrapType) |
M.onBeamNGTrigger | (data) |
Light Flash Effects
When a trap triggers, the associated light object (named in speedTrapLightName) is briefly enabled:
- Speed camera: Single flash (0.1s on, then off)
- Red light camera: Double flash with delay based on vehicle speed (
10 / speedseconds between flashes)
How It Works
onBeamNGTriggerreceives data when a vehicle enters aBeamNGTriggerwithspeedTrapTypeset- Checks distance to camera, vehicle speed vs configured limit, and driving direction
- For speed traps: fires
onSpeedTrapTriggeredhook with speed data - For red light cameras: checks
core_trafficSignalsstate, firesonRedLightCamTriggeredif red - Activates the flash light object via a coroutine job
Trigger Data Format
-- Example BeamNGTrigger dynamic fields:
{
speedTrapType = "speed", -- or "redLight"
speedLimit = 11.176, -- m/s
speedLimitTolerance = 1.1, -- m/s (optional, defaults to 10% of limit)
speedTrapLightName = "speedTrapLight1",
trafficSignalId = "signal1", -- red light cameras only
triggerSpeed = 5, -- red light cameras only (optional)
}Usage Example
-- Query all speed camera triggers on the current level
local traps = gameplay_speedTraps.getSpeedTrapsInCurrentLevel("speed")
for _, obj in pairs(traps) do
log("I", "", "Speed trap: " .. obj:getName())
end
-- Listen for speed trap events
local function onSpeedTrapTriggered(data, speed, overSpeed)
log("I", "", string.format("Caught at %0.1f m/s, over by %0.1f", speed, overSpeed))
endSee Also
- Gameplay Achievement - Related reference
- Gameplay City - Related reference
- discover - Discover / Experience System - Related reference
- Gameplay Systems Guide - Guide
Speed Trap Leaderboards
Reference for `gameplay_speedTrapLeaderboards`, which manages per-level speed trap leaderboard storage. Tracks the top 10 fastest runs through each speed trap trigger in freeroam mode.
Gameplay Statistics
Reference for `gameplay_statistic`, the central metrics engine that records, persists, and reports gameplay statistics. Supports both global and career-scoped data with timers, callbacks, and a schedu