import type { Material } from "@babylonjs/core/Materials/material";
import type { Nullable } from "@babylonjs/core/types";
import { MmdModelAnimationGroup } from "../../Loader/Animation/mmdModelAnimationGroup";
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 { 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<IMmdRuntimeLinkedBone>[];
    /**
     * Movable bone bind index map
     */
    readonly movableBoneBindIndexMap: readonly Nullable<IMmdRuntimeLinkedBone>[];
    private readonly _morphController;
    /**
     * Morph bind index map
     */
    readonly morphBindIndexMap: readonly Nullable<MorphIndices>[];
    private readonly _meshes;
    /**
     * IK solver bind index map
     */
    readonly ikSolverBindIndexMap: Int32Array;
    private readonly _ikSolverStates;
    private _materialRecompileInduceInfo;
    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;
    /**
     * 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 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: IMmdModel, 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: readonly Material[], morphController: MmdMorphControllerBase, morphIndices: readonly Nullable<MorphIndices>[], logger?: ILogger) => void;
}
declare module "../../Loader/Animation/mmdModelAnimationGroup" {
    interface MmdModelAnimationGroup extends IMmdBindableModelAnimation<MmdRuntimeModelAnimationGroup> {
    }
}
export {};
