Director
The staging of BLOCKBUSTER 767. It puts itself on the scene's bare `mount_director` entity at runtime (`cam.ensureDirector`, called from ChaseCamera's awake) rather than editing the scene, listens on the game bus, and writes an override pose into `game.camera.cam` for `ChaseCamer…
Director
The staging of BLOCKBUSTER 767. It puts itself on the scene's bare
mount_director entity at runtime (cam.ensureDirector, called from
ChaseCamera's awake) rather than editing the scene, listens on the game bus, and
writes an override pose into game.camera.cam for ChaseCamera to blend the
frame toward. It never touches the camera transform itself.
The beats
| beat | cue | what the frame does |
|---|---|---|
opening | roundStart for plane 1, or anyone setting the state to opening | a flythrough: high off the far corner over the block city, down through the towers, a low skim across the bare table with the toy growing in frame, then a sweep past the launcher into the chase. Lands exactly on the live chase pose and sets the state to wind. |
| launch | launch | the lens opens 9°, the camera is kicked back 2 m, a light shake — all decaying |
| impact | impact | shake scaled by the contact impulse behind it (impactShake is the impulse that shakes at full amplitude) |
| part lost | partLost | a hard shake and a small punch in |
topple | towerToppled | engine.timeScale dips to 0.35 for 0.42 s and ramps back over 0.45 s, the frame shakes, the lens punches in 8°, and the aim leans 55 % of the way onto the falling tower before easing back. One per 1.8 s — a chain shakes but does not stutter. |
wreck | wreck | the camera leaves the chase and orbits the resting airframe for 1.7 s, closing from 1.55 to 1.05 spans, then CUTS to a low close station at 0.78 spans for the tally |
ending | sessionEnd | a cut to a held wide from the launcher end, swinging slowly rather than circling — a camera that kept orbiting would end up behind the skyline with the table between it and the wreckage |
Every beat is timed in REAL seconds (time.realtime), so the slow-motion dip
cannot stretch the beat that asked for it, and every station's fov goes through
cam.fovForAspect and every radius through cam.distanceScale, so a tall phone
and a wide television both get a framed shot.
What it will not do
- It does not run the clock down past somebody else's pause. It records the value it set; if the clock has moved since (a screen holding it at zero) it leaves it where it is. A paused game holds its beat where it stands, and a slow-motion dip gives the clock straight back.
- It does not fight the state machine. Anything moving the state out of
openingends the flythrough cleanly. - A screen that stops the simulation clock stops this component too — with
engine.timeScaleat zero no component update runs at all. That is why the end-card camera is a CUT rather than a move: a drift-in that needed a second of frames would never leave the chase.
The surface other slices may call
Director:skipOpening()— end the flythrough now and hand the plane over. Any slice may call it; the presentation slice'sconfirmand the flight slice'slaunchare the two that reach a player who wants to get on with it.Director:replayOpening()— play it again from the top.Director:openingStation(u)— the station the flythrough stands at,uof the way through (0..1), solved against the live chase pose. It is how the opening is checked as a contact sheet without racing the six seconds it takes to play.Director:beat()— which beat is running, how far into it, the override weight and the current time scale.
Tuning
Every number above is a public field with a default: the flythrough's length
and lens, the topple dip / hold / ramp / cooldown / lean / punch, the wreck
orbit's length, sweep and two lenses, and the end wide's lens and swing.
Scoped to this part · feeds back into the world's score.