import { Animation } from "@babylonjs/core/Animations/animation"; import { AnimationGroup } from "@babylonjs/core/Animations/animationGroup"; import type { IMmdCamera } from "../../Runtime/IMmdCamera"; 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 MmdCameraAnimationContainer implements IMmdAnimation { /** * Animation name for identification */ readonly name: string; /** * Position animation track for `MmdCamera.target` */ 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: IMmdCameraAnimationContainerBuilder); /** * 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: IMmdCamera): AnimationGroup; } /** * Mmd camera animation builder for constructing mmd camera animation group */ export interface IMmdCameraAnimationContainerBuilder { /** * 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 MmdCameraAnimationContainerHermiteBuilder implements IMmdCameraAnimationContainerBuilder { /** * 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 MmdCameraAnimationContainerSampleBuilder implements IMmdCameraAnimationContainerBuilder { /** * 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 MmdCameraAnimationContainerBezierBuilder implements IMmdCameraAnimationContainerBuilder { /** * 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; }