@ntf/math 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,50 +1,650 @@
1
- declare function stringify<V>(value: V): string;
1
+ /**
2
+ * All valid types of JavaScript you can get from `typeof`
3
+ */
4
+ type JavaScriptTypes = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
5
+ /**
6
+ * A JavaScript function that can be typed (or not)
7
+ */
8
+ type JavaScriptFunction<Args extends Array<any> = Array<any>, ReturnType extends any = any> = (...args: Args) => ReturnType;
9
+ /**
10
+ * A mapped type for getting the type of a JavaScript value
11
+ */
12
+ type JavaScriptTypeMap = {
13
+ "string": string;
14
+ "number": number;
15
+ "bigint": bigint;
16
+ "boolean": boolean;
17
+ "symbol": symbol;
18
+ "undefined": undefined;
19
+ "object": object;
20
+ "function": JavaScriptFunction;
21
+ };
22
+ /**
23
+ * Any kind of JavaScript number
24
+ */
25
+ type JavaScriptNumber = number | bigint;
26
+ /**
27
+ * A array that has a fixed length
28
+ */
29
+ type FixedArray<T, Length extends number> = Array<T> & {
30
+ length: Length;
31
+ };
32
+ /**
33
+ * A value that might look like a hex value
34
+ */
35
+ type HexLike = `$${string}` | `#${string}` | `0x${string}` | string;
36
+ /**
37
+ * A predicate function type for verifing types
38
+ */
39
+ type Predicate<T> = (a: unknown) => a is T;
40
+ /**
41
+ * Check if `value` is a finite valid number
42
+ * @param value A value
43
+ */
44
+ declare function checkNumber(value: unknown): value is number;
45
+ /**
46
+ * Retrieve the value of a hex string
47
+ * @param string A string
48
+ */
49
+ declare function getHexValue(string: string): string;
50
+ /**
51
+ * Check if `value` is a hex value
52
+ * @param value A value
53
+ */
54
+ declare function checkHex(value: unknown): value is HexLike;
55
+ /**
56
+ * Check if `value` is a string with content
57
+ * @param value A value
58
+ */
59
+ declare function checkString(value: unknown): value is string;
60
+ /**
61
+ * Check if `value` is a array
62
+ * @param value A value
63
+ * @param predicate A function that checks each item
64
+ * @param requiredLength If needed, check if it is a fixed length array
65
+ */
66
+ declare function checkArray<T, Length extends number>(value: unknown, predicate?: Predicate<T>, requiredLength?: number): value is FixedArray<T, Length>;
67
+ /**
68
+ * Check if `value` is a number array
69
+ * @param value A value
70
+ * @param requiredLength If needed, check if it is a fixed length array
71
+ */
72
+ declare function checkNumberArray<Length extends number>(value: unknown, requiredLength?: Length): value is FixedArray<number, Length>;
73
+ /**
74
+ * Check if `value` is a string array
75
+ * @param value A value
76
+ * @param requiredLength If needed, check if it is a fixed length array
77
+ */
78
+ declare function checkStringArray<Length extends number>(value: unknown, requiredLength?: Length): value is FixedArray<string, Length>;
79
+ /**
80
+ * Check if `value` has a property called `name`
81
+ * @param value A value
82
+ * @param propertyName The name of the property
83
+ * @param type
84
+ */
85
+ declare function hasProperty<Obj extends unknown, K extends PropertyKey, T extends JavaScriptTypes>(value: Obj, propertyName: K, type: T): value is Obj & {
86
+ [name in K]: JavaScriptTypeMap[T];
87
+ };
88
+ declare const NodeJSCustomInspect: unique symbol;
89
+
2
90
  interface IToString {
3
91
  /**
4
92
  * Returns a string representation of an object.
5
93
  */
6
94
  toString(): string;
95
+ get [Symbol.toStringTag](): string;
96
+ [NodeJSCustomInspect](): string;
97
+ }
98
+
99
+ interface IGeometryObject extends IToString {
100
+ readonly area: number;
101
+ readonly perimeter: number;
102
+ }
103
+
104
+ interface ISize {
105
+ width: number;
106
+ height: number;
107
+ }
108
+ interface IToSize {
109
+ toSize(): SizeLike;
110
+ }
111
+ type SizeArray = [number, number];
112
+ type SizeString = `${number}x${number}`;
113
+ type SizeLike = ISize | SizeArray | SizeString | number | IToSize;
114
+ type SizeArguments = [size: SizeLike] | SizeArray;
115
+ declare class Size implements ISize, IGeometryObject, IToVec2 {
116
+ width: number;
117
+ height: number;
118
+ get aspectRatio(): number;
119
+ get area(): number;
120
+ get perimeter(): number;
121
+ static resolve(a: unknown): Size;
122
+ static resolveArgs(args: SizeArguments): Size;
123
+ static cast(a: unknown): Size | undefined;
124
+ static is(a: unknown): a is SizeLike;
125
+ constructor(width: number, height: number);
126
+ toArray(): SizeArray;
127
+ toString(): SizeString;
128
+ get [Symbol.toStringTag](): string;
129
+ [NodeJSCustomInspect](): string;
130
+ toJSON(): ISize;
131
+ clone(): Size;
132
+ equals(size: SizeLike): boolean;
133
+ equals(width: number, height: number): boolean;
134
+ toVec2(): Vec2Like;
135
+ }
136
+
137
+ interface IRGB {
138
+ red: number;
139
+ green: number;
140
+ blue: number;
141
+ }
142
+ interface IToRGB {
143
+ toRGB(): RGBLike;
144
+ }
145
+ type RGBArray = [number, number, number];
146
+ type RGBString = `rgb(${number},${number},${number})`;
147
+ type RGBLike = IRGB | RGBArray | RGBString | IToRGB;
148
+ type RGBArguments = [rgb: RGBLike] | RGBArray;
149
+ interface IRBBA extends IRGB {
150
+ alpha: number;
151
+ }
152
+ interface IToRGBA {
153
+ toRGBA(): RGBALike;
154
+ }
155
+ type RGBAArray = [number, number, number, number];
156
+ type RGBAString = `rgba(${number},${number},${number},${number})`;
157
+ type RGBALike = IRBBA | RGBAArray | RGBAString | IToRGBA;
158
+ type RGBAArguments = [rgba: RGBALike] | RGBAArray;
159
+ type IAnyRGB = IRGB | IRBBA;
160
+ type AnyRGBArray = RGBArray | RGBAArray;
161
+ type AnyRGBString = RGBString | RGBAString;
162
+ type IAnyToRGB = IToRGB | IToRGBA;
163
+ type AnyRGBLike = IAnyRGB | AnyRGBArray | AnyRGBString | HexLike | number | IAnyToRGB;
164
+ type AnyRGBArguments = RGBArguments | RGBAArguments;
165
+ declare class RGBA implements IRBBA, IToVec2, IToVec3, IToHSL, IToHSLA, IToString {
166
+ private _red;
167
+ get red(): number;
168
+ set red(val: number);
169
+ private _green;
170
+ get green(): number;
171
+ set green(val: number);
172
+ private _blue;
173
+ get blue(): number;
174
+ set blue(val: number);
175
+ private _alpha;
176
+ get alpha(): number;
177
+ set alpha(val: number);
178
+ static resolve(a: unknown): RGBA;
179
+ static resolveArgs(args: AnyRGBArguments): RGBA;
180
+ static cast(a: unknown): RGBA | undefined;
181
+ static is(a: unknown): a is AnyRGBLike;
182
+ constructor(red: number, green: number, blue: number, alpha?: number);
183
+ toArray(withAlpha?: boolean): AnyRGBArray;
184
+ toJSON(withAlpha?: boolean): IAnyRGB;
185
+ toString(withAlpha?: boolean): AnyRGBString;
186
+ get [Symbol.toStringTag](): string;
187
+ [NodeJSCustomInspect](): string;
188
+ toVec2(): Vec2Like;
189
+ toVec3(): Vec3Like;
190
+ toHSL(withAlpha?: false): HSLLike;
191
+ toHSL(withAlpha?: true): HSLALike;
192
+ toHSLA(): HSLALike;
193
+ invert(withAlpha?: boolean): RGBA;
194
+ }
195
+ interface IHSL {
196
+ hue: number;
197
+ saturation: number;
198
+ luminace: number;
199
+ }
200
+ interface IToHSL {
201
+ toHSL(): HSLLike;
202
+ }
203
+ type HSLArray = [number, number, number];
204
+ type HSLString = `hsl(${number},${number},${number})`;
205
+ type HSLLike = IHSL | HSLArray | HSLString | IToHSL;
206
+ type HSLArguments = HSLArray | [hsl: HSLLike];
207
+ interface IHSLA extends IHSL {
208
+ alpha: number;
209
+ }
210
+ interface IToHSLA {
211
+ toHSLA(): HSLALike;
212
+ }
213
+ type HSLAArray = [number, number, number, number];
214
+ type HSLAString = `hsla(${number},${number},${number},${number})`;
215
+ type HSLALike = IHSLA | HSLAArray | HSLAString | IToHSLA;
216
+ type HSLAArguments = HSLAArray | [hsla: HSLALike];
217
+ type IAnyHSL = IHSL | IHSLA;
218
+ type AnyHSLArray = HSLArray | HSLAArray;
219
+ type AnyHSLString = HSLString | HSLAString;
220
+ type IAnyToHSL = IToHSL | IToHSLA;
221
+ type AnyHSLLike = IAnyHSL | AnyHSLArray | AnyHSLString | HexLike | number | IAnyToHSL;
222
+ type AnyHSLArguments = HSLArguments | HSLAArguments;
223
+ declare class HSLA implements IHSLA, IToRGB, IToRGBA, IToVec2, IToVec3, IToString {
224
+ private _hue;
225
+ get hue(): number;
226
+ set hue(val: number);
227
+ private _saturation;
228
+ get saturation(): number;
229
+ set saturation(val: number);
230
+ private _luminace;
231
+ get luminace(): number;
232
+ set luminace(val: number);
233
+ private _alpha;
234
+ get alpha(): number;
235
+ set alpha(val: number);
236
+ static resolve(a: unknown): HSLA;
237
+ static resolveArgs(args: AnyHSLArguments): HSLA;
238
+ static cast(a: unknown): HSLA | undefined;
239
+ static is(a: unknown): a is AnyHSLLike;
240
+ constructor(hue: number, saturation: number, luminace: number, alpha?: number);
241
+ toArray(withAlpha?: boolean): AnyHSLArray;
242
+ toJSON(withAlpha?: boolean): IAnyHSL;
243
+ toString(withAlpha?: boolean): AnyHSLString;
244
+ get [Symbol.toStringTag](): string;
245
+ [NodeJSCustomInspect](): string;
246
+ toRGB(withAlpha?: true): RGBALike;
247
+ toRGB(withAlpha?: false): RGBLike;
248
+ toRGBA(): RGBALike;
249
+ toVec2(): Vec2Like;
250
+ toVec3(): Vec3Like;
251
+ invert(withAlpha?: boolean): HSLA;
252
+ }
253
+ type AnyColorArray = AnyRGBArray | AnyHSLArray;
254
+ type AnyColorString = AnyRGBString | AnyHSLString;
255
+ type IAnyColor = IAnyRGB | IAnyHSL;
256
+ type IAnyToColor = IAnyToRGB | IAnyToHSL;
257
+ type AnyColorLike = AnyColorArray | AnyColorString | IAnyColor | HexLike | number;
258
+ type AnyColorArguments = AnyColorArray | [color: AnyColorLike];
259
+ type AnyColor = RGBA | HSLA;
260
+ declare namespace AnyColor {
261
+ function cast(a: unknown, preferHSL?: boolean): AnyColor | undefined;
262
+ function resolve(a: unknown, preferHSL?: boolean): AnyColor;
263
+ function resolveArgs(args: AnyColorArguments, preferHSL?: boolean): AnyColor;
264
+ }
265
+
266
+ interface ICircle extends IVec2 {
267
+ radius: number;
268
+ }
269
+ interface IToCircle {
270
+ toCircle(): CircleLike;
271
+ }
272
+ type CircleArray = [...Vec2Array, number];
273
+ type CircleString = `${Vec2String}|${number}`;
274
+ type CircleLike = ICircle | CircleArray | CircleString | IToCircle;
275
+ type CircleArguments = [circle: CircleLike] | [position: Vec2Like, radius: number] | CircleArray;
276
+ declare class Circle implements ICircle, IGeometryObject, IToVec2 {
277
+ radius: number;
278
+ get perimeter(): number;
279
+ get area(): number;
280
+ position: Vec2;
281
+ get x(): number;
282
+ set x(val: number);
283
+ get y(): number;
284
+ set y(val: number);
285
+ get w(): number;
286
+ set w(val: number);
287
+ static resolve(a: unknown): Circle;
288
+ static resolveArgs(args: CircleArguments): Circle;
289
+ static cast(a: unknown): Circle | undefined;
290
+ static is(a: unknown): a is CircleLike;
291
+ constructor(position: Vec2Like, radius: number);
292
+ toArray(): CircleArray;
293
+ toJSON(): ICircle;
294
+ toString(): CircleString;
295
+ get [Symbol.toStringTag](): string;
296
+ [NodeJSCustomInspect](): string;
297
+ clone(): Circle;
298
+ toVec2(): Vec2Like;
299
+ equals(circle: CircleLike): boolean;
300
+ equals(x: number, y: number, radius: number): boolean;
301
+ equals(position: Vec2Like, radius: number): boolean;
302
+ inside(circle: CircleLike): boolean;
303
+ inside(x: number, y: number, radius: number): boolean;
304
+ inside(position: Vec2Like, radius: number): boolean;
305
+ insidePoint(point: Vec2Like): boolean;
306
+ insidePoint(x: number, y: number): boolean;
307
+ }
308
+
309
+ interface IRectangle extends IVec2, ISize {
310
+ }
311
+ interface IToRectangle {
312
+ toRectangle(): RectangleLike;
313
+ }
314
+ type RectangleArray = [...Vec2Array, ...SizeArray];
315
+ type RectangleString = `${Vec2String}|${SizeString}`;
316
+ type RectangleLike = IRectangle | RectangleArray | RectangleString | IToRectangle;
317
+ type RectangleArguments = [rectangle: RectangleLike] | [position: Vec2Like, size: SizeLike] | RectangleArray;
318
+ declare class Rectangle implements IRectangle, IGeometryObject, IToBoundingBox, IToVec2, IToSize {
319
+ position: Vec2;
320
+ size: Size;
321
+ get area(): number;
322
+ get perimeter(): number;
323
+ get x(): number;
324
+ set x(val: number);
325
+ get y(): number;
326
+ set y(val: number);
327
+ get w(): number;
328
+ set w(val: number);
329
+ get width(): number;
330
+ set width(val: number);
331
+ get height(): number;
332
+ set height(val: number);
333
+ static resolve(a: unknown): Rectangle;
334
+ static resolveArgs(args: RectangleArguments): Rectangle;
335
+ static cast(a: unknown): Rectangle | undefined;
336
+ static is(a: unknown): a is RectangleLike;
337
+ constructor(pos: Vec2Like, size: SizeLike);
338
+ toArray(w?: boolean): RectangleArray;
339
+ toString(w?: boolean): RectangleString;
340
+ get [Symbol.toStringTag](): string;
341
+ [NodeJSCustomInspect](): string;
342
+ toJSON(): IRectangle;
343
+ toBoundingBox(): BoundingBoxLike;
344
+ toVec2(): Vec2Like;
345
+ toSize(): SizeLike;
346
+ clone(): Rectangle;
347
+ equals(rectangle: RectangleLike): boolean;
348
+ equals(position: Vec2Like, size: SizeLike): boolean;
349
+ equals(x: number, y: number, width: number, height: number): boolean;
350
+ }
351
+
352
+ interface IBoundingBox {
353
+ left: number;
354
+ right: number;
355
+ top: number;
356
+ bottom: number;
357
+ }
358
+ interface IToBoundingBox {
359
+ toBoundingBox(): BoundingBoxLike;
360
+ }
361
+ type BoundingBoxArray = [number, number, number, number];
362
+ type BoundingBoxString = `${number},${number},${number},${number}`;
363
+ type BoundingBoxLike = IBoundingBox | BoundingBoxArray | BoundingBoxString | IToBoundingBox;
364
+ type BoundingBoxArgs = [bbox: BoundingBoxLike] | BoundingBoxArray;
365
+ declare class BoundingBox implements IBoundingBox, IRectangle, IToRectangle, IToString {
366
+ left: number;
367
+ right: number;
368
+ top: number;
369
+ bottom: number;
370
+ get width(): number;
371
+ set width(val: number);
372
+ get height(): number;
373
+ set height(val: number);
374
+ get x(): number;
375
+ set x(x: number);
376
+ get y(): number;
377
+ set y(y: number);
378
+ w: number;
379
+ static resolve(a: unknown): BoundingBox;
380
+ static resolveArgs(args: BoundingBoxArgs): BoundingBox;
381
+ static cast(a: unknown): BoundingBox | undefined;
382
+ static is(a: unknown): a is BoundingBoxLike;
383
+ constructor(left: number, right: number, top: number, bottom: number);
384
+ toArray(): BoundingBoxArray;
385
+ toString(): BoundingBoxString;
386
+ get [Symbol.toStringTag](): string;
387
+ [NodeJSCustomInspect](): string;
388
+ toJSON(): IBoundingBox;
389
+ clone(): BoundingBox;
390
+ equals(bbox: BoundingBoxLike): boolean;
391
+ equals(left: number, right: number, top: number, bottom: number): boolean;
392
+ toSize(): SizeLike;
393
+ toVec2(): Vec2Like;
394
+ toRectangle(): RectangleLike;
395
+ inside(bbox: BoundingBoxLike): boolean;
396
+ inside(left: number, right: number, top: number, bottom: number): boolean;
397
+ insidePoint(point: Vec2Like): boolean;
398
+ insidePoint(x: number, y: number): boolean;
399
+ insideCircle(circle: CircleLike): boolean;
400
+ insideCircle(x: number, y: number, radius: number): boolean;
401
+ insideCircle(position: Vec2Like, radius: number): boolean;
402
+ }
403
+
404
+ interface IMat4 {
405
+ m00: number;
406
+ m01: number;
407
+ m02: number;
408
+ m03: number;
409
+ m10: number;
410
+ m11: number;
411
+ m12: number;
412
+ m13: number;
413
+ m20: number;
414
+ m21: number;
415
+ m22: number;
416
+ m23: number;
417
+ m30: number;
418
+ m31: number;
419
+ m32: number;
420
+ m33: number;
421
+ }
422
+ interface IToMat4 {
423
+ toMat4(): Mat4Like;
424
+ }
425
+ type Mat4Array = [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
426
+ type Mat4NestedArray = [[number, number, number, number], [number, number, number, number], [number, number, number, number], [number, number, number, number]];
427
+ type Mat4String = `${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
428
+ type Mat4Like = IMat4 | Mat4Array | Mat4NestedArray | Mat4String | number | IToMat4;
429
+ type Mat4Arguments = [mat: Mat4Like] | Mat4Array;
430
+ declare class Mat4 implements IMat4, IToMat3, IToString {
431
+ protected _raw: Mat4Array;
432
+ get m00(): number;
433
+ set m00(val: number);
434
+ get m01(): number;
435
+ set m01(val: number);
436
+ get m02(): number;
437
+ set m02(val: number);
438
+ get m03(): number;
439
+ set m03(val: number);
440
+ get m10(): number;
441
+ set m10(val: number);
442
+ get m11(): number;
443
+ set m11(val: number);
444
+ get m12(): number;
445
+ set m12(val: number);
446
+ get m13(): number;
447
+ set m13(val: number);
448
+ get m20(): number;
449
+ set m20(val: number);
450
+ get m21(): number;
451
+ set m21(val: number);
452
+ get m22(): number;
453
+ set m22(val: number);
454
+ get m23(): number;
455
+ set m23(val: number);
456
+ get m30(): number;
457
+ set m30(val: number);
458
+ get m31(): number;
459
+ set m31(val: number);
460
+ get m32(): number;
461
+ set m32(val: number);
462
+ get m33(): number;
463
+ set m33(val: number);
464
+ static resolve(a: unknown): Mat4;
465
+ static resolveArgs(args: Mat4Arguments): Mat4;
466
+ static cast(a: unknown): Mat4 | undefined;
467
+ static is(a: unknown): a is Mat4Like;
468
+ static orthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4;
469
+ static orthographic(bbox: BoundingBoxLike, near: number, far: number): Mat4;
470
+ static perspective(fov: number, aspect: number, near: number, far: number): Mat4;
471
+ static pointAt(position: Vec3Like, target: Vec3Like, up: Vec3Like): Mat4;
472
+ constructor(init?: Mat4Array);
473
+ toArray(): Mat4Array;
474
+ toNestetArray(): Mat4NestedArray;
475
+ toJSON(): IMat4;
476
+ toString(): Mat4String;
477
+ get [Symbol.toStringTag](): string;
478
+ [NodeJSCustomInspect](): string;
479
+ clone(): Mat4;
480
+ equals(mat: Mat4Like): boolean;
481
+ equals(...mat: Mat4Array): boolean;
482
+ add(mat: Mat4Like): Mat4;
483
+ add(...mat: Mat4Array): Mat4;
484
+ subtract(mat: Mat4Like): Mat4;
485
+ subtract(...mat: Mat4Array): Mat4;
486
+ multiply(mat: Mat4Like): Mat4;
487
+ multiply(...mat: Mat4Array): Mat4;
488
+ multiply(scalar: number): Mat4;
489
+ multiply(vec: Vec3Like): Vec3;
490
+ translate(x: number, y: number, z: number): Mat4;
491
+ translate(vec: Vec3Like): Mat4;
492
+ rotateX(angle: number): Mat4;
493
+ rotateY(angle: number): Mat4;
494
+ rotateZ(angle: number): Mat4;
495
+ rotate(x: number, y: number, z: number): Mat4;
496
+ rotate(vec: Vec3Like): Mat4;
497
+ scale(x: number, y: number, z: number): Mat4;
498
+ scale(vec: Vec3Like): Mat4;
499
+ inverse(): Mat4;
500
+ toMat3(): Mat3Like;
7
501
  }
8
502
 
9
- interface IGeometryObject {
10
- readonly area: number;
11
- readonly perimeter: number;
503
+ interface IMat3 {
504
+ m00: number;
505
+ m01: number;
506
+ m02: number;
507
+ m10: number;
508
+ m11: number;
509
+ m12: number;
510
+ m20: number;
511
+ m21: number;
512
+ m22: number;
513
+ }
514
+ interface IToMat3 {
515
+ toMat3(): Mat3Like;
516
+ }
517
+ type Mat3Array = [number, number, number, number, number, number, number, number, number];
518
+ type Mat3NestedArray = [[number, number, number], [number, number, number], [number, number, number]];
519
+ type Mat3String = `${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
520
+ type Mat3Like = IMat3 | Mat3Array | Mat3NestedArray | Mat3String | number | IToMat3;
521
+ type Mat3Arguments = [mat: Mat3Like] | Mat3Array;
522
+ declare class Mat3 implements IMat3, IToMat4, IToString {
523
+ protected _raw: Mat3Array;
524
+ get m00(): number;
525
+ set m00(val: number);
526
+ get m01(): number;
527
+ set m01(val: number);
528
+ get m02(): number;
529
+ set m02(val: number);
530
+ get m10(): number;
531
+ set m10(val: number);
532
+ get m11(): number;
533
+ set m11(val: number);
534
+ get m12(): number;
535
+ set m12(val: number);
536
+ get m20(): number;
537
+ set m20(val: number);
538
+ get m21(): number;
539
+ set m21(val: number);
540
+ get m22(): number;
541
+ set m22(val: number);
542
+ static resolve(a: unknown): Mat3;
543
+ static resolveArgs(args: Mat3Arguments): Mat3;
544
+ static cast(a: unknown): Mat3 | undefined;
545
+ static is(a: unknown): a is Mat3Like;
546
+ static projection(width: number, height: number): Mat3;
547
+ constructor(init?: Mat3Array);
548
+ toArray(): Mat3Array;
549
+ toNestetArray(): Mat3NestedArray;
550
+ toJSON(): IMat3;
551
+ toString(): Mat3String;
552
+ get [Symbol.toStringTag](): string;
553
+ [NodeJSCustomInspect](): string;
554
+ clone(): Mat3;
555
+ equals(mat: Mat3Like): boolean;
556
+ equals(...mat: Mat3Array): boolean;
557
+ add(mat: Mat3Like): Mat3;
558
+ add(...mat: Mat3Array): Mat3;
559
+ subtract(mat: Mat3Like): Mat3;
560
+ subtract(...mat: Mat3Array): Mat3;
561
+ multiply(mat: Mat3Like): Mat3;
562
+ multiply(...mat: Mat3Array): Mat3;
563
+ multiply(scalar: number): Mat3;
564
+ translate(x: number, y: number): Mat3;
565
+ translate(vec: Vec2Like): Mat3;
566
+ rotate(angle: number): Mat3;
567
+ scale(x: number, y: number): Mat3;
568
+ scale(vec: Vec2Like): Mat3;
569
+ determinant(): number;
570
+ inverse(): Mat3;
571
+ toMat4(): Mat4Like;
12
572
  }
13
573
 
14
- interface ISize {
15
- width: number;
16
- height: number;
574
+ interface IQuaternion {
575
+ w: number;
576
+ x: number;
577
+ y: number;
578
+ z: number;
17
579
  }
18
- type SizeArray = [number, number];
19
- type SizeString = `${number}x${number}`;
20
- type SizeLike = ISize | SizeArray | SizeString | number;
21
- type SizeArguments = [SizeLike] | [number, number];
22
- declare class Size implements ISize, IGeometryObject, IToString {
23
- width: number;
24
- height: number;
25
- get aspectRatio(): number;
26
- get area(): number;
27
- get perimeter(): number;
28
- static resolve(a: unknown): Size;
29
- static cast(a: unknown): Size | undefined;
30
- static is(a: unknown): a is SizeLike;
31
- constructor(width: number, height: number);
32
- toArray(): SizeArray;
33
- toString(): SizeString;
34
- toJSON(): ISize;
35
- clone(): Size;
36
- equals(square: SizeLike): boolean;
37
- toVec2(): Vec2Like;
580
+ interface IToQuaternion {
581
+ toQuaternion(): QuaternionLike;
582
+ }
583
+ type QuaternionArray = [number, number, number, number];
584
+ type QuaternionString = `${number} + ${number}i + ${number}j + ${number}k`;
585
+ type QuaternionLike = IQuaternion | QuaternionArray | QuaternionString | IToQuaternion;
586
+ type QuaternionArguments = QuaternionArray | [quaternion: QuaternionLike];
587
+ declare class Quaternion implements IToVec3, IToMat3, IToMat4, IToString {
588
+ w: number;
589
+ x: number;
590
+ y: number;
591
+ z: number;
592
+ static is(a: unknown): a is IQuaternion;
593
+ static resolve(a: unknown): Quaternion;
594
+ static resolveArgs(args: QuaternionArguments): Quaternion;
595
+ static cast(a: unknown): Quaternion | undefined;
596
+ static fromAxisAngle(axis: Vec3Like, angle: number): Quaternion;
597
+ static fromAxisAngle(x: number, y: number, z: number, angle: number): Quaternion;
598
+ static fromEuler(x: number, y: number, z: number): Quaternion;
599
+ static fromEuler(vec: Vec3Like): Quaternion;
600
+ static get zero(): Quaternion;
601
+ constructor(w: number, x: number, y: number, z: number);
602
+ toArray(): QuaternionArray;
603
+ toString(): QuaternionString;
604
+ get [Symbol.toStringTag](): string;
605
+ [NodeJSCustomInspect](): string;
606
+ toJSON(): IQuaternion;
607
+ clone(): Quaternion;
608
+ add(quaternion: QuaternionLike): Quaternion;
609
+ add(...quaternion: QuaternionArray): Quaternion;
610
+ offset(quaternion: QuaternionLike): this;
611
+ offset(...quaternion: QuaternionArray): this;
612
+ subtract(quaternion: QuaternionLike): Quaternion;
613
+ subtract(...quaternion: QuaternionArray): Quaternion;
614
+ negative(): Quaternion;
615
+ length(sqrt?: boolean): number;
616
+ normalize(): Quaternion;
617
+ multiply(quaternion: QuaternionLike): Quaternion;
618
+ multiply(...quaternion: QuaternionArray): Quaternion;
619
+ multiplyVector(x: number, y: number, z: number): Vec3;
620
+ multiplyVector(vec: Vec3Like): Vec3;
621
+ scale(scalar: number): Quaternion;
622
+ dot(quaternion: QuaternionLike): number;
623
+ dot(...quaternion: QuaternionArray): number;
624
+ inverse(): Quaternion;
625
+ divide(quaternion: QuaternionLike): Quaternion;
626
+ divide(...quaternion: QuaternionArray): Quaternion;
627
+ conjugate(): Quaternion;
628
+ exp(): Quaternion;
629
+ log(): Quaternion;
630
+ toVec3(): Vec3Like;
631
+ toAxisAngle(): Vec3;
632
+ toEuler(): Vec3;
633
+ toMat3(): Mat3Like;
634
+ toMat4(): Mat4Like;
38
635
  }
39
636
 
40
637
  interface IVec3 extends IVec2 {
41
638
  z: number;
42
639
  }
640
+ interface IToVec3 {
641
+ toVec3(): Vec3Like;
642
+ }
43
643
  type Vec3Array = [number, number, number] | [number, number, number, number];
44
644
  type Vec3String = `${number},${number},${number}` | `${number},${number},${number};${number}`;
45
- type Vec3Like = IVec3 | Vec3Array | Vec3String | number;
645
+ type Vec3Like = IVec3 | Vec3Array | Vec3String | number | IToVec3;
46
646
  type Vec3Arguments = [Vec3Like] | [number, number, number];
47
- declare class Vec3 implements IVec3 {
647
+ declare class Vec3 implements IVec3, IToVec2, IToRGB, IToRGBA, IToHSL, IToHSLA, IToQuaternion, IToString {
48
648
  x: number;
49
649
  y: number;
50
650
  z: number;
@@ -56,13 +656,23 @@ declare class Vec3 implements IVec3 {
56
656
  static fromPoints(a: Vec3Like, b: Vec3Like): Vec3;
57
657
  static clamp(value: Vec3Like, min: Vec3Like, max: Vec3Like): Vec3;
58
658
  static intersectPlane(planeP: Vec3Like, planeN: Vec3Like, lineStart: Vec3Like, lineEnd: Vec3Like, t: number): Vec3;
59
- constructor(x?: number, y?: number, z?: number, w?: number);
659
+ static get zero(): Vec3;
660
+ static get one(): Vec3;
661
+ constructor(x: number, y: number, z: number, w?: number);
60
662
  toArray(w?: boolean): Vec3Array;
61
663
  toJSON(): IVec3;
62
664
  toString(w?: boolean): Vec3String;
665
+ get [Symbol.toStringTag](): string;
666
+ [NodeJSCustomInspect](): string;
63
667
  toVec2(): Vec2Like;
668
+ toRGB(): RGBLike;
669
+ toRGBA(): RGBALike;
670
+ toHSL(): HSLLike;
671
+ toHSLA(): HSLALike;
672
+ toQuaternion(): QuaternionLike;
64
673
  clone(): Vec3;
65
674
  equals(vec: Vec3Like): boolean;
675
+ equals(x: number, y: number, z: number): boolean;
66
676
  setX(x: number): this;
67
677
  setY(y: number): this;
68
678
  setZ(z: number): this;
@@ -99,11 +709,14 @@ interface IVec2 {
99
709
  y: number;
100
710
  w: number;
101
711
  }
712
+ interface IToVec2 {
713
+ toVec2(): Vec2Like;
714
+ }
102
715
  type Vec2Array = [number, number] | [number, number, number];
103
716
  type Vec2String = `${number},${number}` | `${number},${number};${number}`;
104
- type Vec2Like = IVec2 | Vec2Array | Vec2String | number;
717
+ type Vec2Like = IVec2 | Vec2Array | Vec2String | number | IToVec2;
105
718
  type Vec2Arguments = [Vec2Like] | [number, number];
106
- declare class Vec2 implements IVec2 {
719
+ declare class Vec2 implements IVec2, IToVec3, IToSize, IToRGB, IToRGBA, IToHSL, IToHSLA, IToString {
107
720
  x: number;
108
721
  y: number;
109
722
  w: number;
@@ -113,14 +726,23 @@ declare class Vec2 implements IVec2 {
113
726
  static is(a: unknown): a is Vec2Like;
114
727
  static fromPoints(a: Vec2Like, b: Vec2Like): Vec2;
115
728
  static clamp(value: Vec2Like, min: Vec2Like, max: Vec2Like): Vec2;
116
- constructor(x?: number, y?: number, w?: number);
729
+ static get zero(): Vec2;
730
+ static get one(): Vec2;
731
+ constructor(x: number, y: number, w?: number);
117
732
  toArray(w?: boolean): Vec2Array;
118
733
  toJSON(): IVec2;
119
734
  toString(w?: boolean): Vec2String;
120
- toSquare(): Size;
121
- toVec3(z?: number): Vec3;
735
+ get [Symbol.toStringTag](): string;
736
+ [NodeJSCustomInspect](): string;
737
+ toSize(): SizeLike;
738
+ toVec3(z?: number): Vec3Like;
739
+ toRGB(): RGBLike;
740
+ toRGBA(): RGBALike;
741
+ toHSL(): HSLLike;
742
+ toHSLA(): HSLALike;
122
743
  clone(): Vec2;
123
744
  equals(vec: Vec2Like): boolean;
745
+ equals(x: number, y: number): boolean;
124
746
  setX(x: number): this;
125
747
  setY(y: number): this;
126
748
  setW(w: number): this;
@@ -168,6 +790,8 @@ declare abstract class MathFunction<Input extends Array<number> = Array<number>>
168
790
  * @returns The root points, this can be an empty array if no root points have been found
169
791
  */
170
792
  abstract roots(): Array<Vec2>;
793
+ abstract get [Symbol.toStringTag](): string;
794
+ abstract [NodeJSCustomInspect](): string;
171
795
  }
172
796
 
173
797
  /**
@@ -202,13 +826,37 @@ declare class LinearFunction extends MathFunction<[number]> {
202
826
  get(x: number): number;
203
827
  roots(): Array<Vec2>;
204
828
  toString(): LinearFunctionString;
829
+ get [Symbol.toStringTag](): string;
830
+ [NodeJSCustomInspect](): string;
205
831
  }
206
832
 
833
+ /**
834
+ * A type that represents the sign of a number
835
+ */
836
+ type SignCharacter = "-" | "+";
837
+ /**
838
+ * Get the sign character from a number
839
+ * @param num A number
840
+ */
841
+ declare function signCharacter(num: number | bigint): SignCharacter | undefined;
842
+
843
+ /**
844
+ * The various types of how a quad function can be represented
845
+ */
207
846
  type QuadFunctionType = "standard";
847
+ /**
848
+ * A typed map of each quad function representations
849
+ */
208
850
  type QuadFunctionString = {
209
- "standard": `f(x) = ${number}x^2 ${"+" | "-"} ${number}x ${"+" | "-"} ${number}` | `f(x) = ${number}x^2 ${"+" | "-"} ${number}x` | `f(x) = ${number}x^2`;
851
+ "standard": `f(x) = ${number}x^2 ${SignCharacter} ${number}x ${SignCharacter} ${number}` | `f(x) = ${number}x^2 ${SignCharacter} ${number}x` | `f(x) = ${number}x^2`;
210
852
  };
853
+ /**
854
+ * A string representation of a quad function
855
+ */
211
856
  type QuadFunctionStrings = QuadFunctionString[QuadFunctionType];
857
+ /**
858
+ * A class that implements a quad function with `a`, `b` and `c`
859
+ */
212
860
  declare class QuadFunction extends MathFunction<[number]> {
213
861
  a: number;
214
862
  b: number;
@@ -218,168 +866,56 @@ declare class QuadFunction extends MathFunction<[number]> {
218
866
  get(x: number): number;
219
867
  roots(): Array<Vec2>;
220
868
  toString<T extends QuadFunctionType>(type?: T): QuadFunctionString[T];
869
+ get [Symbol.toStringTag](): string;
870
+ [NodeJSCustomInspect](): string;
221
871
  }
222
872
 
873
+ /**
874
+ * A error when a value wasn't able to be resolved to another type
875
+ */
223
876
  declare class ResolveError extends Error {
224
877
  readonly target: string;
225
878
  readonly value: unknown;
879
+ /**
880
+ * Create a resolve exception
881
+ * @param target The target type name
882
+ * @param value A value
883
+ */
226
884
  constructor(target: string, value: unknown);
227
885
  }
228
886
 
229
- declare function sign_char(num: number | bigint): "-" | "+" | undefined;
230
-
231
- type JavaScriptTypes = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
232
- type JavaScriptTypeMap = {
233
- "string": string;
234
- "number": number;
235
- "bigint": bigint;
236
- "boolean": boolean;
237
- "symbol": symbol;
238
- "undefined": undefined;
239
- "object": object;
240
- "function": Function;
241
- };
242
- type HexDigit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F";
243
- type HexLike = `$${string}` | `#${string}` | `0x${string}` | string;
244
- type Predicate<T> = (a: unknown) => a is T;
245
- declare function check_number(obj: unknown): obj is number;
246
- declare function check_hex_digit(obj: unknown): obj is HexDigit;
247
- declare function get_hex_part(string: string): string;
248
- declare function check_hex(obj: unknown): obj is HexLike;
249
- declare function check_string(obj: unknown): obj is string;
250
- declare function check_array<T>(obj: unknown, predicate?: Predicate<T>, requiredLength?: number): obj is Array<T>;
251
- declare function check_number_array(obj: unknown, requiredLength?: number): obj is Array<number>;
252
- declare function check_string_array(obj: unknown, requiredLength?: number): obj is Array<string>;
253
- declare function has_property<Obj, Name extends string, Type extends JavaScriptTypes>(obj: Obj, name: Name, type: Type): obj is Obj & {
254
- [name in Name]: JavaScriptTypeMap[Type];
255
- };
256
-
257
887
  declare const DJB2_OFFSET = 5381n;
258
888
  declare function djb2<V>(value: V): bigint;
259
889
  declare const FNV1_OFFSET = 14695981039346656037n;
260
890
  declare const FNV1_PRIME = 1099511628211n;
261
891
  declare function fnv1<V>(value: V): bigint;
262
892
  declare function sdbm<V>(value: V): bigint;
263
- interface IHash {
893
+ interface IHash extends IToString {
264
894
  update(input: Uint8Array): this;
265
895
  digest(): Uint8Array;
266
896
  }
267
897
 
268
898
  declare class MD2 implements IHash {
269
- static readonly BLOCK_SIZE = 16;
270
- private _data;
271
- private _state;
272
- private _checksum;
273
- private _length;
274
- constructor();
275
- update(input: Uint8Array): this;
276
- private _transform;
277
- digest(): Uint8Array;
278
- }
279
-
280
- declare const MAX_ANGLE_DEGREE = 360;
281
- declare const cap_angle_degree: (angle: number) => number;
282
- declare const cap_angle_radian: (angle: number) => number;
283
- declare const radian_to_degree: (angle: number) => number;
284
- declare const degree_to_radian: (angle: number) => number;
285
-
286
- interface ICircle extends IVec2 {
287
- radius: number;
288
- }
289
- type CircleArray = [...Vec2Array, number];
290
- type CircleString = `${Vec2String}|${number}`;
291
- type CircleLike = ICircle | CircleArray | CircleString;
292
- declare class Circle implements ICircle, IGeometryObject, IToString {
293
- radius: number;
294
- get perimeter(): number;
295
- get area(): number;
296
- position: Vec2;
297
- get x(): number;
298
- set x(val: number);
299
- get y(): number;
300
- set y(val: number);
301
- get w(): number;
302
- set w(val: number);
303
- static resolve(a: unknown): Circle;
304
- static cast(a: unknown): Circle | undefined;
305
- static is(a: unknown): a is CircleLike;
306
- constructor(position: Vec2Like, radius: number);
307
- toArray(): CircleArray;
308
- toJSON(): ICircle;
309
- toString(): CircleString;
310
- clone(): Circle;
311
- equals(circle: CircleLike): boolean;
312
- inside(a: CircleLike): boolean;
313
- insidePoint(a: Vec2Like): boolean;
314
- }
315
-
316
- interface IRectangle extends IVec2, ISize {
317
- }
318
- type RectangleArray = [...Vec2Array, ...SizeArray];
319
- type RectangleString = `${Vec2String}|${SizeString}`;
320
- type RectangleLike = IRectangle | RectangleArray | RectangleString;
321
- declare class Rectangle implements IRectangle, IGeometryObject, IToString {
322
- position: Vec2;
323
- size: Size;
324
- get area(): number;
325
- get perimeter(): number;
326
- get x(): number;
327
- set x(val: number);
328
- get y(): number;
329
- set y(val: number);
330
- get w(): number;
331
- set w(val: number);
332
- get width(): number;
333
- set width(val: number);
334
- get height(): number;
335
- set height(val: number);
336
- static resolve(a: unknown): Rectangle;
337
- static cast(a: unknown): Rectangle | undefined;
338
- static is(a: unknown): a is RectangleLike;
339
- constructor(pos: Vec2Like, size: SizeLike);
340
- constructor(x: number, y: number, width: number, height: number);
341
- toArray(w?: boolean): RectangleArray;
342
- toString(w?: boolean): RectangleString;
343
- toJSON(): IRectangle;
344
- toBoundingBox(): BoundingBoxLike;
345
- clone(): Rectangle;
346
- equals(rectangle: RectangleLike): boolean;
347
- }
348
-
349
- interface IBoundingBox {
350
- left: number;
351
- right: number;
352
- top: number;
353
- bottom: number;
354
- }
355
- type BoundingBoxArray = [number, number, number, number];
356
- type BoundingBoxString = `${number},${number},${number},${number}`;
357
- type BoundingBoxLike = IBoundingBox | BoundingBoxArray | BoundingBoxString;
358
- declare class BoundingBox implements IBoundingBox, ISize, IToString {
359
- left: number;
360
- right: number;
361
- top: number;
362
- bottom: number;
363
- get width(): number;
364
- set width(val: number);
365
- get height(): number;
366
- set height(val: number);
367
- static resolve(a: unknown): BoundingBox;
368
- static cast(a: unknown): BoundingBox | undefined;
369
- static is(a: unknown): a is BoundingBoxLike;
370
- constructor(left: number, right: number, top: number, bottom: number);
371
- toArray(): BoundingBoxArray;
372
- toString(): BoundingBoxString;
373
- toJSON(): IBoundingBox;
374
- clone(): BoundingBox;
375
- equals(bbox: BoundingBoxLike): boolean;
376
- toSquare(): Size;
377
- toRectangle(): Rectangle;
378
- inside(a: BoundingBoxLike): boolean;
379
- insidePoint(a: Vec2Like): boolean;
380
- insideCircle(a: CircleLike): boolean;
899
+ static readonly BLOCK_SIZE = 16;
900
+ private _data;
901
+ private _state;
902
+ private _checksum;
903
+ private _length;
904
+ constructor();
905
+ update(input: Uint8Array): this;
906
+ private _transform;
907
+ digest(): Uint8Array;
908
+ toString(): string;
909
+ get [Symbol.toStringTag](): string;
910
+ [NodeJSCustomInspect](): string;
381
911
  }
382
912
 
913
+ declare const MAX_ANGLE_DEGREE = 360;
914
+ declare const clampAngleDegree: (angle: number) => number;
915
+ declare const clampAngleRadian: (angle: number) => number;
916
+ declare const radianToDegree: (angle: number) => number;
917
+ declare const degreeToRadian: (angle: number) => number;
918
+
383
919
  interface ITriangle extends IGeometryObject {
384
920
  readonly a: number;
385
921
  readonly b: number;
@@ -391,14 +927,14 @@ interface ITriangle extends IGeometryObject {
391
927
  readonly height: number;
392
928
  readonly base: number;
393
929
  }
394
- declare abstract class ATriangle<P extends Vec2 | Vec3> implements ITriangle, IToString {
395
- A: P;
396
- B: P;
397
- C: P;
930
+ declare abstract class Triangle<T> implements ITriangle {
931
+ A: T;
932
+ B: T;
933
+ C: T;
398
934
  abstract get a(): number;
399
935
  abstract get b(): number;
400
936
  abstract get c(): number;
401
- constructor(A: P, B: P, C: P);
937
+ constructor(A: T, B: T, C: T);
402
938
  get alpha(): number;
403
939
  get beta(): number;
404
940
  get gamma(): number;
@@ -407,331 +943,77 @@ declare abstract class ATriangle<P extends Vec2 | Vec3> implements ITriangle, IT
407
943
  get area(): number;
408
944
  get base(): number;
409
945
  get height(): number;
946
+ toString(): string;
947
+ get [Symbol.toStringTag](): string;
948
+ [NodeJSCustomInspect](): string;
410
949
  }
411
- declare class Triangle2D extends ATriangle<Vec2> implements IToString {
950
+ declare class Triangle2D extends Triangle<Vec2> {
412
951
  get a(): number;
413
952
  get b(): number;
414
953
  get c(): number;
415
954
  }
416
- declare class Triangle3D extends ATriangle<Vec3> {
955
+ declare class Triangle3D extends Triangle<Vec3> {
417
956
  get a(): number;
418
957
  get b(): number;
419
958
  get c(): number;
420
959
  }
421
960
 
422
- interface IMat4 {
423
- m00: number;
424
- m01: number;
425
- m02: number;
426
- m03: number;
427
- m10: number;
428
- m11: number;
429
- m12: number;
430
- m13: number;
431
- m20: number;
432
- m21: number;
433
- m22: number;
434
- m23: number;
435
- m30: number;
436
- m31: number;
437
- m32: number;
438
- m33: number;
439
- }
440
- type Mat4Array = [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
441
- type Mat4NestedArray = [[number, number, number, number], [number, number, number, number], [number, number, number, number], [number, number, number, number]];
442
- type Mat4String = `${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
443
- type Mat4Like = IMat4 | Mat4Array | Mat4NestedArray | Mat4String | number;
444
- declare class Mat4 implements IMat4 {
445
- protected _raw: Mat4Array;
446
- get m00(): number;
447
- set m00(val: number);
448
- get m01(): number;
449
- set m01(val: number);
450
- get m02(): number;
451
- set m02(val: number);
452
- get m03(): number;
453
- set m03(val: number);
454
- get m10(): number;
455
- set m10(val: number);
456
- get m11(): number;
457
- set m11(val: number);
458
- get m12(): number;
459
- set m12(val: number);
460
- get m13(): number;
461
- set m13(val: number);
462
- get m20(): number;
463
- set m20(val: number);
464
- get m21(): number;
465
- set m21(val: number);
466
- get m22(): number;
467
- set m22(val: number);
468
- get m23(): number;
469
- set m23(val: number);
470
- get m30(): number;
471
- set m30(val: number);
472
- get m31(): number;
473
- set m31(val: number);
474
- get m32(): number;
475
- set m32(val: number);
476
- get m33(): number;
477
- set m33(val: number);
478
- static resolve(a: unknown): Mat4;
479
- static cast(a: unknown): Mat4 | undefined;
480
- static is(a: unknown): a is Mat4Like;
481
- static orthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4;
482
- static perspective(fov: number, aspect: number, near: number, far: number): Mat4;
483
- static pointAt(position: Vec3Like, target: Vec3Like, up: Vec3Like): Mat4;
484
- constructor(init?: Mat4Array);
485
- toArray(): Mat4Array;
486
- toNestetArray(): Mat4NestedArray;
487
- toJSON(): IMat4;
488
- toString(): Mat4String;
489
- clone(): Mat4;
490
- equals(mat: Mat4Like): boolean;
491
- add(mat: Mat4Like): Mat4;
492
- subtract(mat: Mat4Like): Mat4;
493
- multiply(mat: Mat4Like): Mat4;
494
- multiply(scalar: number): Mat4;
495
- multiply(vec: Vec3Like): Vec3;
496
- translate(x: number, y: number, z: number): this;
497
- translate(vec: Vec3Like): this;
498
- rotateX(angle: number): Mat4;
499
- rotateY(angle: number): Mat4;
500
- rotateZ(angle: number): Mat4;
501
- rotate(x: number, y: number, z: number): this;
502
- rotate(vec: Vec3Like): this;
503
- scale(x: number, y: number, z: number): this;
504
- scale(vec: Vec3Like): this;
505
- inverse(): Mat4;
506
- toMat3(): Mat3Like;
507
- }
508
-
509
- interface IMat3 {
510
- m00: number;
511
- m01: number;
512
- m02: number;
513
- m10: number;
514
- m11: number;
515
- m12: number;
516
- m20: number;
517
- m21: number;
518
- m22: number;
519
- }
520
- type Mat3Array = [number, number, number, number, number, number, number, number, number];
521
- type Mat3NestedArray = [[number, number, number], [number, number, number], [number, number, number]];
522
- type Mat3String = `${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
523
- type Mat3Like = IMat3 | Mat3Array | Mat3NestedArray | Mat3String | number;
524
- declare class Mat3 implements IMat3 {
525
- protected _raw: Mat3Array;
526
- get m00(): number;
527
- set m00(val: number);
528
- get m01(): number;
529
- set m01(val: number);
530
- get m02(): number;
531
- set m02(val: number);
532
- get m10(): number;
533
- set m10(val: number);
534
- get m11(): number;
535
- set m11(val: number);
536
- get m12(): number;
537
- set m12(val: number);
538
- get m20(): number;
539
- set m20(val: number);
540
- get m21(): number;
541
- set m21(val: number);
542
- get m22(): number;
543
- set m22(val: number);
544
- static resolve(a: unknown): Mat3;
545
- static cast(a: unknown): Mat3 | undefined;
546
- static is(a: unknown): a is Mat3Like;
547
- static projection(width: number, height: number): Mat3;
548
- constructor(init?: Mat3Array);
549
- toArray(): Mat3Array;
550
- toNestetArray(): Mat3NestedArray;
551
- toJSON(): IMat3;
552
- toString(): Mat3String;
553
- clone(): Mat3;
554
- equals(mat: Mat3Like): boolean;
555
- add(mat: Mat3Like): Mat3;
556
- subtract(mat: Mat3Like): Mat3;
557
- multiply(mat: Mat3Like): Mat3;
558
- multiply(scalar: number): Mat3;
559
- translate(x: number, y: number): Mat3;
560
- translate(vec: Vec2Like): Mat3;
561
- rotate(angle: number): Mat3;
562
- scale(x: number, y: number): Mat3;
563
- scale(vec: Vec2Like): Mat3;
564
- determinant(): number;
565
- inverse(): Mat3;
566
- toMat4(): Mat4Like;
567
- }
568
-
569
- interface IRGB {
570
- red: number;
571
- green: number;
572
- blue: number;
573
- }
574
- type RGBArray = [number, number, number];
575
- type RGBString = `rgb(${number},${number},${number})`;
576
- type RGBLike = IRGB | RGBArray | RGBString;
577
- interface IRBBA extends IRGB {
578
- alpha: number;
579
- }
580
- type RGBAArray = [number, number, number, number];
581
- type RGBAString = `rgba(${number},${number},${number},${number})`;
582
- type RGBALike = IRBBA | RGBAArray | RGBAString;
583
- type IAnyRGB = IRGB | IRBBA;
584
- type AnyRGBArray = RGBArray | RGBAArray;
585
- type AnyRGBString = RGBString | RGBAString;
586
- type AnyRGBLike = IAnyRGB | AnyRGBArray | AnyRGBString | HexLike | number;
587
- declare class RGBAColor implements IRBBA {
588
- private _red;
589
- get red(): number;
590
- set red(val: number);
591
- private _green;
592
- get green(): number;
593
- set green(val: number);
594
- private _blue;
595
- get blue(): number;
596
- set blue(val: number);
597
- private _alpha;
598
- get alpha(): number;
599
- set alpha(val: number);
600
- static resolve(a: unknown): RGBAColor;
601
- static cast(a: unknown): RGBAColor | undefined;
602
- static is(a: unknown): a is AnyRGBLike;
603
- constructor(red: number, green: number, blue: number, alpha?: number);
604
- toArray(withAlpha?: boolean): AnyRGBArray;
605
- toJSON(withAlpha?: boolean): IAnyRGB;
606
- toString(withAlpha?: boolean): AnyRGBString;
607
- toHSL(withAlpha?: boolean): HSLColor;
608
- invert(withAlpha?: boolean): RGBAColor;
609
- }
610
- interface IHSL {
611
- hue: number;
612
- saturation: number;
613
- luminace: number;
614
- }
615
- type HSLArray = [number, number, number];
616
- type HSLString = `hsl(${number},${number},${number})`;
617
- type HSLLike = IHSL | HSLArray | HSLString;
618
- interface IHSLA extends IHSL {
619
- alpha: number;
620
- }
621
- type HSLAArray = [number, number, number, number];
622
- type HSLAString = `hsla(${number},${number},${number},${number})`;
623
- type HSLALike = IHSLA | HSLAArray | HSLAString;
624
- type IAnyHSL = IHSL | IHSLA;
625
- type AnyHSLArray = HSLArray | HSLAArray;
626
- type AnyHSLString = HSLString | HSLAString;
627
- type AnyHSLLike = IAnyHSL | AnyHSLArray | AnyHSLString | HexLike | number;
628
- declare class HSLColor implements IHSLA {
629
- private _hue;
630
- get hue(): number;
631
- set hue(val: number);
632
- private _saturation;
633
- get saturation(): number;
634
- set saturation(val: number);
635
- private _luminace;
636
- get luminace(): number;
637
- set luminace(val: number);
638
- private _alpha;
639
- get alpha(): number;
640
- set alpha(val: number);
641
- static resolve(a: unknown): HSLColor;
642
- static cast(a: unknown): HSLColor | undefined;
643
- static is(a: unknown): boolean;
644
- constructor(hue: number, saturation: number, luminace: number, alpha?: number);
645
- toArray(withAlpha?: boolean): AnyHSLArray;
646
- toJSON(withAlpha?: boolean): IAnyHSL;
647
- toString(withAlpha?: boolean): AnyHSLString;
648
- toRGB(withAlpha?: boolean): RGBAColor;
649
- invert(withAlpha?: boolean): HSLColor;
650
- }
651
- type AnyColor = RGBAColor | HSLColor;
652
- type AnyColorArray = AnyRGBArray | AnyHSLArray;
653
- type AnyColorString = AnyRGBString | AnyHSLString;
654
- type IColor = IAnyRGB | IAnyHSL;
655
- type AnyColorLike = AnyColorArray | AnyColorString | IColor | HexLike | number;
656
- declare function resolveColor(a: unknown, preferHSL?: boolean): AnyColor;
657
- declare function castColor(a: unknown, preferHSL?: boolean): AnyColor | undefined;
658
-
659
- interface IQuaternion {
660
- w: number;
661
- x: number;
662
- y: number;
663
- z: number;
664
- }
665
- type QuaternionArray = [number, number, number, number];
666
- type QuaternionString = `${number} + ${number}i + ${number}j + ${number}k`;
667
- type QuaternionLike = IQuaternion | QuaternionArray | QuaternionString;
668
- declare class Quaternion {
669
- w: number;
670
- x: number;
671
- y: number;
672
- z: number;
673
- static is(a: unknown): a is IQuaternion;
674
- static resolve(a: unknown): Quaternion;
675
- static cast(a: unknown): Quaternion | undefined;
676
- static fromAxisAngle(axis: Vec3Like, angle: number): Quaternion;
677
- static fromEuler(x: number, y: number, z: number): Quaternion;
678
- static fromEuler(vec: Vec3Like): Quaternion;
679
- constructor(w?: number, x?: number, y?: number, z?: number);
680
- toArray(): QuaternionArray;
681
- toString(): QuaternionString;
682
- toJSON(): IQuaternion;
683
- clone(): Quaternion;
684
- add(a: QuaternionLike): Quaternion;
685
- offset(a: QuaternionLike): this;
686
- subtract(a: QuaternionLike): Quaternion;
687
- negative(): Quaternion;
688
- length(sqrt?: boolean): number;
689
- normalize(): Quaternion;
690
- multiply(a: QuaternionLike): Quaternion;
691
- multiplyVector(x: number, y: number, z: number): Vec3;
692
- multiplyVector(vec: Vec3Like): Vec3;
693
- scale(scalar: number): Quaternion;
694
- dot(a: QuaternionLike): number;
695
- inverse(): Quaternion;
696
- divide(a: QuaternionLike): Quaternion;
697
- conjugate(): Quaternion;
698
- exp(): Quaternion;
699
- log(): Quaternion;
700
- toVector(): Vec3;
701
- toAxisAngle(): Vec3;
702
- toEuler(): Vec3;
961
+ declare class Transform2D implements IToMat3, IToString {
962
+ parent?: Transform2D | undefined;
963
+ origin: Vec2;
964
+ localPosition: Vec2;
965
+ localRotation: number;
966
+ get localRotationDegree(): number;
967
+ set localRotationDegree(v: number);
968
+ localScale: Vec2;
969
+ get globalPosition(): Vec2;
970
+ get globalRotation(): number;
971
+ get globalRotationDegree(): number;
972
+ get globalScale(): Vec2;
973
+ constructor(position: Vec2Like, rotation: number, scale: Vec2Like, parent?: Transform2D | undefined);
974
+ toString(): string;
975
+ get [Symbol.toStringTag](): string;
976
+ [NodeJSCustomInspect](): string;
703
977
  toMat3(): Mat3;
704
- toMat4(): Mat4;
978
+ toGlobalMat3(): Mat3;
705
979
  }
706
-
707
980
  /**
708
981
  * Represents a 3D transform for 3D graphics
709
982
  */
710
- declare class Transform {
983
+ declare class Transform3D implements IToMat4, IToString {
984
+ parent?: Transform3D | undefined;
985
+ origin: Vec3;
711
986
  /**
712
- * The position of the object
987
+ * The local position
713
988
  */
714
- position: Vec3;
989
+ localPosition: Vec3;
715
990
  /**
716
- * The rotation of the object
991
+ * The local rotation
717
992
  */
718
- rotation: Quaternion;
993
+ localRotation: Quaternion;
719
994
  /**
720
- * The scale of the object
995
+ * The local scale
721
996
  */
722
- scale: Vec3;
997
+ localScale: Vec3;
998
+ get globalPosition(): Vec3;
999
+ get globalRotation(): Quaternion;
1000
+ get globalScale(): Vec3;
723
1001
  /**
724
1002
  * Create a new transform with `position`, `rotation` and `scale`
725
1003
  * @param position The position as a Vec3
726
1004
  * @param rotation The rotation as a Quaternion
727
1005
  * @param scale The scale as a Vec3
728
1006
  */
729
- constructor(position: Vec3Like, rotation: QuaternionLike, scale: Vec3Like);
1007
+ constructor(position: Vec3Like, rotation: QuaternionLike, scale: Vec3Like, parent?: Transform3D | undefined);
1008
+ toString(): string;
1009
+ get [Symbol.toStringTag](): string;
1010
+ [NodeJSCustomInspect](): string;
730
1011
  /**
731
1012
  * Convert the transform into a 4x3 matrix
732
1013
  * @returns A 4x4 matrix from the transform
733
1014
  */
734
1015
  toMat4(): Mat4;
1016
+ toGlobalMat4(): Mat4;
735
1017
  }
736
1018
 
737
1019
  /**
@@ -748,7 +1030,8 @@ declare function clamp<T extends number | bigint>(value: T, min: T, max: T): T;
748
1030
  * @param b The input value b
749
1031
  * @returns The result
750
1032
  */
751
- declare function log_hypot(a: number, b: number): number;
1033
+ declare function logHypot(a: number, b: number): number;
752
1034
  declare const EPSILON = 1e-16;
1035
+ declare const lerp: <T extends number | bigint>(a: T, b: T, t: T) => number;
753
1036
 
754
- export { ATriangle, type AnyColor, type AnyColorArray, type AnyColorLike, type AnyColorString, type AnyHSLArray, type AnyHSLLike, type AnyHSLString, type AnyRGBArray, type AnyRGBLike, type AnyRGBString, BoundingBox, type BoundingBoxArray, type BoundingBoxLike, type BoundingBoxString, Circle, type CircleArray, type CircleLike, type CircleString, DJB2_OFFSET, EPSILON, FNV1_OFFSET, FNV1_PRIME, type HSLAArray, type HSLALike, type HSLAString, type HSLArray, HSLColor, type HSLLike, type HSLString, type HexDigit, type HexLike, type IAnyHSL, type IAnyRGB, type IBoundingBox, type ICircle, type IColor, type IGeometryObject, type IHSL, type IHSLA, type IHash, type IMat3, type IMat4, type IQuaternion, type IRBBA, type IRGB, type IRectangle, type ISize, type IToString, type ITriangle, type IVec2, type IVec3, type JavaScriptTypeMap, type JavaScriptTypes, LinearFunction, type LinearFunctionString, MAX_ANGLE_DEGREE, MD2, Mat3, type Mat3Array, type Mat3Like, type Mat3NestedArray, type Mat3String, Mat4, type Mat4Array, type Mat4Like, type Mat4NestedArray, type Mat4String, MathFunction, type Predicate, QuadFunction, type QuadFunctionString, type QuadFunctionStrings, type QuadFunctionType, Quaternion, type QuaternionArray, type QuaternionLike, type QuaternionString, type RGBAArray, RGBAColor, type RGBALike, type RGBAString, type RGBArray, type RGBLike, type RGBString, Rectangle, type RectangleArray, type RectangleLike, type RectangleString, ResolveError, Size, type SizeArguments, type SizeArray, type SizeLike, type SizeString, Transform, Triangle2D, Triangle3D, Vec2, type Vec2Arguments, type Vec2Array, type Vec2Like, type Vec2String, Vec3, type Vec3Arguments, type Vec3Array, type Vec3Like, type Vec3String, cap_angle_degree, cap_angle_radian, castColor, check_array, check_hex, check_hex_digit, check_number, check_number_array, check_string, check_string_array, clamp, degree_to_radian, djb2, fnv1, get_hex_part, has_property, log_hypot, radian_to_degree, resolveColor, sdbm, sign_char, stringify };
1037
+ export { AnyColor, type AnyColorArguments, type AnyColorArray, type AnyColorLike, type AnyColorString, type AnyHSLArguments, type AnyHSLArray, type AnyHSLLike, type AnyHSLString, type AnyRGBArguments, type AnyRGBArray, type AnyRGBLike, type AnyRGBString, BoundingBox, type BoundingBoxArgs, type BoundingBoxArray, type BoundingBoxLike, type BoundingBoxString, Circle, type CircleArguments, type CircleArray, type CircleLike, type CircleString, DJB2_OFFSET, EPSILON, FNV1_OFFSET, FNV1_PRIME, type FixedArray, HSLA, type HSLAArguments, type HSLAArray, type HSLALike, type HSLAString, type HSLArguments, type HSLArray, type HSLLike, type HSLString, type HexLike, type IAnyColor, type IAnyHSL, type IAnyRGB, type IAnyToColor, type IAnyToHSL, type IAnyToRGB, type IBoundingBox, type ICircle, type IGeometryObject, type IHSL, type IHSLA, type IHash, type IMat3, type IMat4, type IQuaternion, type IRBBA, type IRGB, type IRectangle, type ISize, type IToBoundingBox, type IToCircle, type IToHSL, type IToHSLA, type IToMat3, type IToMat4, type IToQuaternion, type IToRGB, type IToRGBA, type IToRectangle, type IToSize, type IToVec2, type IToVec3, type ITriangle, type IVec2, type IVec3, type JavaScriptFunction, type JavaScriptNumber, type JavaScriptTypeMap, type JavaScriptTypes, LinearFunction, type LinearFunctionString, MAX_ANGLE_DEGREE, MD2, Mat3, type Mat3Arguments, type Mat3Array, type Mat3Like, type Mat3NestedArray, type Mat3String, Mat4, type Mat4Arguments, type Mat4Array, type Mat4Like, type Mat4NestedArray, type Mat4String, MathFunction, NodeJSCustomInspect, type Predicate, QuadFunction, type QuadFunctionString, type QuadFunctionStrings, type QuadFunctionType, Quaternion, type QuaternionArguments, type QuaternionArray, type QuaternionLike, type QuaternionString, RGBA, type RGBAArguments, type RGBAArray, type RGBALike, type RGBAString, type RGBArguments, type RGBArray, type RGBLike, type RGBString, Rectangle, type RectangleArguments, type RectangleArray, type RectangleLike, type RectangleString, ResolveError, type SignCharacter, Size, type SizeArguments, type SizeArray, type SizeLike, type SizeString, Transform2D, Transform3D, Triangle, Triangle2D, Triangle3D, Vec2, type Vec2Arguments, type Vec2Array, type Vec2Like, type Vec2String, Vec3, type Vec3Arguments, type Vec3Array, type Vec3Like, type Vec3String, checkArray, checkHex, checkNumber, checkNumberArray, checkString, checkStringArray, clamp, clampAngleDegree, clampAngleRadian, degreeToRadian, djb2, fnv1, getHexValue, hasProperty, lerp, logHypot, radianToDegree, sdbm, signCharacter };