import type { Material } from "@babylonjs/core/Materials/material"; import type { Nullable } from "@babylonjs/core/types"; import { MmdAnimation } from "../../Loader/Animation/mmdAnimation"; import type { ILogger } from "../../Loader/Parser/ILogger"; import type { IIkSolver } from "../ikSolver"; import type { IMmdRuntimeLinkedBone } from "../IMmdRuntimeLinkedBone"; import type { MmdModel } from "../mmdModel"; import type { MmdMorphController } from "../mmdMorphController"; import type { IMmdBindableModelAnimation } from "./IMmdBindableAnimation"; import type { IMmdRuntimeModelAnimationWithBindingInfo } from "./IMmdRuntimeAnimation"; import { MmdRuntimeAnimation } from "./mmdRuntimeAnimation"; type MorphIndices = readonly number[]; /** * Mmd runtime model animation * * An object with mmd animation and model binding information */ export declare class MmdRuntimeModelAnimation extends MmdRuntimeAnimation implements IMmdRuntimeModelAnimationWithBindingInfo { /** * The animation data */ readonly animation: MmdAnimation; /** * Bone bind index map */ readonly boneBindIndexMap: readonly Nullable[]; /** * Moveable bone bind index map */ readonly moveableBoneBindIndexMap: readonly Nullable[]; private readonly _morphController; /** * Morph bind index map */ readonly morphBindIndexMap: readonly Nullable[]; private readonly _mesh; /** * IK solver bind index map */ readonly ikSolverBindIndexMap: readonly Nullable[]; private constructor(); private static readonly _BonePositionA; private static readonly _BonePositionB; private static readonly _BonePosition; private static readonly _BoneRotationA; private static readonly _BoneRotationB; /** * Update animation * @param frameTime frame time in 30fps */ animate(frameTime: number): void; private _materialRecompileInduced; /** * Induce material recompile * * This method must run once before the animation runs * * This method prevents frame drop during animation by inducing properties to be recompiled that are used in morph animation * @param logger logger */ induceMaterialRecompile(logger?: ILogger): void; /** * Bind animation to model and prepare material for morph animation * @param animation Animation to bind * @param model Bind target * @param retargetingMap Model bone name to animation bone name map * @param logger Logger * @return MmdRuntimeModelAnimation instance */ static Create(animation: MmdAnimation, model: MmdModel, retargetingMap?: { [key: string]: string; }, logger?: ILogger): MmdRuntimeModelAnimation; /** * Induce material recompile * * This method prevents frame drop during animation by inducing properties to be recompiled that are used in morph animation * * This method is exposed as public because it must be overrideable * * If you are using a material other than `MmdStandardMaterial`, you must implement this method yourself * @param materials Materials * @param morphController Morph controller * @param morphIndices Morph indices to induce recompile * @param logger logger */ static InduceMaterialRecompile: (materials: Material[], morphController: MmdMorphController, morphIndices: readonly Nullable[], logger?: ILogger) => void; } declare module "../../Loader/Animation/mmdAnimation" { interface MmdAnimation extends IMmdBindableModelAnimation { } } export {};