/** Local tuple type for IK positions — avoids coupling to @holoscript/core object-style Vector3. */ type Vec3 = [number, number, number]; /** * IKSolver.ts * * Inverse Kinematics: two-bone IK, CCD chain solver, * pole target, foot placement, and constraint limits. * * @module animation */ export interface IKBone { id: string; position: Vec3; rotation: { x: number; y: number; z: number; w: number; }; length: number; minAngle?: number; maxAngle?: number; } export interface IKChain { id: string; bones: IKBone[]; target: Vec3; poleTarget?: Vec3; weight: number; iterations: number; } export type IKSolveMode = 'analytic' | 'ccd' | 'fabrik'; export interface FootPlacementConfig { rayHeight: number; rayLength: number; footOffset: number; blendSpeed: number; enabled: boolean; } export declare class IKSolver { private chains; private footConfig; private footPositions; addChain(chain: IKChain): void; removeChain(id: string): boolean; getChain(id: string): IKChain | undefined; getChainCount(): number; setTarget(chainId: string, x: number, y: number, z: number): void; setPoleTarget(chainId: string, x: number, y: number, z: number): void; setWeight(chainId: string, weight: number): void; solveTwoBone(chainId: string): boolean; solveCCD(chainId: string): boolean; solveFABRIK(chainId: string): boolean; solveChain(chainId: string, mode: IKSolveMode): boolean; setFootPlacement(config: Partial): void; getFootPlacement(): FootPlacementConfig; updateFootPlacement(footId: string, groundHeight: number, dt: number): Vec3; solveAll(): void; } export {}; //# sourceMappingURL=IKSolver.d.ts.map