To play a clip at its real speed the user had to know its length,
work out the last whole frame by hand and then scroll far to the
right to set the end key. The timeline now does the sum, and it
zooms out far enough to see a long clip in one piece.
- The context menu of a Video time row gets "Video at 1x to its end
from frame N". It keys the playhead with the row's value there and
the last whole frame before the clip ends with the matching time.
- The start key turns linear and keys in between are removed. The
whole run is one undo step (KeyStraightRunCommand).
- The clip is the one the sprite wears at the playhead, also when
the texture is keyed in the same animation (rowVideoAt).
- The entry is greyed out for relative rows, without a video, while
the length is unknown, or when the playhead is already at the end.
- The status line names the result, e.g. "frame 572 shows 57.2 s of
57.27 s".
- The timeline zooms out to 0.02 px per frame instead of 4 px. The
ruler labels follow a 1-2-5 step without an upper limit.
Tests:
- Unit video-clock + timeline-view: 27 tests green, 8 new
- e2e 66 (atx, alone): ALL PASSED, 23 checks, 66l new
- Gate (atx): CHECK EXIT 0, 297 files, 4553 tests
- Counter-check: the command keeping the keys in between turns
exactly the command test red
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A video used to run on its own clock as soon as a sprite wore it. An
animation could switch the sprite on and off, but never say which
picture shows at which frame. Cutting a video in an animation needs
the opposite: the animation sets the time and the video follows.
- Sprites wearing a video or a clip get two rows, Video clock and
Video time. They show only while the texture holds a video.
- With Video clock on Driven the video does not play by itself. It
shows the picture at Video time, counted from the clip's start.
Past the end it goes round with Loop and holds the last picture
without.
- Video time is a number like any other, so keys, step, easing and
curves give stills, slow motion and ramps.
- A driven sprite gets a player of its own, keyed by the wearer's
name. The same clip can run twice at different times.
- Following has two ways (`videoFollow.ts`). Running forward at 0.25x
to 4x the video plays at that rate and is nudged. A still, a scrub
or a step backwards seeks, and only the newest seek counts.
- Sound is heard only near 1x. The animation tab now plays it too, so
a cut can follow the sound. Scrubbing is silent.
- Scene, game view, the inspector's PREVIEW and the shader preview
show the driven picture. In a running game Play animation sets it.
Found on the way:
- After a scrub the video in the animation tab kept running. The
preview redrew only while the playhead moved, so nobody asked for
the video once it stood. `AnimationEditor.tick` now redraws it every
frame while it shows a video.
- Every sprite has two more defaults (`videoClock: 'free'`,
`videoTime: 0`). Eight tests in five files pinned the old list and
are updated.
Tests:
- Unit: video-clock and video-follow new, 4 files with 42 tests green.
- e2e 66 (melektaus-atx): ALL PASSED, 22 checks, 3 new. 66i: two
sprites on one clip stand at 0.2 s red and 0.7 s green. 66j: a
scrub to frames 2, 7, 12 and 3 shows red, green, blue, red, and
each colour still stands 0.7 s later. 66k: playing runs 10-30 ms
behind at rate 1.00-1.03 and is not muted.
- Counterchecks: a seek that keeps the rate turns the seek test red.
Not seeing Driven turns 66i, 66j and 66k red.
- Gate (melektaus-atx): exit 0, 297 files, 4546 tests.
- Not tested in the browser: Play animation in a running game.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>