Traffic Signals
Comprehensive traffic signal system with instances, controllers, sequences, and intersection management.
Comprehensive traffic signal system with instances, controllers, sequences, and intersection management.
Overview
Extension: core_trafficSignals - A full traffic signal simulation (V2). Manages signal instances (individual lights/signs), controllers (state machines), and sequences (phased timelines for intersections). Signals are linked to map nodes for AI path-planning, supports serialization, debug drawing, and runtime state overrides.
Public Functions
| Function | Description |
|---|---|
M.newSignal(data) | Creates a new SignalInstance |
M.newController(data) | Creates a new SignalController |
M.newSequence(data) | Creates a new SignalSequence |
M.getSignals() | Returns array of all signal instances |
M.getSignalByName(name) | Returns signal instance by name |
M.getControllers() | Returns array of all controllers |
M.getControllerByName(name) | Returns controller by name |
M.getSequences() | Returns array of all sequences |
M.getSequenceByName(name) | Returns sequence by name |
M.getElementById(id) | Returns any element by unique ID |
M.getControllerDefinitions() | Returns signal states/types definitions |
M.setControllerDefinitions(data) | Merges custom states/types into definitions |
M.resetControllerDefinitions() | Resets definitions to defaults from JSON |
M.getMapNodeSignals() | Returns dict mapping map nodes to signal data |
M.getTimer() | Returns elapsed signal timer |
M.getData(full) | Returns full module state |
M.loadSignals(filePath) | Loads signals from JSON (default: signals.json in level dir) |
M.setupSignals(data, merge) | Processes and enables signals; optionally merge |
M.resetSignals() | Clears all signal data |
M.loadControllerDefinitions(filePath) | Loads custom controller definitions |
M.setupSignalObjects() | Caches TSStatic objects linked to signals |
M.setActive(val, autoRun) | Enables/disables the signal timer |
M.resetTimer() | Resets timer and reactivates sequences |
M.setTimer(val) | Directly sets the timer value |
M.setLightsManual(id, stateArray) | Directly sets object light states |
Architecture
SignalInstance
Individual signal position + direction, linked to a controller and optional sequence.
Key methods: setLights(), setStrictState(), setActive(), getState(), getStateAfterTime(), getBestRoad(), getVehPlacement(), isVehAfterSignal(), drawDebug(), include(), exclude()
SignalController
State machine defining signal phases (e.g. green→yellow→red). Reusable across instances.
Key methods: applyDefinition(type), getStateData(state), calcDuration(), autoSetTimings(), include(), exclude()
SignalSequence
Phased timeline assigning controllers to phases. Manages intersection timing.
Key methods: createPhase(), deletePhase(), calcDuration(), setStep(), setPhase(), advance(), setStrictState(), setActive(), enableTimer(), include(), exclude()
Module State
| Variable | Type | Default |
|---|---|---|
getSignalsDict | function | nop |
Usage Examples
-- Load signals for current level
core_trafficSignals.loadSignals()
-- Create a custom signal
local signal = core_trafficSignals.newSignal({name = 'myLight', pos = vec3(100, 200, 0)})
signal:setup()
signal:include()
-- Query signal state
local state, data = signal:getState()
-- state = 'greenTrafficLight', data = {lights = {'black','black','green'}, ...}
-- Check if vehicle passed signal
local passed, placement = signal:isVehAfterSignal(vehId)Hooks
| Hook | When |
|---|---|
onTrafficSignalUpdate | Signal states updated (per-frame batch) |
M.onNavgraphReloaded | Called on NavgraphReloaded event |
M.onUpdate | Called on Update event |
M.onClientStartMission | Called on ClientStartMission event |
M.onClientEndMission | Called on ClientEndMission event |
M.onSerialize | Called on Serialize event |
M.onDeserialized | Called on Deserialized event |
Module Properties
| Property | Default | Description |
|---|---|---|
M.useDtReal | false | Use real time instead of sim time |
M.debugLevel | 0 | 0=off, 1=shapes, 2=shapes+text |
M.getSignalsDict() | Returns the signals dictionary (nop/stub). |
See Also
- Globals - Map and scenetree access