import type { Material } from "@babylonjs/core/Materials/material"; import type { Nullable } from "@babylonjs/core/types"; import { MmdModelAnimationContainer } from "../../Loader/Animation/mmdModelAnimationContainer"; import type { ILogger } from "../ILogger"; import type { IMmdModel } from "../IMmdModel"; import type { IMmdRuntimeLinkedBone } from "../IMmdRuntimeLinkedBone"; import type { MmdMorphControllerBase } from "../mmdMorphControllerBase"; import type { IMmdBindableModelAnimation } from "./IMmdBindableAnimation"; import type { BodyIndices, IMmdRuntimeModelAnimationWithBindingInfo, MorphIndices } from "./IMmdRuntimeAnimation"; /** * Mmd runtime model animation that use animation container of babylon.js * * An object with mmd animation group and model binding information */ export declare class MmdRuntimeModelAnimationContainer implements IMmdRuntimeModelAnimationWithBindingInfo { /** * The animation data */ readonly animation: MmdModelAnimationContainer; /** * Bone bind index map */ readonly boneBindIndexMap: readonly Nullable[]; /** * Movable bone bind index map */ readonly movableBoneBindIndexMap: readonly Nullable[]; private readonly _morphController; /** * Morph bind index map */ readonly morphBindIndexMap: readonly Nullable[]; private readonly _meshes; /** * IK solver bind index map */ readonly ikSolverBindIndexMap: Int32Array; private readonly _ikSolverStates; /** * Bone to body bind index map */ readonly boneToBodyBindIndexMap: readonly Nullable[]; private readonly _rigidBodyStates; private _materialRecompileInduceInfo; private readonly _bonePositionAnimationStates; private readonly _boneRotationAnimationStates; private readonly _morphAnimationStates; private readonly _propertyAnimationStates; private readonly _visibilityAnimationState; private readonly _bonephysicsToggleAnimationStates; private constructor(); private static readonly _BonePosition; /** * Update animation * @param frameTime Frame time in 30fps */ animate(frameTime: number): void; /** * 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 updateMorphTarget Whether to update morph target manager numMaxInfluencers * @param logger logger */ induceMaterialRecompile(updateMorphTarget: boolean, logger?: ILogger | undefined): void; /** * Bind animation to model and prepare material for morph animation * @param animationContainer Animation to bind * @param model Bind target * @param retargetingMap Animation bone name to model bone name map * @param logger Logger * @return MmdRuntimeModelAnimationContainer instance */ static Create(animationContainer: MmdModelAnimationContainer, model: IMmdModel, retargetingMap?: { [key: string]: string; }, logger?: ILogger): MmdRuntimeModelAnimationContainer; /** * 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: readonly Material[], morphController: MmdMorphControllerBase, morphIndices: readonly Nullable[], logger?: ILogger) => void; } declare module "../../Loader/Animation/mmdModelAnimationContainer" { interface MmdModelAnimationContainer extends IMmdBindableModelAnimation { } }