Log inGet started
World

Blockbuster 767

Branchmain
Branchesmain
Commit8e9b87fcce

README.md

ChaseCamera

The camera behavior on the PlayerPrototype's CameraRig, and the only thing in BLOCKBUSTER 767 that moves the camera. The Camera component instantiates it beside itself and hands it the avatar in Camera.follow.

It trails the toy from behind and above, so the plane flies AWAY from the viewer into the skyline and the tall axis of a 3:4 frame carries the composition: the aim point sits ahead of and below the nose, which puts the plane in the lower third with the towers rising above it.

Each frame, in order:

  1. solve the chase pose — the station the camera would take if nothing were staging a moment — and publish it as cam.chase;
  2. blend that toward cam.override, the pose the Director asked for;
  3. add the decaying impulses (shake, lens punch, distance kick) and a slow handheld sway, so the frame is never mechanically still;
  4. write the rig's transform and the Camera's fov.

The feel

Speed pushes the camera back and opens the lens; boost adds to both; a plane that has stopped is closed in on, because the wreck is the subject now. The offset is smoothed AS AN OFFSET FROM THE PLANE, never as a world position, so the lag never grows with speed.

The chase smooths on SIMULATED seconds, so a slow-motion beat slows the camera's own catch-up with the world it is filming. When the simulation clock is stopped altogether it smooths on real ones instead, so a staged move over a frozen scene still plays.

Spans, not metres

Every distance is a multiple of the toy's own longest dimension, measured once off whatever the plane-art slice built (framing 2.3 spans behind, height 0.85 above, lookAhead 1.8 ahead, lookDown 0.28 below). A camera holding absolute metres would frame a bigger or smaller 767 wrongly the moment that slice changed it. ChaseCamera:rig() reads back the measured span and the station it produces.

Every screen shape

Nothing here is a number chosen for a 1080x1440 frame. The lens opens on a screen taller than the filmed 3:4 and the camera stands further off (cam.fovForAspect, cam.distanceScale), and how far the plane rides below the aim point scales with how tall the screen is — all read from the live viewport every frame.

Measured at the parked launcher: 16:9 → 58° and the authored distance, with the aim 0.48 m higher so the plane centres a little; 3:4 → 58° and the authored distance; 9:16 → 66.5° and 1.5 m further back. The plane and the skyline are both in frame at every one.

Where the staging lives

Nothing in this file knows what a topple or a wreck is. It wakes, puts the Director on the scene's mount_director (retrying until the component type has registered), and from then on only reads game.camera.cam.