import type { AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js"; import type { CapabilityDescription, ImportedAnimationSelection, SceneAnimationCancellationReason } from "@skenora/contracts"; import type { ManagedImportedAnimationPorts } from "./managed-imported-animation.js"; export interface AnimationCrossfadeOptions { durationMs?: number; speedRatio?: number; loop?: boolean; signal?: AbortSignal; } export interface AnimationMixerState { status: "idle" | "running" | "paused" | "completed" | "cancelled" | "failed"; elapsedMs: number; weight: number; from?: ImportedAnimationSelection; to?: ImportedAnimationSelection; reason?: string; } export declare class AnimationMixerError extends Error { readonly code: "animation-mixer-invalid" | "animation-mixer-unavailable" | "animation-mixer-target-lost"; constructor(code: "animation-mixer-invalid" | "animation-mixer-unavailable" | "animation-mixer-target-lost", message: string); } /** Bounded two-group pose crossfade, sampled by Babylon and composed with Babylon math. */ export declare class ManagedAnimationMixer { #private; readonly ports: ManagedImportedAnimationPorts; constructor(ports: ManagedImportedAnimationPorts); crossfade(from: AnimationGroup, to: AnimationGroup, options?: AnimationCrossfadeOptions): Promise; getState(): AnimationMixerState; pause(): boolean; resume(): boolean; /** Seek the two playback cursors and crossfade in accepted simulation milliseconds; leaves paused. */ seek(elapsedMs: number): AnimationMixerState; stop(reason?: SceneAnimationCancellationReason): void; reset(reason?: SceneAnimationCancellationReason, restore?: boolean): void; dispose(): void; } export declare function describeAnimationMixerCapability(): CapabilityDescription; //# sourceMappingURL=animation-mixer.d.ts.map