GardenDressing
The morning. Everything about how the Hedgerow Assizes LOOK lives in this component, so the look is part of the scene's behaviour and survives a reload with no `scene.json` edit.
GardenDressing
The morning. Everything about how the Hedgerow Assizes LOOK lives in this
component, so the look is part of the scene's behaviour and survives a reload
with no scene.json edit.
entity.find("DuelDirector").component.add("GardenDressing")
What it owns
- The sun.
sunAzimuth/sunElevationplace it; the component turns those into the direction the light travels and writes it through thelightingtoolbox. Setting the sun entity's rotation does nothing — the directional light's direction lives on the light, not on the transform. - The sky. The
ProceduralSkyon the scene'sskyentity: a saturated blue overhead falling to gold at the hedge line. - The ambient fill, warm-sky tinted and low enough that a hedge shadow is a hedge shadow.
- The tone curve: bloom, an ACES tonemap, a touch of contrast, and a
vignette. It explicitly REMOVES the
fogpreset, which tints the sky along with everything else and makes a bright garden read overcast whatever the sky is set to. Distance is done in the materials instead. - Keeping the garden built.
garden.moduleandfencer_body.moduleare the builders; this component notices when an arena, a fence or a body standing in the world was not built by them and rebuilds it, and poses both fencers every frame from their own live state. Every check is a marker lookup, so once every call site has moved to the modules this costs oneentity.findand returns. SetkeepBuilt = falseto switch it off.
Fields
| field | meaning |
|---|---|
sunAzimuth | degrees, measured from +X toward +Z |
sunElevation | degrees above the horizon — low, for long shadows |
sunIntensity | directional light strength |
ambientIntensity | sky fill; raise to lift the shadow side |
haze | how far the frame closes down at its edges |
keepBuilt | rebuild an arena/body that another builder put up |
rebuilds | how many arenas it has had to repair (diagnostic) |
lastLine | the property line the fence was last built for |
refreshLook() re-applies the whole look in one call.
Interface
What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.
conforms to
zero/source-extract/v2GardenDressing Component The morning. Everything about how the Hedgerow Assizes LOOK lives here, so that the look is part of the scene's behaviour and survives a reload with no scene.json edit: the key sun and its colour, the counter-fill that keeps the far end of the piste readable, the sky, the ambient, the reflection the brass and the mask have to have, the ground haze and the tone curve. Nothing else in this world writes sun / ambient / sky / post-process. Every look regression across two rounds came from something that did. THE RIG: one key sun, and the sky. The piste runs along X and the broadcast watches it side-on from +Z, so a key with a large X component lights one END of the arena and rakes the other. What keeps the raked end readable is the AMBIENT hemisphere, which is the sky as a light: it reaches the faces the key misses, it is the same everywhere along the piste by construction, and it is the whole of the shade side's exposure. Its intensity is therefore a gameplay dial and not a taste one — take it down and the losing end of the lawn goes unreadable. The key's azimuth keeps enough X to rake a long morning shadow down the gravel and enough Z to stand on the camera's side of the hedge, so nothing the player looks at is lit from behind. A second directional light, mirrored across Z, was carried here for a round as a counter-fill. It lit nothing: the same frame at fill 0.0 and fill 8.0 is pixel-identical, so the shade side was always ambient alone. The garden is lit by one directional and one hemisphere, which is what it says here. MOODS. `MOODS` names every look this garden can wear and `mood` chooses one; writing a name that is not in the list leaves the garden exactly as it was. A mood is a whole rig — key, fill, ambient, sky, tone — so a neighbour or a moment can re-light the assize without a second component writing to the sun. Morning is the spec's default and stays the default. It also keeps the garden and the two fencers built out of `garden.module` and `fencer_body.module`. Both builders are idempotent and both leave a marker entity behind them, so this component can tell an arena it built from one an older builder put up, and repair it without fighting anyone for the frame. Usage: entity.find("DuelDirector").component.add("GardenDressing") entity.find("DuelDirector").component.get("GardenDressing").mood = "gloaming"
moodNow( ) → Mood
travel(azimuth: number, elevation: number) → void
The direction the light TRAVELS, from where the sun stands.
| arg | type | description |
|---|---|---|
| azimuth | number | |
| elevation | number |
sunLight( ) → void
clearFill( ) → void
A second directional light standing in the scene drops the scene's directional shadow map and does not restore it when it goes, so the garden takes one away if it finds one. `gardenFill` is the one this component used to spawn.
applyLight( ) → void
applySky( ) → boolean
applyGround( ) → boolean
The scene's ground plane is 50 m square and reaches past the garden wall on every side, so whatever it wears is the horizon of every frame. It comes off the scaffold in the engine's placeholder check, which reads as a brown field the country house sits in.
applyPost( ) → void
The tone curve. `pp.add` is idempotent on the effect name, so re-applying the whole stack is how it is kept correct after a reload.
adoptMood(name: string) → void
| arg | type | description |
|---|---|---|
| name | string |
refreshLook( ) → void
Re-apply the whole look: key sun, counter-fill, sky, ambient, haze and tone.
moodLabel( ) → string
The mood the garden is wearing, with its prose label.
probeExists( ) → boolean
bakeReflections( ) → boolean
Place and bake the piste's reflection probe if the scene has none.
hasChild(parent: ?, name: string) → boolean
| arg | type | description |
|---|---|---|
| parent | ? | |
| name | string |
matchLine( ) → number
rescan( ) → void
collect( ) → void
`entity.exists` is asked first because a cached id going stale is the normal case here — a scene load despawns both fencers — and `entity(id)` on a despawned id logs a diagnostic every frame it happens.
fencers( ) → void
keepBuilt( ) → void
Rebuild anything standing in the world that this module did not put there. Every check is a marker lookup, so once nothing else builds an arena this costs one `entity.find` and returns.
awake( ) → void
start( ) → void
onPropertyChanged(key: string) → void
| arg | type | description |
|---|---|---|
| key | string |
lookDrifted( ) → boolean
Whether the world still wears the look this component owns. A scene load restores the light and sky entities from their authored rows without running `awake` again, so the garden comes back lit the way the scaffold left it and nothing says so — the drift is the signal to re-assert.
update(dt: number) → void
| arg | type | description |
|---|---|---|
| dt | number |
Owns the look of the garden — a low warm sun, a morning sky, ambient fill and the tone curve — and keeps the arena and both fencers built out of garden.module and fencer_body.module so it all survives a scene reload.Sub-parts
Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.
Showing up to 3 levels deep. Open a part to see what it holds further down.
Problems
Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.
agent_score is exposed.+ quality × 0.35
+ performance × 0.25
± compat factor
Usability ratings
Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".
Scoped to this part · feeds back into the world's score.