import { Animation } from "@babylonjs/core/Animations/animation";
import { AnimationGroup } from "@babylonjs/core/Animations/animationGroup";
import type { MmdCamera } from "../../Runtime/mmdCamera";
import type { IMmdAnimation } from "./IMmdAnimation";
import type { MmdAnimationBase } from "./mmdAnimationBase";
import type { MmdCameraAnimationTrack } from "./mmdAnimationTrack";
/**
 * A container type that stores mmd camera animations using the `Animation` container in babylon.js
 *
 * It aims to utilize the animation runtime of babylon.js
 */
export declare class MmdCameraAnimationGroup implements IMmdAnimation {
    /**
     * Animation name for identification
     */
    readonly name: string;
    /**
     * Position animation track for `MmdCamera.position`
     */
    readonly positionAnimation: Animation;
    /**
     * Rotation animation track for `MmdCamera.rotation`
     */
    readonly rotationAnimation: Animation;
    /**
     * Distance animation track for `MmdCamera.distance`
     */
    readonly distanceAnimation: Animation;
    /**
     * FOV animation track for `MmdCamera.fov`
     */
    readonly fovAnimation: Animation;
    /**
     * The start frame of this animation
     */
    readonly startFrame: number;
    /**
     * The end frame of this animation
     */
    readonly endFrame: number;
    /**
     * Create a unbinded mmd camera animation group
     * @param mmdAnimation The mmd animation data
     * @param builder The builder for constructing mmd camera animation group
     */
    constructor(mmdAnimation: MmdAnimationBase, builder: IMmdCameraAnimationGroupBuilder);
    /**
     * Create a binded mmd camera animation group for the given mmd camera
     * @param mmdCamera The mmd camera
     * @returns The binded mmd camera animation group
     */
    createAnimationGroup(mmdCamera: MmdCamera): AnimationGroup;
}
/**
 * Mmd camera animation builder for constructing mmd camera animation group
 */
export interface IMmdCameraAnimationGroupBuilder {
    /**
     * Create mmd camera position animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createPositionAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera rotation animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createRotationAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera distance animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createDistanceAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera fov animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createFovAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
}
/**
 * Use hermite interpolation for import animation bezier curve parameter
 *
 * This has some loss of curve shape, but it converts animations reliably while maintaining a small amount of keyframes
 */
export declare class MmdCameraAnimationGroupHermiteBuilder implements IMmdCameraAnimationGroupBuilder {
    /**
     * Create mmd camera position animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createPositionAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera rotation animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createRotationAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera distance animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createDistanceAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera fov animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createFovAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
}
/**
 * Samples the bezier curve for every frame for import animation bezier curve parameter
 *
 * This method samples the bezier curve with 30 frames to preserve the shape of the curve as much as possible. However, it will use a lot of memory
 */
export declare class MmdCameraAnimationGroupSampleBuilder implements IMmdCameraAnimationGroupBuilder {
    /**
     * Create mmd camera position animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createPositionAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera rotation animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createRotationAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera distance animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createDistanceAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera fov animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createFovAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
}
/**
 * Use bezier interpolation for import animation bezier curve parameter
 *
 * This method uses the bezier curve as it is, But since babylon.js doesn't support bazier curves, we inject a bazier curve implementation to make it possible
 *
 * This method is not compatible with the Animation Curve Editor, but it allows you to import animation data completely lossless
 */
export declare class MmdCameraAnimationGroupBezierBuilder implements IMmdCameraAnimationGroupBuilder {
    /**
     * Create mmd camera position animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createPositionAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera rotation animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createRotationAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera distance animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createDistanceAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
    /**
     * Create mmd camera fov animation
     * @param rootName root animation name
     * @param mmdAnimationTrack mmd camera animation track
     * @returns babylon.js animation
     */
    createFovAnimation(rootName: string, mmdAnimationTrack: MmdCameraAnimationTrack): Animation;
}
