Gen Decal Editor
Experimental procedural road/decal generation system for the gen editor framework.
Experimental procedural road/decal generation system for the gen editor framework.
Overview
The decal module is part of the experimental gen editor subsystem. It provides procedural road and lane-marking generation using decal-based rendering. Includes road junction logic, lane configuration (left/right lanes, dashed/solid markings), and a simple vehicle driving simulation for testing.
Module Table: D
| Field | Type | Description |
|---|---|---|
D.ui.laneL | number | Number of left lanes |
D.ui.laneR | number | Number of right lanes |
D.ui.middleYellow | boolean | Whether center line is yellow |
D.ui.middleDashed | boolean | Whether center line is dashed |
D.ui.tpick | number | Active tool picker index |
D.default | table | Default road generation parameters |
D.out | table | Output table containing avedit, apick, apoint, apath, default |
Default Parameters
| Parameter | Default | Description |
|---|---|---|
react_time | 5 | AI reaction time |
nbranch | 4 | Number of junction branches |
laneWidth | 3 | Lane width in meters |
laneNum | 2 | Number of lanes |
mat | "road1_concrete" | Road surface material |
matline | "ChaulkLine" | Lane line material |
matlinedash | "crossing_white" | Dashed line material |
rjunc | ~33.3 | Junction radius |
rround | 20 | Roundabout radius |
radcoeff | 2 | Radius coefficient |
bank | 2 | Road banking angle |
wline | 0.2 | Line width |
rexit | 20 | Exit radius |
wexit | 4 | Exit width |
sidemargin | 0.3 | Side margin |
v2tmin | 5 | Min v2t value |
Dependencies
| Module | Path |
|---|---|
| Utils | /lua/ge/extensions/editor/gen/utils |
| Render | /lua/ge/extensions/editor/gen/render |
Usage Example
-- The decal module is loaded as part of the gen editor framework.
-- It uses scene groups to organize generated road objects:
local groupDecal = scenetree.findObject('e_road')
-- Road geometry is created procedurally and added to MissionGroup.Functions
inject(inreload)
Handles inject.
inreload(any)
Returns: rd.ind
clear()
Handles clear.
Returns: end
undo(silent)
Handles undo.
silent(boolean)
Returns: ijs
del(ind)
Handles del.
ind(any)
Returns: aset
ifRound(r, abr)
Handles if round.
r(any)abr(any)
Returns: a.ang < b.ang
matchClear()
Handles match clear.
Returns: end
inMatch(ind)
Handles in match.
ind(any)
Returns: end
setCar(pos, ang, lane)
Sets the car.
pos(number)ang(any)lane(any)
Returns: end
toMark(list, cname, f, r, op, keepz)
Handles to mark.
list(any)cname(any)f(any)r(any)op(any)keepz(any)
road2ter(ilist, precomp, dbg)
Handles road2ter.
ilist(any)precomp(any)dbg(any)
decalUp(desc, ext)
Handles decal up.
desc(any)ext(any)
Returns: road
epos(rd, i, side)
Handles epos.
rd(any)i(number)side(any)
Returns: p
roadLength(rd, side)
Handles road length.
rd(any)side(any)
Returns: d,nsec
toPath(p, rd, aind, side, crv, dbg)
Handles to path.
p(any)rd(any)aind(any)side(any)crv(any)dbg(any)
Returns: c, c:distance(p), rd.e2d[e1]*(1-s) + rd.e2d[e2]*s, e1
toSide(p, rd, side)
Handles to side.
p(any)rd(any)side(any)
Returns: d,p,ifr
onSide(rd, side, dist, margin, dbg)
Callback for side event.
rd(any)side(any)dist(any)margin(any)dbg(any)
Returns: rd.list[#rd.list],nsec
borderCross(rda, rdb, sidea, sideb, starta, startb, margin)
Handles border cross.
rda(any)rdb(any)sidea(any)sideb(any)starta(any)startb(any)margin(any)
Returns: c,i,j
nodesUpdate(rd, apos, frto, awidth, dbg)
Handles nodes update.
rd(any)apos(any)frto(any)awidth(any)dbg(any)
forExitFree(a, b, pa, pb, sidea, sideb)
Handles for exit free.
a(any)b(any)pa(any)pb(any)sidea(any)sideb(any)
Returns: edesc
junctionRound(r, w, dbg)
Handles junction round.
r(any)w(any)dbg(any)
forPlot(render)
Handles for plot.
render(any)
branchMerge(a, b, desc)
Handles branch merge.
a(any)b(any)desc(any)
hmapChange(p, h, yes)
Handles hmap change.
p(any)h(any)yes(any)
forHSpline(ipin, between)
Handles for h spline.
ipin(any)between(any)
Returns: h,h
spline(apar, k, t, s)
Handles spline.
apar(any)k(any)t(any)s(any)
Returns: U.spline2(a, b, s)
onVal(key, val)
Callback for val event.
key(string)val(any)
Returns: a.ang < b.ang
toTarget(ang, throttle)
Handles to target.
ang(any)throttle(any)
decalSplit(rd, p, ext)
Handles decal split.
rd(any)p(any)ext(any)
decalPlot(pth, w, ard, ext, dbg)
Handles decal plot.
pth(any)w(any)ard(any)ext(any)dbg(any)
decalsLoad(list)
Handles decals load.
list(any)
forRoad()
Handles for road.
Returns: croad or #apick --and croad:getField("material", "") ~= 'War
junctionUp(pos, n, inrand, aang)
Handles junction up.
pos(number)n(number)inrand(any)aang(any)
Returns: ajunc[#ajunc]
ter2road(pth, cid)
Handles ter2road.
pth(any)cid(any)
restore()
Handles restore.
matApply(mat, o)
Handles mat apply.
mat(any)o(any)
laneSet()
Handles lane set.
widthRestore()
Handles width restore.
middleUp(rdobj)
Handles middle up.
rdobj(any)
sideUp(rdobj)
Handles side up.
rdobj(any)
node2edge(rd, dbg)
Handles node2edge.
rd(any)dbg(any)
Returns: list
unselect()
Handles unselect.
onUpdate(rayCast)
Callback for update event.
rayCast(any)
onSelect()
Callback for select event.
test()
Test function (no-op in production).
See Also
- Gen Render - Debug rendering utilities
- Gen Network - Road network generation
- Gen Region - Region-based procedural generation