/**
 * Describes change of a numeric value over time. Values are stored in {@link Keyframe}s, interpolation is defined by tangents on keyframes
 * Inspired by unity's AnimationCurve, see https://docs.unity3d.com/ScriptReference/AnimationCurve.html
 */
export class AnimationCurve {
    /**
     *
     * @param {Keyframe[]} keys
     * @returns {AnimationCurve}
     */
    static from(keys: Keyframe[]): AnimationCurve;
    /**
     *
     * @param {number} [timeStart]
     * @param {number} [valueStart]
     * @param {number} [timeEnd]
     * @param {number} [valueEnd]
     * @return {AnimationCurve}
     */
    static easeInOut(timeStart?: number, valueStart?: number, timeEnd?: number, valueEnd?: number): AnimationCurve;
    /**
     *
     * @param {number} [timeStart]
     * @param {number} [timeEnd]
     * @param {number} [value]
     * @return {AnimationCurve}
     */
    static constant(timeStart?: number, timeEnd?: number, value?: number): AnimationCurve;
    /**
     *
     * @param {number} [timeStart]
     * @param {number} [valueStart]
     * @param {number} [timeEnd]
     * @param {number} [valueEnd]
     * @return {AnimationCurve}
     */
    static linear(timeStart?: number, valueStart?: number, timeEnd?: number, valueEnd?: number): AnimationCurve;
    /**
     * @readonly
     * @type {Keyframe[]}
     */
    readonly keys: Keyframe[];
    /**
     *
     * @param {Keyframe} key
     * @returns {number} key index where it was inserted at
     */
    add(key: Keyframe): number;
    /**
     *
     * @param {Keyframe[]} keys
     */
    addMany(keys: Keyframe[]): void;
    /**
     *
     * @param {Keyframe} key
     * @returns {boolean}
     */
    remove(key: Keyframe): boolean;
    /**
     * Remove all keys
     */
    clear(): void;
    /**
     * Number of keys
     * @returns {number}
     */
    get length(): number;
    /**
     * Time of the first keyframe, returns 0 if there are no keys
     * @returns {number}
     */
    get start_time(): number;
    /**
     * Time of the last chronological key in the curve
     * @return {number}
     */
    get end_time(): number;
    /**
     * Time difference between first and last frame
     * @returns {number}
     */
    get duration(): number;
    /**
     *
     * @param {number} time time in seconds
     * @return {number}
     */
    evaluate(time: number): number;
    /**
     * Set tangents of a key to match surrounding keys
     * Produces a smoother looking curve
     * @param {number} index index of keyframe
     */
    alignTangents(index: number): void;
    /**
     *
     * @param {number} index Index of keyframe to be affected
     * @param {number} weight How much smoothing to apply, 1 will be fully smoothed out and 0 will have no effect at all. Value between 0 and 1
     */
    smoothTangents(index: number, weight: number): void;
    smoothAllTangents(): void;
    /**
     *
     * @param {AnimationCurve} other
     * @return {boolean}
     */
    equals(other: AnimationCurve): boolean;
    /**
     * The copy is deep
     * @param {AnimationCurve} other
     */
    copy(other: AnimationCurve): void;
    /**
     *
     * @return {AnimationCurve}
     */
    clone(): AnimationCurve;
    /**
     *
     * @return {number}
     */
    hash(): number;
    toJSON(): {
        keys: any[];
    };
    fromJSON({ keys }: {
        keys?: any[];
    }): void;
}
import { Keyframe } from "./Keyframe.js";
//# sourceMappingURL=AnimationCurve.d.ts.map