export interface Keyframe { time: number; values: T; } interface AnimationFrameState { time: number; frameTime: number; deltaTime: number; progress: number; frame: Frame; target?: Target; animator: AnimationPlayback; } interface SimpleTimeline { loop?: boolean; duration: number; frames: { [key: number]: Frame; }; updater?: SimpleUpdater; } declare type SimpleUpdater = (frame: Frame, target: Target) => void; export interface Timeline { loop: boolean; duration: number; frames: Keyframe[]; updater?: SimpleUpdater; } export declare function Timeline(timeline: SimpleTimeline): Timeline; declare type AnimationCallback = (frame: AnimationFrameState) => void; export interface IPlayback { finished: boolean; play(): Promise; stop(): void; update(dt: number): void; reject(): void; } export declare class AnimationPlayback implements IPlayback> { frameTime: number; time: number; timeScale: number; target: Target | undefined; updater: AnimationCallback | undefined; timeline: Timeline; loop: boolean; state: "pending" | "playing" | "stopped"; currentFrame: Frame; duration: number; private resolver?; private rejector?; constructor(timeline: Timeline, target?: Target, updater?: AnimationCallback); get playing(): boolean; get finished(): boolean; play(time?: number): Promise; stop(): void; update(dt: number): void; reject(): void; private updateAnimation; private updateFrame; private interpolate; private checkEnd; } export interface AnimationPlaybackOptions { updater: AnimationCallback; playDuration: number; loop: boolean; startTime: number; } export declare class Animator { defaultTarget: AnimatorTarget | undefined; tracks: Array | undefined>; constructor(target?: AnimatorTarget); playOn(track: number, timeline: Timeline, target?: Target, duration?: number, updater?: AnimationCallback): Promise>; play(timeline: Timeline, target?: Target, duration?: number, updater?: AnimationCallback): Promise>; playProceduralOn(track: number, time: number, updater?: (t: number, dt: number) => void, startTime?: number): Promise; playProcedural(time: number, updater?: (t: number, dt: number) => void, startTime?: number): Promise; wait(time: number, callback: () => void): void; update(dt: number): void; clear(): void; } export {};