updraftFilm
<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->
updraftFilm
<!-- zero:scaffolded-readme --> <!-- Replace the line below with what this module provides and who consumes it, then delete both comment lines. -->TODO: describe this module.
Interface
What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.
conforms to
zero/source-extract/v2Updraft — the film's shared constants, its deterministic clock, and the registry every slice hangs off.
shotTable( ) → void
Data lives in film.updraftShots so the camera slice can retune it without touching the clock. Required lazily: the clock is usable before the shot table exists.
shotAt(t: number) → void
Which shot holds a film time, and where inside it. Shot windows are half-open, so the moment one ends is the moment the next begins.
| arg | type | description |
|---|---|---|
| t | number | Film seconds. |
ramp(t: number, keys: { { number } }) → number
| arg | type | description |
|---|---|---|
| t | number | |
| keys | { { number } } |
heat(t: number) → number
How far the inferno has gone, 0 .. 1. Light, sound, smoke, brass temperature, particle counts and material emissive all read THIS rather than agreeing with each other by hand.
| arg | type | description |
|---|---|---|
| t | number | Film seconds. |
emptied(t: number) → number
How much of the archive has already left the tower, 0 .. 1. Drives the emptying shaft, the plume's density and the exterior shots.
| arg | type | description |
|---|---|---|
| t | number | Film seconds. |
smokeY(t: number) → number
The underside of the smoke layer, in metres. It starts above the dome and rolls down the shaft. Anything that has to be inside or below the smoke reads this.
| arg | type | description |
|---|---|---|
| t | number | Film seconds. |
register(name: string, handlers: any) → void
| arg | type | description |
|---|---|---|
| name | string | One of "tower", "look", "fire", "sound". |
| handlers | any | { build?, reset?, tick? } |
registered( ) → void
eachSlice(fn: (string, any) → void
| arg | type | description |
|---|---|---|
| fn | (string, any |
stageRoot( ) → void
build( ) → void
Build every registered slice once. Called by play(); safe to call again.
play( ) → void
Start the film from the top, deterministically. Idempotent: calling it while the film runs restarts it rather than stacking a second clock.
stop( ) → void
step(_dt: number?, dt: ?) → void
ONE rendered frame of film. `dt` is accepted and DELIBERATELY IGNORED — the clock advances by exactly M.FRAME so the film is reproducible.
| arg | type | description |
|---|---|---|
| _dt | number? | |
| dt | ? | Ignored. Present so this drops straight into a component update. |
state( ) → void
What the clock says right now — for a capture loop, a probe, or a log line.
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.