import type { Nullable } from "@babylonjs/core/types";
import type { IMmdPropertyAnimationTrack } from "../../../Loader/Animation/IMmdAnimationTrack";
import type { MmdAnimation } from "../../../Loader/Animation/mmdAnimation";
import { MmdAnimationBase } from "../../../Loader/Animation/mmdAnimationBase";
import type { IDisposeObservable } from "../../IDisposeObserable";
import type { MmdWasmInstance } from "../mmdWasmInstance";
import { AnimationPoolWrapper } from "./animationPoolWrapper";
import { MmdWasmBoneAnimationTrack, MmdWasmMorphAnimationTrack, MmdWasmMovableBoneAnimationTrack } from "./mmdWasmAnimationTrack";
/**
 * MmdWasmAnimation is a Mmd animation data container that allocates data in WASM memory
 *
 * It is used to pass animation data to WASM
 *
 * IMPORTANT: The typed arrays in the track are pointers to wasm memory.
 * It is important to note that when wasm memory is resized, the typed arrays will no longer be valid.
 * It is designed to always return a valid typed array at the time of a get,
 * so as long as you don't copy the typed array references inside this container elsewhere, you are safe.
 */
export declare class MmdWasmAnimation extends MmdAnimationBase<MmdWasmBoneAnimationTrack, MmdWasmMovableBoneAnimationTrack, MmdWasmMorphAnimationTrack, IMmdPropertyAnimationTrack> {
    /**
     * Pointer to the animation data in wasm memory
     */
    readonly ptr: number;
    /**
     * @internal
     */
    readonly _poolWrapper: AnimationPoolWrapper;
    private _disposed;
    private readonly _bindedDispose;
    private readonly _disposeObservableObject;
    /**
     * Create a MmdWasmAnimation instance
     *
     * In general disposeObservable should be `Scene` of Babylon.js
     *
     * @param disposeObservable Objects that limit the lifetime of this instance
     */
    constructor(mmdAnimation: MmdAnimation, wasmInstance: MmdWasmInstance, disposeObservable: Nullable<IDisposeObservable>);
    /**
     * Dispose this instance
     *
     * all typed arrays in this instance will be invalid after this method is called
     */
    dispose(): void;
    /**
     * Whether this instance is disposed
     */
    get isDisposed(): boolean;
}
