import type { NodeEvents, NodeProperties } from './Node'; import { Node } from './Node'; export type TimelineLoopMode = 'none' | 'loop' | 'alternate'; export interface TimelineEvents extends NodeEvents { updateCurrentTime: [current: number, delta: number]; /** 'none' 模式播放到端点自动停止时触发。 */ ended: []; } export interface Timeline { on: (event: K, listener: (...args: TimelineEvents[K]) => void) => this; once: (event: K, listener: (...args: TimelineEvents[K]) => void) => this; off: (event: K, listener: (...args: TimelineEvents[K]) => void) => this; emit: (event: K, ...args: TimelineEvents[K]) => this; } export interface TimelineProperties extends NodeProperties { startTime: number; currentTime: number; endTime: number; loop: boolean; paused: boolean; } export declare class Timeline extends Node { startTime: number; currentTime: number; endTime: number; loop: boolean; paused: boolean; /** 是否处于连续播放。下游(如 Video2D)据此区分「连续播放」与「定位/scrub」。 */ playing: boolean; /** 当前带符号倍速(含方向:正向为正、反向为负)。由 play/advance 维护。 */ playbackRate: number; protected _rate: number; protected _direction: 1 | -1; protected _loopMode: TimelineLoopMode; get loopMode(): TimelineLoopMode; set loopMode(mode: TimelineLoopMode); /** 播放倍速(正数;方向由 loop 模式内部维护)。可在播放中实时调整。 */ get rate(): number; set rate(val: number); static from(range: number | number[], loop?: boolean): Timeline; constructor(properties?: Partial); setProperties(properties?: Record): this; addTime(delta: number): this; /** 开始连续播放。可选设置倍速 / loop 模式;从端点重播时回到起点。 */ play(options?: { rate?: number; loopMode?: TimelineLoopMode; }): this; pause(): this; /** * 按墙钟增量推进一帧(外部驱动)。处理倍速×方向、loop 模式(none 到端自停并 emit 'ended'、 * alternate 到端翻向、loop 由 addTime 回绕),并维护带符号 playbackRate。 */ advance(wallDeltaMs: number): this; protected _process(delta: number): void; }