import type { Material } from "@babylonjs/core/Materials/material"; import type { Nullable } from "@babylonjs/core/types"; import { MmdModelAnimationGroup } from "../../Loader/Animation/mmdModelAnimationGroup"; import type { IIkSolver } from "../ikSolver"; import type { ILogger } from "../ILogger"; 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"; type MorphIndices = readonly number[]; /** * Mmd runtime model animation that use animation container of babylon.js * * An object with mmd animation group and model binding information */ export declare class MmdRuntimeModelAnimationGroup implements IMmdRuntimeModelAnimationWithBindingInfo { /** * The animation data */ readonly animation: MmdModelAnimationGroup; /** * 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 readonly _bonePositionAnimationStates; private readonly _boneRotationAnimationStates; private readonly _morphAnimationStates; private readonly _propertyAnimationStates; private readonly _visibilityAnimationState; private constructor(); private static readonly _BonePosition; /** * 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 | undefined): void; /** * Bind animation to model and prepare material for morph animation * @param animationGroup Animation to bind * @param model Bind target * @param retargetingMap Model bone name to animation bone name map * @param logger Logger * @return MmdRuntimeModelAnimationGroup instance */ static Create(animationGroup: MmdModelAnimationGroup, model: MmdModel, retargetingMap?: { [key: string]: string; }, logger?: ILogger): MmdRuntimeModelAnimationGroup; /** * 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/mmdModelAnimationGroup" { interface MmdModelAnimationGroup extends IMmdBindableModelAnimation { } } export {};