/** * AnimationTransitions.ts * * Ragdoll ? Animation blending system. * Enables seamless transitions between physics-driven ragdoll and keyframed animation. * * @module animation */ export type IVector3 = [number, number, number]; export interface BonePose { boneId: string; position: IVector3; rotation: [number, number, number, number]; } export interface TransitionConfig { duration: number; curve: 'linear' | 'ease_in' | 'ease_out' | 'ease_in_out'; settleThreshold: number; } export type TransitionDirection = 'animation_to_ragdoll' | 'ragdoll_to_animation'; export interface BlendState { direction: TransitionDirection; progress: number; duration: number; sourcePose: BonePose[]; isComplete: boolean; } export declare class AnimationTransitionSystem { private config; private activeBlends; constructor(config?: Partial); /** Normalize position: supports [x,y,z] arrays and {x,y,z} objects */ private toVec3; private toQuat4; private normalizePose; startAnimToRagdoll(entityId: string, currentPose: BonePose[]): void; startRagdollToAnim(entityId: string, currentPose: BonePose[]): void; update(dt: number, ragdollPoses: Map, animPoses: Map): Map; isTransitioning(entityId: string): boolean; getBlendProgress(entityId: string): number; clearTransition(entityId: string): void; getActiveTransitionCount(): number; private applyCurve; private lerpVec3; /** * Normalized-lerp (NLERP) of two quaternions with shortest-arc correction. * * This is NLERP by design, not SLERP: it linearly blends the components (after a * double-cover sign flip when dot < 0) and renormalizes. NLERP traces the same arc * as SLERP at a fraction of the cost and is the correct choice for short ragdoll↔anim * transition blends, where SLERP's constant-angular-velocity property is not visible. * (Previously named `slerpQuat`, which was a misnomer — true SLERP lives in * `@holoscript/core` `Quaternion.slerp`.) */ private nlerpQuat; } //# sourceMappingURL=AnimationTransitions.d.ts.map