Livery Editor – Layers / Decals
Operates on existing decal layers - transform (scale, skew, rotate), material properties (colour, metallic, roughness), and data formatting.
Operates on existing decal layers - transform (scale, skew, rotate), material properties (colour, metallic, roughness), and data formatting.
Overview
ui_liveryEditor_layers_decals provides the per-layer editing operations that modify an already-placed decal. Unlike the cursor module (which controls the preview), this module writes directly to layer objects via api.setLayer().
Extension path: lua/ge/extensions/ui/liveryEditor/layers/decals.lua
Exports (M)
| Function | Signature | Description |
|---|---|---|
setLayer | (layerUid) | Sets the active layer and stores a deep copy. |
addLayer | (params) → layer | Adds a new decal using cursor mode at (0.5, 0.5). |
setColor | (layer, color) | Sets RGBA colour on a layer. |
setMetallicIntensity | (layer, value) | Sets metallic intensity on a layer. |
setRoughnessIntensity | (layer, value) | Sets roughness intensity on a layer. |
rotate | (layer, degrees, ccw) | Rotates a layer by incremental degrees. |
setRotation | (layer, degrees) | Sets absolute rotation in degrees. |
scale | (layer, steps_x, steps_y) | Scales a layer by step increments. |
setScale | (layer, scaleX, scaleY) | Sets absolute scale. |
skew | (layer, stepsX, stepsY) | Skews a layer by step increments. |
setSkew | (layer, skewX, skewY) | Sets absolute skew. |
setMirrored | (layer, mirrored, flipped) | Sets mirror and flip flags. |
setDecal | (layer, texture) | Changes the decal texture path. |
getData | (layer) → table | Returns UI-formatted data for the layer. |
getLayerActions | () → string[] | Returns available actions: transform, material, order, duplicate, mirror, rename, visibility, delete. |
requestData / notifyListeners | (layer) | Triggers LiveryEditor_CursorUpdated with the layer's data. |
Data Fields
| Field | Description |
|---|---|
M.layerData | nil - cached data for the currently active decal layer. |
Internals
Step Units
ROTATE_STEP_UNIT = 0.1
SCALE_STEP_UNIT = 0.01
SKEW_STEP_UNIT = 0.01getData Format
Returns the same shape as the cursor's getData() but with applied = true, indicating the data reflects a placed layer rather than the cursor preview.
Notify Pattern
Every setter calls api.setLayer(layer, true) (true = re-render) then triggers LiveryEditor_CursorUpdated so the UI stays in sync.
How It Works
setLayer(uid)caches the layer data for potential restore- Transform functions modify
layer.decalScale/decalSkew/decalRotationdirectly - Material functions modify
layer.color/metallicIntensity/roughnessIntensity - After each change,
api.setLayer(layer, true)commits and re-renders notifyListeners(layer)pushes updated data to the UI
Example Usage
local decals = extensions.ui_liveryEditor_layers_decals
local api = extensions.editor_api_dynamicDecals
local layer = api.getLayerByUid(someUid)
decals.setColor(layer, {1, 0, 0, 1}) -- red
decals.setScale(layer, 0.3, 0.3)
decals.setRotation(layer, 45)
decals.setMirrored(layer, true, false)Additional Exports
The following exports are available but not yet documented in detail:
M.addLayerM.getDataM.getLayerActionsM.layerUidM.notifyListenersM.requestDataM.rotateM.scaleM.setColorM.setDecalM.setLayerM.setMetallicIntensityM.setMirroredM.setRotationM.setRoughnessIntensityM.setScaleM.setSkewM.skew