playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
167 lines (166 loc) • 5.97 kB
TypeScript
/**
* A curve set is a collection of curves.
*
* @category Math
*/
export class CurveSet {
/**
* Creates a new CurveSet instance.
*
* @param {...*} args - Variable arguments with several possible formats:
* - No arguments: Creates a CurveSet with a single default curve.
* - Single number argument: Creates a CurveSet with the specified number of default curves.
* - Single array argument: An array of arrays, where each sub-array contains keys (pairs of
* numbers with the time first and value second).
* - Multiple arguments: Each argument becomes a separate curve.
* @example
* // Create from an array of arrays of keys
* const curveSet = new CurveSet([
* [
* 0, 0, // At 0 time, value of 0
* 0.33, 2, // At 0.33 time, value of 2
* 0.66, 2.6, // At 0.66 time, value of 2.6
* 1, 3 // At 1 time, value of 3
* ],
* [
* 0, 34,
* 0.33, 35,
* 0.66, 36,
* 1, 37
* ]
* ]);
*/
constructor(...args: any[]);
/**
* The array of curves in the set.
*
* @type {Curve[]}
*/
curves: Curve[];
/**
* @type {number}
* @private
*/
private _type;
/**
* Gets the number of curves in the curve set.
*
* @type {number}
*/
get length(): number;
/**
* Sets the interpolation scheme applied to all curves in the curve set. Can be:
*
* - {@link CURVE_LINEAR}
* - {@link CURVE_SMOOTHSTEP}
* - {@link CURVE_SPLINE}
* - {@link CURVE_STEP}
*
* Defaults to {@link CURVE_SMOOTHSTEP}.
*
* @type {number}
*/
set type(value: number);
/**
* Gets the interpolation scheme applied to all curves in the curve set.
*
* @type {number}
*/
get type(): number;
/**
* Return a specific curve in the curve set.
*
* @param {number} index - The index of the curve to return.
* @returns {Curve} The curve at the specified index.
* @example
* const curveSet = new CurveSet([[0, 0, 1, 1], [0, 0, 1, 0.5]]);
* const curve = curveSet.get(0); // returns the first curve
*/
get(index: number): Curve;
/**
* Appends a new curve to the curve set. The new curve adopts the curve set's current
* {@link CurveSet#type} interpolation scheme, so that all curves in the set continue to share
* the same type.
*
* @param {number[]} [data] - An array of keys (pairs of numbers with the time first and value
* second) for the new curve.
* @returns {Curve} The newly created curve.
* @example
* const curveSet = new CurveSet([[0, 0, 1, 1]]);
* const curve = curveSet.add([0, 0, 1, 0.5]); // append a second curve
*/
add(data?: number[]): Curve;
/**
* Removes a curve from the curve set.
*
* @param {number|Curve} indexOrCurve - The index of the curve to remove, or the curve instance
* itself.
* @returns {Curve|null} The removed curve, or null if it was not found.
* @example
* const curveSet = new CurveSet([[0, 0, 1, 1], [0, 0, 1, 0.5]]);
* curveSet.remove(0); // remove by index
* curveSet.remove(curveSet.get(0)); // or remove by reference
*/
remove(indexOrCurve: number | Curve): Curve | null;
/**
* Removes all keys from every curve in the set, while keeping the curves themselves. The number
* of curves is unchanged, so {@link CurveSet#value} still returns an array of the same length.
*
* @returns {this} The curve set instance.
* @example
* const curveSet = new CurveSet([[0, 0, 1, 1], [0, 0, 1, 0.5]]);
* curveSet.clearKeys(); // both curves are now empty, but the set still has 2 curves
*/
clearKeys(): this;
/**
* Removes all curves from the curve set, leaving it empty.
*
* @returns {this} The curve set instance.
* @example
* const curveSet = new CurveSet([[0, 0, 1, 1], [0, 0, 1, 0.5]]);
* curveSet.clear(); // the set now has no curves
*/
clear(): this;
/**
* Returns the interpolated value of all curves in the curve set at the specified time.
*
* @param {number} time - The time at which to calculate the value.
* @param {number[]} [result] - The interpolated curve values at the specified time. If this
* parameter is not supplied, the function allocates a new array internally to return the
* result.
* @returns {number[]} The interpolated curve values at the specified time.
* @example
* const curveSet = new CurveSet([[0, 0, 1, 1], [0, 0, 1, 0.5]]);
* const values = curveSet.value(0.5); // returns interpolated values for all curves at time 0.5
*/
value(time: number, result?: number[]): number[];
/**
* Returns a clone of the specified curve set object.
*
* @returns {this} A clone of the specified curve set.
* @example
* const curveSet = new CurveSet([[0, 0, 1, 1]]);
* const clonedCurveSet = curveSet.clone();
*/
clone(): this;
/**
* Sample the curveset at regular intervals over the range [0..1].
*
* @param {number} precision - The number of samples to return.
* @returns {Float32Array} The set of quantized values.
* @ignore
*/
quantize(precision: number): Float32Array;
/**
* Sample the curveset at regular intervals over the range [0..1] and clamp the result to min
* and max.
*
* @param {number} precision - The number of samples to return.
* @param {number} min - The minimum output value.
* @param {number} max - The maximum output value.
* @returns {Float32Array} The set of quantized values.
* @ignore
*/
quantizeClamped(precision: number, min: number, max: number): Float32Array;
}
import { Curve } from './curve.js';