This document records the TODOS.phase-72.72.15.1.2 cinematic sequencer
timeline playback contract. The playback layer is a stateless runtime engine on
top of FV2SequencerSequenceSpec: callers pass playback settings, a current
cursor, and a delta or command, then receive a new evaluated cursor.
Runtime Ownership#
- Runtime module:
V2Cinematics - Settings struct:
FV2SequencerPlaybackSettings - Cursor struct:
FV2SequencerPlaybackCursor - Evaluation struct:
FV2SequencerPlaybackEvaluation - Issue struct:
FV2SequencerPlaybackIssue - Status enum:
EV2SequencerPlaybackStatus - Direction enum:
EV2SequencerPlaybackDirection - Issue enum:
EV2SequencerPlaybackIssueType - Automation:
V2.Cinematics.Sequencer.TimelinePlayback - CI checker:
V2/ue/Tools/check-v2-sequencer-timeline-playback.py
Playback Controls#
The required playback controls are exposed as pure Blueprint helpers:
BuildSequencerPlaybackSettingsconfigures loop, reverse, playback rate, start frame, end frame, and scrub-clamping behavior.BuildSequencerPlaybackCursorcreates the initial timeline cursor at either the resolved start frame or resolved end frame.PlaySequencerTimelineresumes playback in forward or reverse direction.PauseSequencerTimelinefreezes the cursor without advancing on later ticks.ScrubSequencerTimelinemoves the cursor to a target frame and can clamp or reject out-of-range requests.SetSequencerTimelinePlaybackRateupdates variable speed without rebuilding the sequence model.EvaluateSequencerTimelinePlaybackadvances a playing cursor byDeltaSeconds * TickResolutionFps * PlaybackRate.
Engine Behavior#
FV2SequencerPlaybackSettings resolves EndFrame == 0 to the sequence
duration, allowing the default data model to play the full
Seq.DataModel.CouncilIntro fixture without repeated boilerplate. Playback rate
must be greater than zero, and playback ranges must resolve to StartFrame
before EndFrame inside the sequence duration.
Core tick behavior:
- Forward playback advances frames until the end of the resolved range.
- Reverse playback subtracts frames until the start of the resolved range.
- When
bLoopis true, overshoot wraps around and marksbLoopedThisTick. - When
bLoopis false, overshoot clamps to the boundary and marksbCompletedwithEV2SequencerPlaybackStatus::Completed.
Paused and scrubbing cursors do not advance during tick evaluation. Scrubbed
cursors use EV2SequencerPlaybackStatus::Scrubbing, which lets editor UI and
runtime preview flows distinguish timeline dragging from paused playback.
Validation#
ValidateSequencerDataModel remains the first gate for playback. Playback
evaluation also reports InvalidSequence, InvalidFrameRange,
InvalidPlaybackRate, InvalidDeltaSeconds, and ScrubFrameOutOfRange issues
through FV2SequencerPlaybackEvaluation::Issues.
Verification#
Run:
python3 V2/ue/Tools/check-v2-sequencer-timeline-playback.py
Adjacent verification should include
python3 V2/ue/Tools/check-v2-sequencer-data-model.py and
python3 V2/ue/Tools/check-v2-cinematics-module.py so playback remains bound to
the sequencer data model and module inventory.