import type { AnimationAction, AnimationActionLoopStyles, AnimationMixer } from "three";
import { IAnimationComponent } from "../engine/engine_types.js";
import type { AnimatorControllerModel } from "../engine/extensions/NEEDLE_animator_controller_model.js";
import { AnimatorController } from "./AnimatorController.js";
import { Behaviour } from "./Component.js";
export declare class MixerEvent {
    type: string;
    action: AnimationAction;
    loopDelta: number;
    target: AnimationMixer;
}
export declare class PlayOptions {
    loop?: boolean | AnimationActionLoopStyles;
    clampWhenFinished?: boolean;
}
/** The Animator component is used to play animations on a GameObject. It is used in combination with an AnimatorController (which is a state machine for animations)
 * A new AnimatorController can be created from code via `AnimatorController.createFromClips`
 * @category Animation and Sequencing
 * @group Components
*/
export declare class Animator extends Behaviour implements IAnimationComponent {
    get isAnimationComponent(): boolean;
    applyRootMotion: boolean;
    hasRootMotion: boolean;
    keepAnimatorControllerStateOnDisable: boolean;
    set runtimeAnimatorController(val: AnimatorControllerModel | AnimatorController | undefined | null);
    get runtimeAnimatorController(): AnimatorController | undefined | null;
    /** The current state info of the animator.
     * If you just want to access the currently playing animation action you can use currentAction
     * @returns {AnimatorStateInfo} The current state info of the animator or null if no state is playing
    */
    getCurrentStateInfo(): import("../engine/extensions/NEEDLE_animator_controller_model.js").AnimatorStateInfo | null | undefined;
    /** The current action playing. It can be used to modify the action
     * @returns {AnimationAction | null} The current action playing or null if no state is playing
    */
    get currentAction(): AnimationAction | null;
    /** @returns {boolean} True if parameters have been changed */
    get parametersAreDirty(): boolean;
    private _parametersAreDirty;
    /** @returns {boolean} True if the animator has been changed */
    get isDirty(): boolean;
    private _isDirty;
    /**@deprecated use play() */
    Play(name: string | number, layer?: number, normalizedTime?: number, transitionDurationInSec?: number): void;
    /** Plays an animation on the animator
     * @param {string | number} name The name of the animation to play. Can also be the hash of the animation
     * @param {number} layer The layer to play the animation on. Default is -1
     * @param {number} normalizedTime The normalized time to start the animation at. Default is Number.NEGATIVE_INFINITY
     * @param {number} transitionDurationInSec The duration of the transition to the new animation. Default is 0
     * @returns {void}
     * */
    play(name: string | number, layer?: number, normalizedTime?: number, transitionDurationInSec?: number): void;
    /**@deprecated use reset */
    Reset(): void;
    /** Resets the animatorcontroller */
    reset(): void;
    /**@deprecated use setBool */
    SetBool(name: string | number, val: boolean): void;
    setBool(name: string | number, value: boolean): void;
    /**@deprecated use getBool */
    GetBool(name: string | number): boolean;
    getBool(name: string | number): boolean;
    toggleBool(name: string | number): void;
    /**@deprecated use setFloat */
    SetFloat(name: string | number, val: number): void;
    setFloat(name: string | number, val: number): void;
    /**@deprecated use getFloat */
    GetFloat(name: string | number): number;
    getFloat(name: string | number): number;
    /**@deprecated use setInteger */
    SetInteger(name: string | number, val: number): void;
    setInteger(name: string | number, val: number): void;
    /**@deprecated use getInteger */
    GetInteger(name: string | number): number;
    getInteger(name: string | number): number;
    /**@deprecated use setTrigger */
    SetTrigger(name: string | number): void;
    setTrigger(name: string | number): void;
    /**@deprecated use resetTrigger */
    ResetTrigger(name: string | number): void;
    resetTrigger(name: string | number): void;
    /**@deprecated use getTrigger */
    GetTrigger(name: string | number): void;
    getTrigger(name: string | number): boolean | undefined;
    /**@deprecated use isInTransition */
    IsInTransition(): boolean;
    /** @returns `true` if the animator is currently in a transition */
    isInTransition(): boolean;
    /**@deprecated use setSpeed */
    SetSpeed(speed: number): void;
    setSpeed(speed: number): void;
    /** Will generate a random speed between the min and max values and set it to the animatorcontroller */
    set minMaxSpeed(minMax: {
        x: number;
        y: number;
    });
    set minMaxOffsetNormalized(minMax: {
        x: number;
        y: number;
    });
    private _speed;
    private _normalizedStartOffset;
    private _animatorController?;
    awake(): void;
    private _initializeWithRuntimeAnimatorController?;
    initializeRuntimeAnimatorController(force?: boolean): void;
    onDisable(): void;
    onBeforeRender(): void;
}
