import { Vec4Arg, Vec4Type } from './vec4'; import { Mat4Arg } from './mat4'; import { BaseArgType } from './types'; export { Vec4Arg, Vec4Type }; type Vec4Ctor = new (n: number) => T; /** * Generates am typed API for Vec4 * */ declare function getAPIImpl(Ctor: Vec4Ctor): { create: (x?: number, y?: number, z?: number, w?: number) => VecType; fromValues: (x?: number, y?: number, z?: number, w?: number) => VecType; set: (x: number, y: number, z: number, w: number, dst?: T) => T; ceil: (v: Vec4Arg, dst?: T) => T; floor: (v: Vec4Arg, dst?: T) => T; round: (v: Vec4Arg, dst?: T) => T; clamp: (v: Vec4Arg, min?: number, max?: number, dst?: T) => T; add: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; addScaled: (a: Vec4Arg, b: Vec4Arg, scale: number, dst?: T) => T; subtract: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; sub: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; equalsApproximately: (a: Vec4Arg, b: Vec4Arg) => boolean; equals: (a: Vec4Arg, b: Vec4Arg) => boolean; lerp: (a: Vec4Arg, b: Vec4Arg, t: number, dst?: T) => T; lerpV: (a: Vec4Arg, b: Vec4Arg, t: Vec4Arg, dst?: T) => T; max: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; min: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; mulScalar: (v: Vec4Arg, k: number, dst?: T) => T; scale: (v: Vec4Arg, k: number, dst?: T) => T; divScalar: (v: Vec4Arg, k: number, dst?: T) => T; inverse: (v: Vec4Arg, dst?: T) => T; invert: (v: Vec4Arg, dst?: T) => T; dot: (a: Vec4Arg, b: Vec4Arg) => number; length: (v: Vec4Arg) => number; len: (v: Vec4Arg) => number; lengthSq: (v: Vec4Arg) => number; lenSq: (v: Vec4Arg) => number; distance: (a: Vec4Arg, b: Vec4Arg) => number; dist: (a: Vec4Arg, b: Vec4Arg) => number; distanceSq: (a: Vec4Arg, b: Vec4Arg) => number; distSq: (a: Vec4Arg, b: Vec4Arg) => number; normalize: (v: Vec4Arg, dst?: T) => T; negate: (v: Vec4Arg, dst?: T) => T; copy: (v: Vec4Arg, dst?: T) => T; clone: (v: Vec4Arg, dst?: T) => T; multiply: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; mul: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; divide: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; div: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; zero: (dst?: T) => T; transformMat4: (v: Vec4Arg, m: Mat4Arg, dst?: T) => T; setLength: (a: Vec4Arg, len: number, dst?: T) => T; truncate: (a: Vec4Arg, maxLen: number, dst?: T) => T; midpoint: (a: Vec4Arg, b: Vec4Arg, dst?: T) => T; }; type API = ReturnType>; /** * * Vec4 math functions. * * Almost all functions take an optional `newDst` argument. If it is not passed in the * functions will create a new `Vec4`. In other words you can do this * * const v = vec4.cross(v1, v2); // Creates a new Vec4 with the cross product of v1 x v2. * * or * * const v = vec4.create(); * vec4.cross(v1, v2, v); // Puts the cross product of v1 x v2 in v * * The first style is often easier but depending on where it's used it generates garbage where * as there is almost never allocation with the second style. * * It is always safe to pass any vector as the destination. So for example * * vec4.cross(v1, v2, v1); // Puts the cross product of v1 x v2 in v1 * */ export declare function getAPI(Ctor: Vec4Ctor): API;