import { SyncHook } from '@tinoe/glb'; import { AnimationClip } from './animation-clip'; import { DirectionType, TimeEquation } from './types'; export default class Animation { endHook: SyncHook; name: string; /** * 播放倍速 */ speed: number; /** * 时间缩放方程 */ timeEquation: TimeEquation; /** * 自身播放状态 */ private _isPlaying; /** * 动画所占时间 */ duration: number; /** * 动画重复次数 */ repeatCount: number; private get _isLoop(); /** * 动画方向 */ direction: DirectionType; /** * 动画延迟 */ delay: number; private _state; /** * 储存所有的动画片段 */ private _clips; constructor({ clips, name, autoPlay, }?: { clips?: AnimationClip[]; autoPlay?: boolean; name?: string; }); /** * 添加动画片段 * @param clip */ addClip(...clips: AnimationClip[]): void; /** * 跳帧 */ jump(frameTime: number): void; /** * 播放动画 */ play(): void; playSegment(startTime: number, playTime: number): void; /** * 播放动画 */ stop(): void; /** * 暂停动画 */ resume(): void; /** * 暂停动画 */ pause(): void; private _applyDirection; private _applyTimeEquation; protected _updateState(deltaTime: number): void; update(deltaTime: number): void; /** * TODO * set isOver as a property so that we dont need to traverse */ get isOver(): boolean; /** * 重置动画树,回到首帧 */ reset(): void; }