declare type DerivedVecType = N extends 2 ? Vec2 : N extends 3 ? Vec3 : N extends 4 ? Vec4 : Vec; declare type FixedLengthArray = N extends 1 ? [T] : N extends 2 ? [T, T] : N extends 3 ? [T, T, T] : N extends 4 ? [T, T, T, T] : N extends 5 ? [T, T, T, T, T] : number[]; declare class Vec, VecType extends Vec = DerivedVecType> { protected _v: DataType; constructor(data: DataType); get v(): DataType; set v(data: DataType); Add(value: Vec | number): VecType; Sub(value: Vec | number): VecType; Mul(value: Vec | number): VecType; Div(value: Vec | number): VecType; Neg(): VecType; Equal(value: Vec): boolean; Dot(value: Vec): number; Length(): number; LengthSq(): number; Normalize(): VecType; Clone(): VecType; } export declare class Vec2 extends Vec<2> { constructor(x?: number, y?: number); static FromNative(vec: Vec2): Vec2; get x(): number; get y(): number; get r(): number; get g(): number; set x(r: number); set y(r: number); set r(r: number); set g(r: number); Cross(r: Vec2): number; Reflect(r: Vec2): Vec2; static get Zero(): Vec2; static get One(): Vec2; static get NegOne(): Vec2; static get UnitX(): Vec2; static get UnitY(): Vec2; static get NegUnitX(): Vec2; static get NegUnitY(): Vec2; } export declare class Vec3 extends Vec<3> { constructor(x?: number, y?: number, z?: number); static FromNative(vec: Vec3): Vec3; get x(): number; get y(): number; get z(): number; get r(): number; get g(): number; get b(): number; set x(r: number); set y(r: number); set z(r: number); set r(r: number); set g(r: number); set b(r: number); get xy(): Vec2; get rg(): Vec2; get xz(): Vec2; get rb(): Vec2; get yz(): Vec2; get gb(): Vec2; set xy(r: Vec2); set xz(r: Vec2); set yz(r: Vec2); set rg(r: Vec2); set rb(r: Vec2); set gb(r: Vec2); Cross(r: Vec3): Vec3; Reflect(r: Vec3): Vec3; static get Zero(): Vec3; static get One(): Vec3; static get NegOne(): Vec3; static get UnitX(): Vec3; static get UnitY(): Vec3; static get UnitZ(): Vec3; static get NegUnitX(): Vec3; static get NegUnitY(): Vec3; static get NegUnitZ(): Vec3; } export declare class Vec4 extends Vec<4> { constructor(x?: number, y?: number, z?: number, w?: number); static FromNative(vec: Vec4): Vec4; get x(): number; get y(): number; get z(): number; get w(): number; get r(): number; get g(): number; get b(): number; get a(): number; set x(r: number); set y(r: number); set z(r: number); set w(r: number); set r(r: number); set g(r: number); set b(r: number); set a(r: number); get xy(): Vec2; get xz(): Vec2; get xw(): Vec2; get yz(): Vec2; get yw(): Vec2; get zw(): Vec2; get rg(): Vec2; get rb(): Vec2; get ra(): Vec2; get gb(): Vec2; get ga(): Vec2; get ba(): Vec2; get xyz(): Vec3; get xyw(): Vec3; get xzw(): Vec3; get yzw(): Vec3; get rgb(): Vec3; get rga(): Vec3; get rba(): Vec3; get gba(): Vec3; set xy(r: Vec2); set xz(r: Vec2); set xw(r: Vec2); set yz(r: Vec2); set yw(r: Vec2); set zw(r: Vec2); set rg(r: Vec2); set rb(r: Vec2); set ra(r: Vec2); set gb(r: Vec2); set ga(r: Vec2); set ba(r: Vec2); set xyz(r: Vec3); set xyw(r: Vec3); set xzw(r: Vec3); set yzw(r: Vec3); set rgb(r: Vec3); set rga(r: Vec3); set rba(r: Vec3); set gba(r: Vec3); static get Zero(): Vec4; static get One(): Vec4; static get NegOne(): Vec4; static get UnitX(): Vec4; static get UnitY(): Vec4; static get UnitZ(): Vec4; static get UnitW(): Vec4; static get NegUnitX(): Vec4; static get NegUnitY(): Vec4; static get NegUnitZ(): Vec4; static get NegUnitW(): Vec4; } export {};