import type { AnimationAction } from "three"; import { AnimationTree } from "./AnimationTree"; /** * Configuration for a linear animation action in the blend tree. * Associates an animation action with a position value on the linear blend axis. */ export interface LinearAction { /** The animation action to be played */ action: AnimationAction; /** Position value on the linear blend axis where this action is positioned */ value: number; } /** * Linear blend tree implementation for 1D animation blending. * * Manages animation actions positioned along a linear axis, blending * between adjacent animations based on a blend value. Interpolates weights * between the two closest animations. * * Action values can be any finite numbers and must be unique. * * @example * ```typescript * const blendTree = new LinearBlendTree([ * { action: idleAction, value: 0 }, * { action: walkAction, value: 0.5 }, * { action: runAction, value: 1 } * ]); * * blendTree.setBlend(0.3); * ``` */ export declare class LinearBlendTree extends AnimationTree { private readonly anchors; private lastLeftAnchor?; private lastRightAnchor?; private currentBlend; /** * Creates a new linear blend tree with the specified animation actions. * Actions are sorted by their value along the linear axis. * * @param linearActions - Array of linear actions defining the blend space. * Must contain at least 2 actions with unique, finite values. * @throws {Error} When fewer than 2 actions are provided * @throws {Error} When any action has a non-finite value * @throws {Error} When multiple actions have the same value * @throws {Error} When any animation clip duration is not positive */ constructor(linearActions: LinearAction[]); get blendValue(): number; /** * Sets the blend value to determine animation weights along the linear axis. * Recalculates weights to interpolate between the two closest actions. * Values outside the action range give full weight to the nearest boundary action. * * @param value - The target blend value * @throws {Error} When the blend value is not a finite number */ setBlend(value: number): void; protected ["onEnterInternal"](): void; /** * Updates the influence for all anchors in the linear blend tree. * Called when the tree's influence changes but relative weights remain the same. */ protected updateAnchorsInfluence(): void; /** * Recalculates and updates animation weights based on the current blend value. * Performs linear interpolation between the two actions closest to the blend point. */ private updateAnchors; }