import { EngineObject } from "../base/EngineObject";
import { Component } from "../Component";
import { ComponentConstructor, Entity } from "../Entity";
import { AnimationClipCurveBinding } from "./AnimationClipCurveBinding";
import { AnimationCurve } from "./animationCurve/AnimationCurve";
import { AnimationEvent } from "./AnimationEvent";
import { KeyframeValueType } from "./Keyframe";
/**
 * Stores keyframe based animations.
 */
export declare class AnimationClip extends EngineObject {
    readonly name: string;
    private _length;
    private _events;
    /**
     * Animation events for this animation clip.
     */
    get events(): Readonly<AnimationEvent[]>;
    /**
     * Animation curve bindings for this animation clip.
     */
    get curveBindings(): Readonly<AnimationClipCurveBinding[]>;
    /**
     * Animation length in seconds.
     */
    get length(): number;
    /**
     * @param name - The AnimationClip's name
     */
    constructor(name: string);
    /**
     * Adds an animation event to the clip.
     * @param functionName - The name of the method called in the script
     * @param time - The time when the event be triggered
     * @param parameter - The parameter that is stored in the event and will be sent to the function
     */
    addEvent(functionName: string, time: number, parameter: Object): void;
    /**
     * Adds an animation event to the clip.
     * @param event - The animation event
     */
    addEvent(event: AnimationEvent): void;
    /**
     * Clears all events from the clip.
     */
    clearEvents(): void;
    /**
     * Add curve binding for the clip.
     * @param entityPath - Path to the game object this curve applies to. The entityPath is formatted similar to a pathname, e.g. "/root/spine/leftArm"
     * @param componentType - The class type of the component that is animated
     * @param propertyPath - The path to the property being animated, support "a.b" and "a.b[x]" description mode
     * @param curve - The animation curve
     */
    addCurveBinding<T extends Component>(entityPath: string, componentType: ComponentConstructor<T>, propertyPath: string, curve: AnimationCurve<KeyframeValueType>): void;
    /**
     * Add curve binding for the clip.
     * @param entityPath - Path to the game object this curve applies to. The entityPath is formatted similar to a pathname, e.g. "/root/spine/leftArm"
     * @param componentType - The class type of the component that is animated
     * @param setPropertyPath - The path to set the property being animated, support "a.b", "a.b[x]" and "a.b('c', 0, $value)" description mode
     * @param getPropertyPath - The path to get the value when being animated, support "a.b", "a.b[x]" and "a.b('c', 0, $value)" description mode
     * @param curve - The animation curve
     */
    addCurveBinding<T extends Component>(entityPath: string, componentType: ComponentConstructor<T>, setPropertyPath: string, getPropertyPath: string, curve: AnimationCurve<KeyframeValueType>): void;
    /**
     * Add curve binding for the clip.
     * @param entityPath - Path to the game object this curve applies to. The entityPath is formatted similar to a pathname, e.g. "/root/spine/leftArm"
     * @param componentType - The type index of the component that is animated
     * @param componentIndex - The class type of the component that is animated
     * @param propertyPath - The path to the property being animated, support "a.b" and "a.b[x]" description mode
     * @param curve - The animation curve
     */
    addCurveBinding<T extends Component>(entityPath: string, componentType: ComponentConstructor<T>, componentIndex: number, propertyPath: string, curve: AnimationCurve<KeyframeValueType>): void;
    /**
     * Add curve binding for the clip.
     * @param entityPath - Path to the game object this curve applies to. The entityPath is formatted similar to a pathname, e.g. "/root/spine/leftArm"
     * @param componentType - The class type of the component that is animated
     * @param componentIndex - The class type of the component that is animated
     * @param setPropertyPath - The path to set the property being animated, support "a.b", "a.b[x]" and "a.b('c', 0, $value)" description mode
     * @param getPropertyPath - The path to get the value when being animated, support "a.b", "a.b[x]" and "a.b('c', 0, $value)" description mode
     * @param curve - The animation curve
     */
    addCurveBinding<T extends Component>(entityPath: string, componentType: ComponentConstructor<T>, componentIndex: number, setPropertyPath: string, getPropertyPath: string, curve: AnimationCurve<KeyframeValueType>): void;
    /**
     * Clears all curve bindings from the clip.
     */
    clearCurveBindings(): void;
    /**
     * Samples an animation at a given time.
     * @param entity - The animated entity
     * @param time - The time to sample an animation
     */
    sampleAnimation(entity: Entity, time: number): void;
}
