import type { ISceneLoaderProgressEvent } from "@babylonjs/core/Loading/sceneLoader";
import type { IFileRequest } from "@babylonjs/core/Misc/fileRequest";
import type { WebRequest } from "@babylonjs/core/Misc/webRequest";
import type { Scene } from "@babylonjs/core/scene";
import { MmdAnimation } from "./Animation/mmdAnimation";
import { VmdData, VmdObject } from "./Parser/vmdObject";
/**
 * VmdLoader is a loader that loads MMD animation data in VMD format
 *
 * VMD format is a binary format for MMD animation data
 */
export declare class VmdLoader {
    private readonly _scene;
    private _loggingEnabled;
    /** @internal */
    log: (message: string) => void;
    /** @internal */
    warn: (message: string) => void;
    /** @internal */
    error: (message: string) => void;
    /**
     * Create a new VmdLoader
     * @param scene Scene for loading file
     */
    constructor(scene: Scene);
    /**
     * Load MMD animation from VMD object
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param vmdObject VMD object or VMD object array
     * @param onLoad Callback function that is called when loading is complete
     * @param onProgress Callback function that is called while loading
     */
    loadFromVmdObject(name: string, vmdObject: VmdObject | VmdObject[], onLoad: (animation: MmdAnimation) => void, onProgress?: (event: ISceneLoaderProgressEvent) => void): void;
    /**
     * Load MMD animation from VMD object asynchronously
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param vmdObject VMD object or VMD object array
     * @param onProgress Callback function that is called while loading
     * @returns Animation data
     */
    loadFromVmdObjectAsync(name: string, vmdObject: VmdObject | VmdObject[], onProgress?: (event: ISceneLoaderProgressEvent) => void): Promise<MmdAnimation>;
    /**
     * Load MMD animation data from VMD data
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param vmdData VMD data or array of VMD data
     * @param onLoad Callback function that is called when load is complete
     * @param onProgress Callback function that is called while loading
     */
    loadFromVmdData(name: string, vmdData: VmdData | VmdData[], onLoad: (animation: MmdAnimation) => void, onProgress?: (event: ISceneLoaderProgressEvent) => void): void;
    /**
     * Load MMD animation data from VMD data asynchronously
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param vmdData VMD data or array of VMD data
     * @param onProgress Callback function that is called while loading
     * @returns Animation data
     */
    loadFromVmdDataAsync(name: string, vmdData: VmdData | VmdData[], onProgress?: (event: ISceneLoaderProgressEvent) => void): Promise<MmdAnimation>;
    /**
     * Load MMD animation data from VMD array buffer
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param buffer VMD array buffer or array of VMD array buffer
     * @param onLoad Callback function that is called when load is complete
     * @param onProgress Callback function that is called while loading
     * @param onError Callback function that is called when loading is failed
     */
    loadFromBuffer(name: string, buffer: ArrayBufferLike | ArrayBufferLike[], onLoad: (animation: MmdAnimation) => void, onProgress?: (event: ISceneLoaderProgressEvent) => void, onError?: (event: Error) => void): void;
    /**
     * Load MMD animation data from VMD array buffer asynchronously
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param buffer VMD array buffer or array of VMD array buffer
     * @param onProgress Callback function that is called while loading
     * @returns Animation data
     */
    loadFromBufferAsync(name: string, buffer: ArrayBufferLike | ArrayBufferLike[], onProgress?: (event: ISceneLoaderProgressEvent) => void): Promise<MmdAnimation>;
    /**
     * Load MMD animation data from VMD file or URL
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param fileOrUrl VMD file or URL or array of VMD file or URL
     * @param onLoad Callback function that is called when load is complete
     * @param onProgress Callback function that is called while loading
     * @param onError Callback function that is called when loading is failed
     * @returns File request
     */
    load(name: string, fileOrUrl: File | string | File[] | string[], onLoad: (animation: MmdAnimation) => void, onProgress?: (event: ISceneLoaderProgressEvent) => void, onError?: ((request?: WebRequest | undefined, exception?: Error | undefined) => void) | undefined): typeof fileOrUrl extends any[] ? IFileRequest[] : IFileRequest;
    /**
     * Load MMD animation data from VMD file or URL asynchronously
     *
     * If you put multiple motions, they are merged into one animation
     *
     * If two keyframes track and frame numbers are the same, the motion keyframe positioned later in the array is used
     * @param name Animation name
     * @param fileOrUrl VMD file or URL or array of VMD file or URL
     * @param onProgress Callback function that is called while loading
     * @returns Animation data
     */
    loadAsync(name: string, fileOrUrl: File | string | File[] | string[], onProgress?: (event: ISceneLoaderProgressEvent) => void): Promise<MmdAnimation>;
    /**
     * Enable or disable debug logging (default: false)
     */
    get loggingEnabled(): boolean;
    set loggingEnabled(value: boolean);
    private _logEnabled;
    private _logDisabled;
    private _warnEnabled;
    private _warnDisabled;
    private _errorEnabled;
    private _errorDisabled;
}
