import { Quaternion, Vector3 } from "@babylonjs/core/Maths/math.vector";
import type { MmdModelMetadata } from "../Loader/mmdModelMetadata";
import type { MmdRuntimeBone } from "./mmdRuntimeBone";
type RemoveUndefined<T> = T extends undefined ? never : T;
type AppendTransformMetadata = RemoveUndefined<MmdModelMetadata.Bone["appendTransform"]>;
/**
 * Gives the effect of being in a child parent relationship regardless of the bone hierarchy. Similar to Unity's Parent constraint
 */
export declare class AppendTransformSolver {
    readonly isLocal: boolean;
    /**
     * Whether to affect bone rotation
     */
    readonly affectRotation: boolean;
    /**
     * Whether to affect bone position
     */
    readonly affectPosition: boolean;
    /**
     * The ratio of the effect (can be negative)
     */
    readonly ratio: number;
    /**
     * Affecting bones
     *
     * Similar to parent in bone hierarchy
     */
    readonly targetBone: MmdRuntimeBone;
    /**
     * The offset of the position to be affected
     */
    readonly appendPositionOffset: Vector3;
    /**
     * The offset of the rotation to be affected
     */
    readonly appendRotationOffset: Quaternion;
    /**
     * Creates append transform solver
     * @param boneFlag bone flag of the bone to be affected
     * @param boneAppendTransformMetadata metadata of the bone to be affected
     * @param targetBone affecting bone
     */
    constructor(boneFlag: number, boneAppendTransformMetadata: AppendTransformMetadata, targetBone: MmdRuntimeBone);
    private static readonly _IdentityQuaternion;
    /**
     * Updates the solver
     */
    update(): void;
}
export {};
