A clip only hung at its track and frame and worked on whatever item it
overlapped. Moving an item left its clips behind, so they started to
animate the next item that came along.
- A clip belongs to the item that lies on its track at its start frame.
With two there, it belongs to the one in front. A clip that only
reaches into an item stays with the item before. The model does not
change, the rule is worked out each time.
- Dragging an item, also onto another track, and typing its Start in
the inspector take its clips along in the same undo step.
- Where a carried clip would land on a foreign one, the whole move
holds at the last place where everything fits, as dragging clips
already does.
- Pressing Alt during the drag moves the item alone. Alt on the press
already starts the clip band since 0648853.
- Copying an item takes its clips along with new ids. On a collision
items and clips slide on together.
- Deleting an item deletes its clips. Trimming and dragging its edges
leave them where they are.
Tests:
- tsc, eslint, Prettier clean
- Unit composition-edit 36 green (6 new), composition-sprites 11
- Without the rule 5 of the 6 new tests are red
- e2e 69 ALL PASSED, 18 checks (69n new)
- Gate on melektaus-atx green: 305 files, 4736 tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The composition tab only took single clicks and Ctrl-clicks, and
animation clips could not be copied at all. A band selection and
Copy/Paste for clips make longer compositions quicker to arrange.
- Dragging from an empty spot draws a band. It selects every item it
touches, across tracks. Ctrl adds to the selection, because Shift
plus drag already pans the view.
- With Alt held the band selects clips instead and may start on an
item, since items fill most of a track.
- Ctrl+C copies the selected clips as their own clipboard kind.
Ctrl+V places them like items: under the pointer over the tracks,
otherwise at the playhead on the selected track.
- Clips of a track never overlap. A paste onto taken frames moves the
whole copy on frame by frame until every clip fits (`pastedClips`).
- The paste is one undo step and selects the new clips.
Tests:
- Gate on melektaus-atx: tsc, eslint, Prettier clean,
305 files, 4724 tests (2 new).
- e2e 69: ALL PASSED, 17 checks (69m new). Band over three items on
two tracks, Alt band from an item picks both clips, first paste at
frames 50 and 60, second paste moves on to 56 and 66.
- Counter-check: without moving on, the paste unit test is red.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A composition lost the first frames of a video item. Its clock ran
while the player was still loading, in the tab and in the game. The
game only waited for videos once, when it started. A composition that
a behavior starts later spawned its items after that wait.
- The view now records which video sprites it left out for lack of a
first picture, one entry per object.
- The composition tab holds its playhead while the preview misses a
video, for at most VIDEO_WAIT_MS (3 s) like the game.
- CompositionSystem holds a composition's clock while one of its live
items misses its video. The rest of the game keeps running.
- The editor play and the published game pass their view to the run
as RunServices.pictures.
- VIDEO_WAIT_MS moves to core/model/video.ts, because the runtime
does not import from viewport/.
- Videos loaded ahead for coming items do not hold the clock.
Items can now be copied and pasted inside the composition tab.
- Ctrl+C keeps the timing of the copied items next to the objects.
- Ctrl+V pastes objects and items in one undo step. The earliest item
lands at the frame under the pointer, on the track there.
- Without the pointer over the tracks it lands at the playhead, on the
selected track or on the top track of the selected items.
- Several items keep their distances and tracks to each other.
- The same copy pastes into a scene as plain objects. Objects copied
from a scene do not paste into a composition, they have no timing.
Tests:
- Unit composition-edit, clipboard, composition-play: 3 new for
pasting, 1 new for the clock waiting in the game
- e2e 69i (play from the end waits for the video), 69j (paste under
the pointer and at the playhead), 68d (a composition started from
On start waits for its video)
- each new check is red without its fix
- README: 2036 editor checks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Trying the tab turned up six things to fix. Items of a track could
not overlap, so a drag stalled as soon as the pointer reached another
item. An item's ends gave no hint they could be dragged, a trimmed
video showed nowhere, clip names were hard to read and vanished when
picked, and the track menu did not match the song tab.
- Items of a track may overlap and nothing is cut or pushed aside.
The later one lies in front, in the picture and on the timeline.
The overlap is shaded and a line marks the covered end.
- Edges win over bodies when hit, so the covered end of the lower
item can still be dragged. Hovering an edge lights it up and shows
the ew-resize cursor, as in the song tab.
- A clip in the overlap plays on both items. Clips themselves still
do not overlap; a moved clip now runs up to its neighbour instead
of stopping short.
- Fit to media and a new video no longer cap the length at the next
item, which only made sense while overlaps were forbidden.
- The left edge can be trimmed past the start of the video. The
offset goes negative and the sprite shows the first picture until
the video begins.
- Video marks: a corner triangle where the item cuts into its video,
a line with a triangle like the song loop where the video starts or
ends inside the item. Edges snap to the video's ends within 6 px.
- Clip names sit in their own layer above the bars, in text colour.
- The track menu matches the song tab: add above or below, move up or
down, delete. It opens on the head and on an empty spot of the
track. The Remove track button left the inspector.
Tests:
- Unit composition and composition-edit: 67 green, several new or
rewritten. Bending three spots in the rules turned their tests red.
- e2e 69: ALL PASSED, 12 checks. 69b and 69c now drop the second item
over the first and drag the covered end past it. Without edges
winning the hit, 69c fails with hover: null.
- Gate on melektaus-atx: CHECK EXIT 0, 302 files, 4672 tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A composition could be placed and played, but not filled. Its tab
puts the picture at the playhead above a timeline of tracks, so a cut
or a cutscene is laid out by dragging assets onto tracks.
- The timeline takes the song tab's geometry with frames for ticks:
ruler in seconds, scrubbing, play and pause, + Track. Zoom and pan
glide through viewTween like the other tabs.
- A placeable asset dropped on a track becomes an item, 3 s long or
as long as its sprite's video. Dropped on an item it lands behind.
- Items move without overlapping. The right edge stops at the next
item. The left edge trims into a video and not before its start.
- An animation dropped on a track becomes a narrower clip bar above
the item it plays on. The asset panel now starts a drag for
animations too.
- The picture is a scene view over compositionHolder. A click picks
an item or its child, a drag moves the real object. It takes no
assets, since an object there would have no item.
- The hierarchy lists the items alive at the playhead. Reparenting is
off there, items stay at the top level.
- The inspector shows a TIMING block on an item (start, length,
offset for a video, Fit to media) and edits tracks and clips.
- Delete, the context menu and Remove item take item and object in
one undo step.
- fitMedia: an override that gives an item another video sets its
length in the same undo step, capped at the next item. Dragging an
edge or typing a length turns it off.
- A composition inside a composition is refused.
Tests:
- Unit composition-edit (new): 19 tests. Four counter-checks each
turned their test red. The "back to 3 s" test got a step in
between after one stayed green.
- e2e 69 (new): 11 checks, 9 own. The hierarchy check reads the rows
shown, after a counter-check on the model's rows stayed green.
- Gate on melektaus-atx: CHECK EXIT 0, 302 files, 4662 tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>