Visual Compositor
Generates visual pacenote icon data for the HUD display. Converts structured pacenote attributes (corner severity, modifiers, cautions) into icon descriptions consumed by the CEF UI layer.
Generates visual pacenote icon data for the HUD display. Converts structured pacenote attributes (corner severity, modifiers, cautions) into icon descriptions consumed by the CEF UI layer.
Constructor
local VisualCompositor = require('/lua/ge/extensions/gameplay/rally/notebook/structured/visualCompositor')
local vc = VisualCompositor(textCompositor)Public API
| Function | Signature | Returns | Description |
|---|---|---|---|
C:compositeVisual | (pacenote, noteAttrs, distBeforeMeters, distAfterMeters) | table[] | Generates array of visual icon objects for a pacenote |
M.init | (textCompositor) | nil | init |
Internals
| Function | Signature | Description |
|---|---|---|
C:_getMaxTransitionDistance | () | Returns level 3 threshold from text compositor config |
C:_getCornerData | (noteAttrs) | Maps corner attributes to visual turn type, direction, modifiers |
How It Works
- Corner data extraction: Maps corner severity/direction to visual icon types using the text compositor's config (severity lookup finds closest configured value)
- Caution handling: Prepends caution or double-caution icons when
noteAttrs.caution > 0 - Corner icons: Creates turn icons with direction (left/right mirroring), severity text, radius change modifiers, and "don't cut" badges
- Modifier icons: Iterates modifier fields (
modNarrows,modWater,modJump,modCrest,modBumpy,modBump) up to max 4 notes total - Finish line: Always appended when
noteAttrs.finishLineis set - Distance/into decoration: First icon gets "into" styling if previous note is within transition distance; last icon gets the distance string
Visual Icon Object Structure
Each icon in the returned array contains:
{
id = "pacenote_name_1", -- unique ID for UI
pnId = pacenote.id, -- pacenote reference ID
type = "turn3", -- icon font ID
isLeft = false, -- mirror icon for left turns
size = 2, -- container size in REMs
turnTypeValue = "3", -- text overlay (1-6, SQ, etc.)
turnModifier = "opens", -- informational modifier icon
colorNoteIcon = "#fff", -- icon color
colorNoteText = "#fff", -- text color
background = {
color = 'var(--bng-cool-gray-600)',
strokeColor = 'var(--bng-cool-gray-500)',
opacity = 0.6
},
isInto = false, -- "into" chained background style
intoColor = nil, -- into color override
distance = "150", -- distance string (last icon only)
colorDistance = "#fff", -- distance text color
additionalNote = { -- top-right badge (cut/don't cut)
color = '#fff',
icon = "dontCut",
text = nil
}
}-- Generate visual icons for a pacenote
local vc = VisualCompositor(textCompositor)
local icons = vc:compositeVisual(pacenote, noteAttrs, 80, 200)
-- icons is an array of visual icon objects sent to guihooks.trigger('showVisualPacenote2', ...)See Also
- Library Compositor - Related reference
- Structured Pacenote Schema - Related reference
- TextCompositor - Structured Pacenote Text Generation - Related reference
- Gameplay Systems Guide - Guide
Text Compositor
Converts structured pacenote data into human-readable text strings for co-driver audio. Handles distance rounding, unit conversions, and phrase enumeration for TTS audio generation.
Notebook Tests
Unit tests for notebook structured data serialization and deserialization. Validates that structured pacenote fields survive round-trip save/load.