API ReferenceGE Extensionsscenario
Race Markers
Central manager for all race checkpoint markers. Creates, pools, positions, and updates marker objects. Supports swappable marker types and delegates rendering to individual marker instances.
Central manager for all race checkpoint markers. Creates, pools, positions, and updates marker objects. Supports swappable marker types and delegates rendering to individual marker instances.
Public API (Exports)
| Function | Signature | Description |
|---|---|---|
M.init | () | Clears all marker lists and hides markers |
M.setupMarkers | (wps, marker) | Creates markers for all waypoints; optionally sets marker type |
M.render | (dt, dtSim) | Per-frame update - calls update on all active markers |
M.setModes | (wpModes) | Sets mode (color/visibility) for each waypoint by name |
M.setToCheckpoints | (data) | Repositions markers using waypoint data by name |
M.hide | () | Hides all markers |
M.show | () | Shows all markers |
M.createRaceMarker | (detached, type) | Creates a single marker instance (optionally detached from pool) |
M.drawOnMinimap | (td) | Delegates minimap drawing to markers that support it |
M.onClientEndMission | () | Clears all markers and resets default marker type |
Internals
| Variable | Description |
|---|---|
markers | Table of marker lists keyed by name (default: 'markers') |
idToMarker | Maps marker ID → marker instance for iteration |
defaultMarker | Default marker module path: "scenario/raceMarkers/sideColumnMarker" |
createMarker | Current marker factory function (loaded via require) |
How It Works
- Marker type selection:
setupMarkersaccepts an optional marker name string (e.g.,"ringMarker"). If provided, loadsscenario/raceMarkers/<name>. Falls back tosideColumnMarker. - Marker creation: For each waypoint, creates a marker via the factory, calls
createMarkers()thensetToCheckpoint(wp). - Mode management:
setModes(wpModes)takes a table{waypointName = mode}. Markers not listed get'hidden'. - Rendering:
render(dt, dtSim)iterates allidToMarkerentries and callsm:update(dt, dtSim). - Detached markers:
createRaceMarker(true)creates a marker not tracked inidToMarker- useful for custom one-off markers. - Cleanup:
onClientEndMissiondeletes all markers and resetscreateMarkerto prevent stale module references.
Usage Example
-- Setup markers for a race (called by waypoints system):
local wps = {
{name = "wp1", pos = vec3(100,200,50), radius = 8},
{name = "wp2", pos = vec3(150,250,50), radius = 8},
}
race_marker.setupMarkers(wps, "ringMarker") -- or nil for default
-- Set which markers are visible and in what mode:
race_marker.setModes({wp1 = 'default', wp2 = 'next'})
-- Per-frame rendering:
race_marker.render(dt, dtSim)
-- Create a standalone marker (not in pool):
local custom = race_marker.createRaceMarker(true, "overhead")
custom:createMarkers()
custom:setToCheckpoint(myWaypoint)Key Notes
- Default marker type is
sideColumnMarker(the most visually complex) - Markers are stored in
ScenarioObjectsGroupfor automatic level cleanup - The
idToMarkertable is also exposed asM.idToMarker(mutable reference) - Custom marker types are specified in scenario JSON via
track.customMarker
See Also
- Scenario Bus Driver - Bus Route Scenario Logic - Related reference
- Scenario Damage Goal - Damage-Based Win/Fail Condition - Related reference
- Scenario Demolition Derby - Last Vehicle Moving Wins - Related reference
- Scenario System Guide - Guide
Quick Race Loader
Discovers available quick race tracks across all levels, loads track configurations, supports track editor tracks, and assembles complete scenario data for the quick race system.
Race Debug
Provides debug visualization for race waypoints and paths. Draws waypoint spheres and route prisms in the 3D world when editor mode and debug setting are enabled.