import { Object3D, TinoeNode } from '@tinoe/glc'; import { TRANSFORM_TYPE } from './constant'; declare type TransformValue = { [TRANSFORM_TYPE.translation]: T extends Object3D ? [number, number, number] : [number, number]; [TRANSFORM_TYPE.rotation]: T extends Object3D ? [number, number, number, number] : [number]; [TRANSFORM_TYPE.scale]: T extends Object3D ? [number, number, number] : [number, number]; [TRANSFORM_TYPE.weight]: T extends Object3D ? number[] : never; }; export declare type VectorArr = TransformValue[TRANSFORM_TYPE]; export interface Sampler { input: number[]; output: number[]; outputSize: number; equation?: InterpolationEquation; equationPerDimension?: (pre: number, next: number, t: number) => number; } export interface Channel { sampler: Sampler; path: TRANSFORM_TYPE; node: Object3D; } export declare type LocusEquation = (t: number) => T; /** * 0 <= t <= 1 * 插值方程 */ export declare type InterpolationEquation = (t: number, options: { preValue: T; nextValue: T; preFrameIndex: number; nextFrameIndex: number; keyFrames: KeyFrame[]; keyLength: number; }) => T; export declare type Value = TransformValue[T]; export declare type InnerLocusOptions = { node: K; endTime: number; equation: LocusEquation>; path: T; }; export declare type InnerInterpolationOptions = { node: K; keyFrames: KeyFrame>[]; equation: InterpolationEquation>; path: T; }; export interface KeyFrame { value: V; time: number; } export interface AnimationState { value: V; frameTime: number; isOver: boolean; playedCount: number; isJumping: boolean; delayed: number; startTime: number; playTime: number; } export declare type LocusTransformOptions = { endTime: number; equation?: InnerLocusOptions['equation']; onUpdate?: (value: Value) => void; }; export declare type InterpolationTransformOptions = { equation?: InnerInterpolationOptions['equation']; keyFrames: InnerInterpolationOptions['keyFrames']; onUpdate?: (value: Value) => void; }; export declare type TimeEquation = (t: number) => number; export declare type InterpolationTransformOptionsWithEndValue = { equation?: InnerInterpolationOptions['equation']; endValue: Value; endTime: number; onUpdate?: (value: Value) => void; }; export declare type DirectionType = 'normal' | 'reverse' | 'alternate' | 'alternate-reverse'; export declare type InterpolationTransformOptionsWithCSS = { duration: number; delay?: number; repeatCount?: number; direction?: DirectionType; timeEquation?: TimeEquation; keyFrames: { percent: number; [TRANSFORM_TYPE.translation]?: Value; [TRANSFORM_TYPE.rotation]?: Value; [TRANSFORM_TYPE.scale]?: Value; }[]; }; export {};