@woosh/meep-engine 2.123.4 → 2.123.6

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.
Files changed (30) hide show
  1. package/package.json +1 -1
  2. package/src/core/collection/RingBuffer.d.ts.map +1 -1
  3. package/src/core/collection/RingBuffer.js +9 -0
  4. package/src/core/geom/Quaternion.d.ts +48 -7
  5. package/src/core/geom/Quaternion.d.ts.map +1 -1
  6. package/src/core/geom/Quaternion.js +48 -7
  7. package/src/engine/development/performance/AbstractMetric.d.ts +12 -0
  8. package/src/engine/development/performance/AbstractMetric.d.ts.map +1 -1
  9. package/src/engine/development/performance/AbstractMetric.js +21 -0
  10. package/src/engine/development/performance/MetricCollection.d.ts +26 -2
  11. package/src/engine/development/performance/MetricCollection.d.ts.map +1 -1
  12. package/src/engine/development/performance/MetricCollection.js +32 -3
  13. package/src/engine/development/performance/MetricStatistics.js +1 -1
  14. package/src/engine/development/performance/RingBufferMetric.d.ts +14 -1
  15. package/src/engine/development/performance/RingBufferMetric.d.ts.map +1 -1
  16. package/src/engine/development/performance/RingBufferMetric.js +17 -1
  17. package/src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.d.ts +10 -1
  18. package/src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.d.ts.map +1 -1
  19. package/src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.js +12 -3
  20. package/src/engine/development/performance/monitor/PeriodicConsolePrinter.d.ts.map +1 -1
  21. package/src/engine/development/performance/monitor/PeriodicConsolePrinter.js +5 -0
  22. package/src/engine/ecs/guid/UUID.d.ts +2 -1
  23. package/src/engine/ecs/guid/UUID.d.ts.map +1 -1
  24. package/src/engine/ecs/guid/UUID.js +45 -31
  25. package/src/engine/ecs/transform/Transform.d.ts +12 -2
  26. package/src/engine/ecs/transform/Transform.d.ts.map +1 -1
  27. package/src/engine/ecs/transform/Transform.js +19 -1
  28. package/src/engine/ecs/transform/TransformFlags.d.ts +3 -0
  29. package/src/engine/ecs/transform/TransformFlags.d.ts.map +1 -1
  30. package/src/engine/ecs/transform/TransformFlags.js +1 -0
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.123.4",
8
+ "version": "2.123.6",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"RingBuffer.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/RingBuffer.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAFa,CAAC;IAGV;;OAEG;IACH,kBAFW,MAAM,EAoChB;IA7BG;;;OAGG;IACH,MAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,OAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,MAFU,CAAC,EAAE,CAEc;IAG/B;;;OAGG;IACH,iBAFW,MAAM,QAsBhB;IAED;;;OAGG;IACH,WAFY,CAAC,CAIZ;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,CAAC,CAUb;IAED,cAIC;IAED;;;OAGG;IACH,cAFW,CAAC,QAuBX;IAED;;;OAGG;IACH,SAFa,CAAC,GAAC,SAAS,CAcvB;IAED;;;OAGG;IACH,4BAFW,MAAM,QA8BhB;IAED;;;;;OAKG;IACH,oBAJW,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,YACnB,GAAC,GACC,CAAC,GAAC,SAAS,CAoBvB;IAED;;;;OAIG;IACH,iBAHW,CAAS,IAAC,EAAD,CAAC,QAAC,YACX,GAAC,QAgBX;IAED;;;;OAIG;IACH,gBAHW,CAAC,GACC,OAAO,CAInB;CACJ"}
1
+ {"version":3,"file":"RingBuffer.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/RingBuffer.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAFa,CAAC;IAGV;;OAEG;IACH,kBAFW,MAAM,EAoChB;IA7BG;;;OAGG;IACH,MAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,OAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,MAFU,CAAC,EAAE,CAEc;IAG/B;;;OAGG;IACH,iBAFW,MAAM,QAwBhB;IAED;;;OAGG;IACH,WAFY,CAAC,CAIZ;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,CAAC,CAYb;IAED,cAIC;IAED;;;OAGG;IACH,cAFW,CAAC,QAuBX;IAED;;;OAGG;IACH,SAFa,CAAC,GAAC,SAAS,CAcvB;IAED;;;OAGG;IACH,4BAFW,MAAM,QA8BhB;IAED;;;;;OAKG;IACH,oBAJW,CAAS,IAAC,EAAD,CAAC,KAAE,OAAO,YACnB,GAAC,GACC,CAAC,GAAC,SAAS,CAsBvB;IAED;;;;OAIG;IACH,iBAHW,CAAS,IAAC,EAAD,CAAC,QAAC,YACX,GAAC,QAkBX;IAED;;;;OAIG;IACH,gBAHW,CAAC,GACC,OAAO,CAKnB;CACJ"}
@@ -52,6 +52,8 @@ export class RingBuffer {
52
52
  * @param {number} new_size
53
53
  */
54
54
  resize(new_size) {
55
+ assert.isNonNegativeInteger(new_size, 'new_size');
56
+ assert.greaterThan(new_size, 0, `new_size`);
55
57
 
56
58
  if (new_size === this.size) {
57
59
  // already the right size
@@ -87,6 +89,8 @@ export class RingBuffer {
87
89
  * @returns {V}
88
90
  */
89
91
  getFromHead(offset) {
92
+ assert.isNonNegativeInteger(offset, 'offset');
93
+
90
94
  let i = this.head - (offset + 1);
91
95
 
92
96
  while (i < 0) {
@@ -188,6 +192,8 @@ export class RingBuffer {
188
192
  * @returns {V|undefined}
189
193
  */
190
194
  removeIf(condition, thisArg) {
195
+ assert.isFunction(condition, 'condition');
196
+
191
197
  const count = this.count;
192
198
  const size = this.size;
193
199
 
@@ -213,6 +219,8 @@ export class RingBuffer {
213
219
  * @param {*} [thisArg]
214
220
  */
215
221
  forEach(visitor, thisArg) {
222
+ assert.isFunction(visitor, 'visitor');
223
+
216
224
  const count = this.count;
217
225
  const size = this.size;
218
226
 
@@ -234,6 +242,7 @@ export class RingBuffer {
234
242
  * @returns {boolean}
235
243
  */
236
244
  contains(value) {
245
+ // TODO do a bounds check
237
246
  return this.data.indexOf(value) !== -1;
238
247
  }
239
248
  }
@@ -73,13 +73,45 @@ export class Quaternion {
73
73
  * @type {Signal<number, number, number, number, number, number, number, number>}
74
74
  */
75
75
  readonly onChanged: Signal<number, number, number, number, number, number, number, number>;
76
+ /**
77
+ *
78
+ * @param {number} v
79
+ */
76
80
  set 0(v: number);
81
+ /**
82
+ *
83
+ * @return {number}
84
+ */
77
85
  get 0(): number;
86
+ /**
87
+ *
88
+ * @param {number} v
89
+ */
78
90
  set 1(v: number);
91
+ /**
92
+ *
93
+ * @return {number}
94
+ */
79
95
  get 1(): number;
96
+ /**
97
+ *
98
+ * @param {number} v
99
+ */
80
100
  set 2(v: number);
101
+ /**
102
+ *
103
+ * @return {number}
104
+ */
81
105
  get 2(): number;
106
+ /**
107
+ *
108
+ * @param {number} v
109
+ */
82
110
  set 3(v: number);
111
+ /**
112
+ *
113
+ * @return {number}
114
+ */
83
115
  get 3(): number;
84
116
  /**
85
117
  * Orient quaternion on a `forward` vector, with the spin matching `up` vector
@@ -90,8 +122,9 @@ export class Quaternion {
90
122
  * @param {number} ux up vector
91
123
  * @param {number} uy up vector
92
124
  * @param {number} uz up vector
125
+ * @returns {this}
93
126
  */
94
- _lookRotation(fx: number, fy: number, fz: number, ux: number, uy: number, uz: number): void;
127
+ _lookRotation(fx: number, fy: number, fz: number, ux: number, uy: number, uz: number): this;
95
128
  /**
96
129
  *
97
130
  * @param {Vector3} forward
@@ -111,8 +144,9 @@ export class Quaternion {
111
144
  copyInverse(other: Quaternion): void;
112
145
  /**
113
146
  * Calculates the inverse
147
+ * @returns {this}
114
148
  */
115
- invert(): void;
149
+ invert(): this;
116
150
  /**
117
151
  * Returns angle between this orientation and another
118
152
  * @param {Quaternion} other
@@ -402,7 +436,12 @@ export class Quaternion {
402
436
  z: number;
403
437
  w: number;
404
438
  };
405
- fromJSON(obj: any): void;
439
+ /**
440
+ *
441
+ * @param obj
442
+ * @return {this}
443
+ */
444
+ fromJSON(obj: any): this;
406
445
  /**
407
446
  *
408
447
  * @param {BinaryBuffer} buffer
@@ -438,9 +477,10 @@ export class Quaternion {
438
477
  /**
439
478
  *
440
479
  * @param {number[]} array
441
- * @param {number} offset
480
+ * @param {number} [offset]
481
+ * @returns {this}
442
482
  */
443
- readFromArray(array: number[], offset?: number): void;
483
+ readFromArray(array: number[], offset?: number): this;
444
484
  /**
445
485
  *
446
486
  * @param {number[]} [array]
@@ -483,7 +523,7 @@ export class Quaternion {
483
523
  */
484
524
  random(random?: () => number): Quaternion;
485
525
  toString(): string;
486
- fromArray: (array: number[], offset?: number) => void;
526
+ fromArray: (array: number[], offset?: number) => Quaternion;
487
527
  toArray: (array?: number[], offset?: number) => number[];
488
528
  asArray: (array?: number[], offset?: number) => number[];
489
529
  fromEulerAngles: (x: number, y: number, z: number) => Quaternion;
@@ -495,8 +535,9 @@ export class Quaternion {
495
535
  readonly isQuaternion: boolean;
496
536
  /**
497
537
  * Making quaternion iterable
538
+ * @returns {Generator<number>}
498
539
  */
499
- [Symbol.iterator](): Generator<number, void, unknown>;
540
+ [Symbol.iterator](): Generator<number>;
500
541
  }
501
542
  export namespace Quaternion {
502
543
  let identity: Quaternion;
@@ -1 +1 @@
1
- {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
@@ -72,40 +72,73 @@ export class Quaternion {
72
72
 
73
73
  // Making Quaternion comply to array interface
74
74
 
75
+ /**
76
+ *
77
+ * @return {number}
78
+ */
75
79
  get 0() {
76
80
  return this.x;
77
81
  }
78
82
 
83
+ /**
84
+ *
85
+ * @return {number}
86
+ */
79
87
  get 1() {
80
88
  return this.y;
81
89
  }
82
90
 
91
+ /**
92
+ *
93
+ * @return {number}
94
+ */
83
95
  get 2() {
84
96
  return this.z;
85
97
  }
86
98
 
99
+ /**
100
+ *
101
+ * @return {number}
102
+ */
87
103
  get 3() {
88
104
  return this.w;
89
105
  }
90
106
 
107
+ /**
108
+ *
109
+ * @param {number} v
110
+ */
91
111
  set 0(v) {
92
112
  this.x = v;
93
113
  }
94
114
 
115
+ /**
116
+ *
117
+ * @param {number} v
118
+ */
95
119
  set 1(v) {
96
120
  this.y = v;
97
121
  }
98
122
 
123
+ /**
124
+ *
125
+ * @param {number} v
126
+ */
99
127
  set 2(v) {
100
128
  this.z = v;
101
129
  }
102
130
 
131
+ /**
132
+ *
133
+ * @param {number} v
134
+ */
103
135
  set 3(v) {
104
136
  this.w = v;
105
137
  }
106
138
 
107
139
  /**
108
140
  * Making quaternion iterable
141
+ * @returns {Generator<number>}
109
142
  */
110
143
  * [Symbol.iterator]() {
111
144
 
@@ -126,6 +159,7 @@ export class Quaternion {
126
159
  * @param {number} ux up vector
127
160
  * @param {number} uy up vector
128
161
  * @param {number} uz up vector
162
+ * @returns {this}
129
163
  */
130
164
  _lookRotation(
131
165
  fx, fy, fz,
@@ -173,7 +207,7 @@ export class Quaternion {
173
207
  const m12 = scratch_v3_a.y;
174
208
  const m22 = scratch_v3_a.z;
175
209
 
176
- this.__setFromRotationMatrix(
210
+ return this.__setFromRotationMatrix(
177
211
  m00, m01, m02,
178
212
  m10, m11, m12,
179
213
  m20, m21, m22
@@ -218,6 +252,7 @@ export class Quaternion {
218
252
 
219
253
  /**
220
254
  * Calculates the inverse
255
+ * @returns {this}
221
256
  */
222
257
  invert() {
223
258
  const x = this.x;
@@ -228,8 +263,8 @@ export class Quaternion {
228
263
  const length_sqr = x * x + y * y + z * z + w * w;
229
264
 
230
265
  if (length_sqr === 0) {
231
- this.set(0, 0, 0, 1);
232
- return;
266
+ // 0 magnitude, avoid division by 0 and set identity (arbitrage)
267
+ return this.set(0, 0, 0, 1);
233
268
  }
234
269
 
235
270
  const invDot = 1.0 / length_sqr;
@@ -239,7 +274,7 @@ export class Quaternion {
239
274
  const _z = -z * invDot;
240
275
  const _w = w * invDot;
241
276
 
242
- this.set(_x, _y, _z, _w);
277
+ return this.set(_x, _y, _z, _w);
243
278
  }
244
279
 
245
280
  /**
@@ -1259,8 +1294,13 @@ export class Quaternion {
1259
1294
  };
1260
1295
  }
1261
1296
 
1297
+ /**
1298
+ *
1299
+ * @param obj
1300
+ * @return {this}
1301
+ */
1262
1302
  fromJSON(obj) {
1263
- this.set(obj.x, obj.y, obj.z, obj.w);
1303
+ return this.set(obj.x, obj.y, obj.z, obj.w);
1264
1304
  }
1265
1305
 
1266
1306
  /**
@@ -1332,10 +1372,11 @@ export class Quaternion {
1332
1372
  /**
1333
1373
  *
1334
1374
  * @param {number[]} array
1335
- * @param {number} offset
1375
+ * @param {number} [offset]
1376
+ * @returns {this}
1336
1377
  */
1337
1378
  readFromArray(array, offset = 0) {
1338
- this.set(
1379
+ return this.set(
1339
1380
  array[offset],
1340
1381
  array[offset + 1],
1341
1382
  array[offset + 2],
@@ -15,6 +15,18 @@ export class AbstractMetric {
15
15
  * @returns {boolean} whether metric was successfully computed or not
16
16
  */
17
17
  computeStats(result: MetricStatistics): boolean;
18
+ /**
19
+ * Shortcut to {@link computeStats}
20
+ * Use the other one if you want to avoid memory allocation
21
+ * @return {MetricStatistics}
22
+ */
23
+ get stats(): MetricStatistics;
18
24
  clear(): void;
25
+ /**
26
+ * @readonly
27
+ * @type {boolean}
28
+ */
29
+ readonly isMetric: boolean;
19
30
  }
31
+ import { MetricStatistics } from "./MetricStatistics.js";
20
32
  //# sourceMappingURL=AbstractMetric.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractMetric.d.ts","sourceRoot":"","sources":["../../../../../src/engine/development/performance/AbstractMetric.js"],"names":[],"mappings":"AAAA;IACI;;;;OAIG;IACH,cAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;OAEG;IACH,iBAFa,MAAM,GAAC,SAAS,CAI5B;IAED;;;;OAIG;IACH,qBAHW,gBAAgB,GACd,OAAO,CAInB;IAED,cAEC;CACJ"}
1
+ {"version":3,"file":"AbstractMetric.d.ts","sourceRoot":"","sources":["../../../../../src/engine/development/performance/AbstractMetric.js"],"names":[],"mappings":"AAEA;IACI;;;;OAIG;IACH,cAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;OAEG;IACH,iBAFa,MAAM,GAAC,SAAS,CAI5B;IAED;;;;OAIG;IACH,qBAHW,gBAAgB,GACd,OAAO,CAInB;IAED;;;;OAIG;IACH,aAFY,gBAAgB,CAQ3B;IAED,cAEC;IAGL;;;OAGG;IACH,mBAFU,OAAO,CAEgB;CANhC;iCA5CgC,uBAAuB"}
@@ -1,3 +1,5 @@
1
+ import { MetricStatistics } from "./MetricStatistics.js";
2
+
1
3
  export class AbstractMetric {
2
4
  /**
3
5
  *
@@ -24,7 +26,26 @@ export class AbstractMetric {
24
26
  throw new Error('Not implemented');
25
27
  }
26
28
 
29
+ /**
30
+ * Shortcut to {@link computeStats}
31
+ * Use the other one if you want to avoid memory allocation
32
+ * @return {MetricStatistics}
33
+ */
34
+ get stats() {
35
+ const stats = new MetricStatistics();
36
+
37
+ this.computeStats(stats);
38
+
39
+ return stats;
40
+ }
41
+
27
42
  clear() {
28
43
  throw new Error('Not implemented');
29
44
  }
30
45
  }
46
+
47
+ /**
48
+ * @readonly
49
+ * @type {boolean}
50
+ */
51
+ AbstractMetric.prototype.isMetric = true;
@@ -1,19 +1,43 @@
1
+ /**
2
+ * A class for managing a collection of metrics where each metric can store data and be accessed by name.
3
+ * Provides functionality to add, retrieve, list, and clear metrics.
4
+ *
5
+ * @example
6
+ * const metrics = new MetricCollection();
7
+ * metrics.create({name: "execution time"});
8
+ *
9
+ * // ... record metrics
10
+ * const t0 = performance.now();
11
+ * do_expensive_computation();
12
+ * const t1 = performance.now();
13
+ *
14
+ * metrics.get("execution time").record(t1 - t0);
15
+ *
16
+ * // ... read stats
17
+ * const stats = metrics.get("execution time").stats;
18
+ *
19
+ * console.log(`Average execution time: ${stats.mean}`);
20
+ */
1
21
  export class MetricCollection {
2
22
  /**
3
23
  * @private
4
24
  * @type {Map<string, AbstractMetric>}
5
25
  */
6
26
  private data;
27
+ /**
28
+ * Clear all data records.
29
+ * Note: does not remove any metrics, just the data within them
30
+ */
7
31
  clear(): void;
8
32
  /**
9
- *
33
+ * Get names of available metrics
10
34
  * @returns {string[]}
11
35
  */
12
36
  list(): string[];
13
37
  /**
14
38
  *
15
39
  * @param {string} name
16
- * @param {number} [buffer_size]
40
+ * @param {number} [buffer_size] The larger this number is - the more detail metric can hold. If you plan to compute statistics, this is your sample size.
17
41
  * @returns {AbstractMetric}
18
42
  */
19
43
  create({ name, buffer_size }: string): AbstractMetric;
@@ -1 +1 @@
1
- {"version":3,"file":"MetricCollection.d.ts","sourceRoot":"","sources":["../../../../../src/engine/development/performance/MetricCollection.js"],"names":[],"mappings":"AAGA;IAEI;;;OAGG;IACH,aAAiB;IAEjB,cAIC;IAED;;;OAGG;IACH,QAFa,MAAM,EAAE,CAIpB;IAED;;;;;OAKG;IACH,8BAJW,MAAM,GAEJ,cAAc,CAQ1B;IAED;;;;OAIG;IACH,UAHW,MAAM,UACN,cAAc,QAMxB;IAED;;;;OAIG;IACH,UAHW,MAAM,GACJ,cAAc,GAAC,SAAS,CAIpC;CACJ"}
1
+ {"version":3,"file":"MetricCollection.d.ts","sourceRoot":"","sources":["../../../../../src/engine/development/performance/MetricCollection.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAEI;;;OAGG;IACH,aAAiB;IAEjB;;;OAGG;IACH,cAIC;IAED;;;OAGG;IACH,QAFa,MAAM,EAAE,CAIpB;IAED;;;;;OAKG;IACH,8BAJW,MAAM,GAEJ,cAAc,CAQ1B;IAED;;;;OAIG;IACH,UAHW,MAAM,UACN,cAAc,QASxB;IAED;;;;OAIG;IACH,UAHW,MAAM,GACJ,cAAc,GAAC,SAAS,CAMpC;CACJ"}
@@ -1,6 +1,26 @@
1
1
  import { assert } from "../../../core/assert.js";
2
2
  import { RingBufferMetric } from "./RingBufferMetric.js";
3
3
 
4
+ /**
5
+ * A class for managing a collection of metrics where each metric can store data and be accessed by name.
6
+ * Provides functionality to add, retrieve, list, and clear metrics.
7
+ *
8
+ * @example
9
+ * const metrics = new MetricCollection();
10
+ * metrics.create({name: "execution time"});
11
+ *
12
+ * // ... record metrics
13
+ * const t0 = performance.now();
14
+ * do_expensive_computation();
15
+ * const t1 = performance.now();
16
+ *
17
+ * metrics.get("execution time").record(t1 - t0);
18
+ *
19
+ * // ... read stats
20
+ * const stats = metrics.get("execution time").stats;
21
+ *
22
+ * console.log(`Average execution time: ${stats.mean}`);
23
+ */
4
24
  export class MetricCollection {
5
25
 
6
26
  /**
@@ -9,6 +29,10 @@ export class MetricCollection {
9
29
  */
10
30
  data = new Map();
11
31
 
32
+ /**
33
+ * Clear all data records.
34
+ * Note: does not remove any metrics, just the data within them
35
+ */
12
36
  clear() {
13
37
  this.data.forEach((value, key) => {
14
38
  value.clear();
@@ -16,7 +40,7 @@ export class MetricCollection {
16
40
  }
17
41
 
18
42
  /**
19
- *
43
+ * Get names of available metrics
20
44
  * @returns {string[]}
21
45
  */
22
46
  list() {
@@ -26,10 +50,10 @@ export class MetricCollection {
26
50
  /**
27
51
  *
28
52
  * @param {string} name
29
- * @param {number} [buffer_size]
53
+ * @param {number} [buffer_size] The larger this number is - the more detail metric can hold. If you plan to compute statistics, this is your sample size.
30
54
  * @returns {AbstractMetric}
31
55
  */
32
- create({ name, buffer_size = 1000 }) {
56
+ create({ name, buffer_size = 128 }) {
33
57
  const metric = new RingBufferMetric(buffer_size);
34
58
 
35
59
  this.add(name, metric);
@@ -44,6 +68,9 @@ export class MetricCollection {
44
68
  */
45
69
  add(name, metric) {
46
70
  assert.isString(name, 'name');
71
+ assert.defined(metric, 'metric');
72
+ assert.isObject(metric, "metric");
73
+ assert.equal(metric.isMetric, true, "metric");
47
74
 
48
75
  this.data.set(name, metric);
49
76
  }
@@ -54,6 +81,8 @@ export class MetricCollection {
54
81
  * @returns {AbstractMetric|undefined}
55
82
  */
56
83
  get(name) {
84
+ assert.isString(name, 'name');
85
+
57
86
  return this.data.get(name);
58
87
  }
59
88
  }
@@ -5,6 +5,6 @@ export class MetricStatistics {
5
5
  min = 0;
6
6
 
7
7
  toString() {
8
- return `{min:${this.min}, max:${this.max}, mean:${this.mean}, median:${this.median}`;
8
+ return `{ min:${this.min}, max:${this.max}, mean:${this.mean}, median:${this.median} }`;
9
9
  }
10
10
  }
@@ -1,4 +1,12 @@
1
+ /**
2
+ * Metric container with a limited size and great performance characteristics.
3
+ * Does not allocate memory during usage.
4
+ */
1
5
  export class RingBufferMetric extends AbstractMetric {
6
+ /**
7
+ *
8
+ * @param {number} [size] how many records should the ring-buffer hold?
9
+ */
2
10
  constructor(size?: number);
3
11
  /**
4
12
  *
@@ -12,8 +20,13 @@ export class RingBufferMetric extends AbstractMetric {
12
20
  * @param {number} size
13
21
  */
14
22
  resize(size: number): void;
15
- getLastRecord(): any;
16
23
  record(value: any): void;
24
+ /**
25
+ *
26
+ * @param {MetricStatistics} result
27
+ * @returns {boolean}
28
+ */
29
+ computeStats(result: MetricStatistics): boolean;
17
30
  }
18
31
  import { AbstractMetric } from "./AbstractMetric.js";
19
32
  //# sourceMappingURL=RingBufferMetric.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RingBufferMetric.d.ts","sourceRoot":"","sources":["../../../../../src/engine/development/performance/RingBufferMetric.js"],"names":[],"mappings":"AAOA;IACI,2BAUC;IAPG;;;;;OAKG;IACH,wBAAkC;IAGtC;;;OAGG;IACH,aAFW,MAAM,QAIhB;IAED,qBAEC;IAED,yBAEC;CAsCJ;+BAnE8B,qBAAqB"}
1
+ {"version":3,"file":"RingBufferMetric.d.ts","sourceRoot":"","sources":["../../../../../src/engine/development/performance/RingBufferMetric.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;OAGG;IACH,mBAFW,MAAM,EAYhB;IAPG;;;;;OAKG;IACH,wBAAkC;IAGtC;;;OAGG;IACH,aAFW,MAAM,QAIhB;IAcD,yBAEC;IAED;;;;OAIG;IACH,qBAHW,gBAAgB,GACd,OAAO,CA4BnB;CAKJ;+BAnF8B,qBAAqB"}
@@ -5,8 +5,16 @@ import { computeStatisticalMean } from "../../../core/math/statistics/computeSta
5
5
  import { computeStatisticalPartialMedian } from "../../../core/math/statistics/computeStatisticalPartialMedian.js";
6
6
  import { AbstractMetric } from "./AbstractMetric.js";
7
7
 
8
+ /**
9
+ * Metric container with a limited size and great performance characteristics.
10
+ * Does not allocate memory during usage.
11
+ */
8
12
  export class RingBufferMetric extends AbstractMetric {
9
- constructor(size = 100) {
13
+ /**
14
+ *
15
+ * @param {number} [size] how many records should the ring-buffer hold?
16
+ */
17
+ constructor(size = 128) {
10
18
  super();
11
19
 
12
20
  /**
@@ -26,7 +34,15 @@ export class RingBufferMetric extends AbstractMetric {
26
34
  this.__data.resize(size);
27
35
  }
28
36
 
37
+ /**
38
+ * When metric has no records - this will produce 0
39
+ * @return {number}
40
+ */
29
41
  getLastRecord() {
42
+ if (this.__data.count === 0) {
43
+ return 0;
44
+ }
45
+
30
46
  return this.__data.getHead();
31
47
  }
32
48
 
@@ -1,10 +1,19 @@
1
+ /**
2
+ *
3
+ * @example
4
+ * const metrics = new MetricCollection(); // get a metrics collection
5
+ *
6
+ * // ...
7
+ * MetricCollectionConsoleMonitor.from(metrics).start(); // from now on all metric stats will be printed in console every few seconds
8
+ */
1
9
  export class MetricCollectionConsoleMonitor {
2
10
  /**
3
11
  *
4
12
  * @param {MetricCollection} metrics
13
+ * @param {number} [timeout_seconds] how frequently should stats be printed? In seconds.
5
14
  * @returns {PeriodicConsolePrinter}
6
15
  */
7
- static from(metrics: MetricCollection): PeriodicConsolePrinter;
16
+ static from(metrics: MetricCollection, timeout_seconds?: number): PeriodicConsolePrinter;
8
17
  }
9
18
  import { PeriodicConsolePrinter } from "./PeriodicConsolePrinter.js";
10
19
  //# sourceMappingURL=MetricCollectionConsoleMonitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricCollectionConsoleMonitor.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.js"],"names":[],"mappings":"AAGA;IAEI;;;;OAIG;IACH,qBAHW,gBAAgB,GACd,sBAAsB,CAYlC;CAEJ;uCArBsC,6BAA6B"}
1
+ {"version":3,"file":"MetricCollectionConsoleMonitor.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH;IAEI;;;;;OAKG;IACH,qBAJW,gBAAgB,oBAChB,MAAM,GACJ,sBAAsB,CAYlC;CAEJ;uCA9BsC,6BAA6B"}
@@ -1,18 +1,27 @@
1
1
  import { MetricStatistics } from "../MetricStatistics.js";
2
2
  import { PeriodicConsolePrinter } from "./PeriodicConsolePrinter.js";
3
3
 
4
- export class MetricCollectionConsoleMonitor{
4
+ /**
5
+ *
6
+ * @example
7
+ * const metrics = new MetricCollection(); // get a metrics collection
8
+ *
9
+ * // ...
10
+ * MetricCollectionConsoleMonitor.from(metrics).start(); // from now on all metric stats will be printed in console every few seconds
11
+ */
12
+ export class MetricCollectionConsoleMonitor {
5
13
 
6
14
  /**
7
15
  *
8
16
  * @param {MetricCollection} metrics
17
+ * @param {number} [timeout_seconds] how frequently should stats be printed? In seconds.
9
18
  * @returns {PeriodicConsolePrinter}
10
19
  */
11
- static from(metrics){
20
+ static from(metrics,timeout_seconds= 3) {
12
21
 
13
22
  const metric_stats = new MetricStatistics();
14
23
 
15
- return new PeriodicConsolePrinter(3, () => metrics.list().map(m => {
24
+ return new PeriodicConsolePrinter(timeout_seconds, () => metrics.list().map(m => {
16
25
  metrics.get(m).computeStats(metric_stats);
17
26
 
18
27
  return `${m}: ${metric_stats}`;
@@ -1 +1 @@
1
- {"version":3,"file":"PeriodicConsolePrinter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/development/performance/monitor/PeriodicConsolePrinter.js"],"names":[],"mappings":"AAAA;IACI;;;;;OAKG;IACH,qBAJW,MAAM,uCAEN,GAAC,EAWX;IARG,kBAAwB;IACxB,iBAAkB;IAElB,qBAIC;IAGL,cAOC;IAED,aAQC;CACJ"}
1
+ {"version":3,"file":"PeriodicConsolePrinter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/development/performance/monitor/PeriodicConsolePrinter.js"],"names":[],"mappings":"AAEA;IACI;;;;;OAKG;IACH,qBAJW,MAAM,uCAEN,GAAC,EAcX;IARG,kBAAwB;IACxB,iBAAkB;IAElB,qBAIC;IAGL,cAOC;IAED,aAQC;CACJ"}
@@ -1,3 +1,5 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+
1
3
  export class PeriodicConsolePrinter {
2
4
  /**
3
5
  *
@@ -6,6 +8,9 @@ export class PeriodicConsolePrinter {
6
8
  * @param {*} [thisArg]
7
9
  */
8
10
  constructor(timeout = 15, builderFunction, thisArg) {
11
+ assert.isNumber(timeout, "timeout");
12
+ assert.isFunction(builderFunction, "builderFunction");
13
+
9
14
  this.__timeout = timeout;
10
15
  this.__handle = -1;
11
16
 
@@ -38,11 +38,12 @@ export class UUID {
38
38
  get data(): Uint8Array;
39
39
  /**
40
40
  * Generate Variant 1 UUID
41
- *
41
+ * @returns {void}
42
42
  */
43
43
  v1(): void;
44
44
  /**
45
45
  * Generate Variant 4 UUID (fully random)
46
+ * @returns {void}
46
47
  */
47
48
  v4(): void;
48
49
  /***
@@ -1 +1 @@
1
- {"version":3,"file":"UUID.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/guid/UUID.js"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH;IAiHI;;;OAGG;IACH,aAFY,IAAI,CAQf;IAED;;;OAGG;IACH,aAFa,IAAI,CAQhB;IAED;;;;OAIG;IACH,iBAFY,MAAM,CAIjB;IAyCD;;;;OAIG;IACH,qBAHW,MAAM,GACL,IAAI,CAQf;IAjMD;;;OAGG;IACH,gBAFW,MAAM,EAAE,GAAC,UAAU,GAAC,SAAS,CAAC,MAAM,CAAC,EAO/C;IAED;;;OAGG;IACH,YAFa,UAAU,CAItB;IAED;;;OAGG;IACH,WAsEC;IAED;;OAEG;IACH,WAUC;IAmCD;;;OAGG;IACH,cAFW,MAAM,QAmChB;IAeD;;;;;;OAMG;IACH,YAFa,MAAM,CA2BlB;IAED;;;OAGG;IACH,YAFW,IAAI,QAId;IAED;;;;OAIG;IACH,cAHW,IAAI,GACF,OAAO,CAcnB;IAED;;;OAGG;IACH,QAFa,MAAM,CAYlB;IAIL;;OAEG;IACH,uBA7EiB,MAAM,CA6EF;IAErB;;OAEG;IACH,4BAzIe,MAAM,UAyIE;IAQvB;;;OAGG;IACH,iBAFU,OAAO,CAEI;;CAtBpB;;kBAcS,MAAM"}
1
+ {"version":3,"file":"UUID.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/guid/UUID.js"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH;IAkGI;;;OAGG;IACH,aAFY,IAAI,CAQf;IA2BD;;;OAGG;IACH,aAFa,IAAI,CAQhB;IAED;;;;OAIG;IACH,iBAFY,MAAM,CAIjB;IA6CD;;;;OAIG;IACH,qBAHW,MAAM,GACL,IAAI,CAQf;IA/MD;;;OAGG;IACH,gBAFW,MAAM,EAAE,GAAC,UAAU,GAAC,SAAS,CAAC,MAAM,CAAC,EAO/C;IAED;;;OAGG;IACH,YAFa,UAAU,CAItB;IAED;;;OAGG;IACH,MAFa,IAAI,CAwEhB;IAcD;;;OAGG;IACH,MAFa,IAAI,CAqBhB;IAuBD;;;OAGG;IACH,cAFW,MAAM,QAuChB;IAeD;;;;;;OAMG;IACH,YAFa,MAAM,CA2BlB;IAED;;;OAGG;IACH,YAFW,IAAI,QAId;IAED;;;;OAIG;IACH,cAHW,IAAI,GACF,OAAO,CAcnB;IAED;;;OAGG;IACH,QAFa,MAAM,CAYlB;IAIL;;OAEG;IACH,uBA7EiB,MAAM,CA6EF;IAErB;;OAEG;IACH,4BA7Ie,MAAM,UA6IE;IAQvB;;;OAGG;IACH,iBAFU,OAAO,CAEI;;CAtBpB;;kBAcS,MAAM"}
@@ -52,7 +52,7 @@ export class UUID {
52
52
 
53
53
  /**
54
54
  * Generate Variant 1 UUID
55
- *
55
+ * @returns {void}
56
56
  */
57
57
  v1() {
58
58
  // @see https://github.com/uuidjs/uuid/blob/8f028c4ea42ce41a9a9dc5fa634abe525b2e2066/src/v1.js#L17
@@ -126,31 +126,41 @@ export class UUID {
126
126
  }
127
127
  }
128
128
 
129
+ /**
130
+ *
131
+ * @return {UUID}
132
+ */
133
+ static v1() {
134
+ const uuid = new UUID();
135
+
136
+ uuid.v1();
137
+
138
+ return uuid;
139
+ }
140
+
129
141
  /**
130
142
  * Generate Variant 4 UUID (fully random)
143
+ * @returns {void}
131
144
  */
132
145
  v4() {
133
146
 
134
147
  const data = this.data;
135
148
 
136
- randomBytes(data, 0, random, 16);
149
+ for (let i = 0; i < 16; i+=4) {
137
150
 
138
- // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
139
- data[6] = (data[6] & 0x0f) | 0x40;
140
- data[8] = (data[8] & 0x3f) | 0x80;
151
+ const r = ( random() * 4294967296 ) >>> 0;
141
152
 
142
- }
153
+ data[i] = r & 0xff;
154
+ data[i + 1] = (r >>> 8) & 0xff;
155
+ data[i + 2] = (r >>> 16) & 0xff;
156
+ data[i + 3] = (r >>> 24) & 0xff;
143
157
 
144
- /**
145
- *
146
- * @return {UUID}
147
- */
148
- static v1() {
149
- const uuid = new UUID();
158
+ }
150
159
 
151
- uuid.v1();
160
+ // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
161
+ data[6] = (data[6] & 0x0f) | 0x40;
162
+ data[8] = (data[8] & 0x3f) | 0x80;
152
163
 
153
- return uuid;
154
164
  }
155
165
 
156
166
  /**
@@ -182,35 +192,39 @@ export class UUID {
182
192
  assert.isString(string, 'string');
183
193
  assert.greaterThanOrEqual(string.length, 36, 'string.length');
184
194
 
185
- let v;
186
195
  const arr = this.#data;
187
196
 
188
197
  // Parse ########-....-....-....-............
189
- arr[0] = (v = hex2dec(string.slice(0, 8))) >>> 24;
190
- arr[1] = (v >>> 16) & 0xff;
191
- arr[2] = (v >>> 8) & 0xff;
192
- arr[3] = v & 0xff;
198
+ const v0 = hex2dec(string.slice(0, 8));
199
+ arr[0] = (v0) >>> 24;
200
+ arr[1] = (v0 >>> 16) & 0xff;
201
+ arr[2] = (v0 >>> 8) & 0xff;
202
+ arr[3] = v0 & 0xff;
193
203
 
194
204
  // Parse ........-####-....-....-............
195
- arr[4] = (v = hex2dec(string.slice(9, 13))) >>> 8;
196
- arr[5] = v & 0xff;
205
+ const v1 = hex2dec(string.slice(9, 13));
206
+ arr[4] = (v1) >>> 8;
207
+ arr[5] = v1 & 0xff;
197
208
 
198
209
  // Parse ........-....-####-....-............
199
- arr[6] = (v = hex2dec(string.slice(14, 18))) >>> 8;
200
- arr[7] = v & 0xff;
210
+ const v2 = hex2dec(string.slice(14, 18));
211
+ arr[6] = (v2) >>> 8;
212
+ arr[7] = v2 & 0xff;
201
213
 
202
214
  // Parse ........-....-....-####-............
203
- arr[8] = (v = hex2dec(string.slice(19, 23))) >>> 8;
204
- arr[9] = v & 0xff;
215
+ const v3 = hex2dec(string.slice(19, 23));
216
+ arr[8] = (v3) >>> 8;
217
+ arr[9] = v3 & 0xff;
205
218
 
206
219
  // Parse ........-....-....-....-############
207
220
  // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
208
- arr[10] = ((v = hex2dec(string.slice(24, 36))) / 0x10000000000) & 0xff;
209
- arr[11] = (v / 0x100000000) & 0xff;
210
- arr[12] = (v >>> 24) & 0xff;
211
- arr[13] = (v >>> 16) & 0xff;
212
- arr[14] = (v >>> 8) & 0xff;
213
- arr[15] = v & 0xff;
221
+ const v4 = hex2dec(string.slice(24, 36));
222
+ arr[10] = (v4 / 0x10000000000) & 0xff;
223
+ arr[11] = (v4 / 0x100000000) & 0xff;
224
+ arr[12] = (v4 >>> 24) & 0xff;
225
+ arr[13] = (v4 >>> 16) & 0xff;
226
+ arr[14] = (v4 >>> 8) & 0xff;
227
+ arr[15] = v4 & 0xff;
214
228
  }
215
229
 
216
230
  /**
@@ -32,6 +32,8 @@ export class Transform {
32
32
  */
33
33
  readonly position: Vector3;
34
34
  /**
35
+ * Orientation represented as a quaternion.
36
+ * If Euler (XYZ) angles are required - consult {@link Quaternion} for relevant method
35
37
  * @type {Quaternion}
36
38
  * @readonly
37
39
  */
@@ -155,17 +157,25 @@ export class Transform {
155
157
  * @returns {number}
156
158
  */
157
159
  hash(): number;
160
+ /**
161
+ *
162
+ * @param {Transform} other
163
+ * @returns {this}
164
+ */
165
+ multiply(other: Transform): this;
158
166
  /**
159
167
  * Multiply two transforms, result it written into this one
160
168
  * @param {Transform} a
161
169
  * @param {Transform} b
170
+ * @returns {this}
162
171
  */
163
- multiplyTransforms(a: Transform, b: Transform): void;
172
+ multiplyTransforms(a: Transform, b: Transform): this;
164
173
  /**
165
174
  *
166
175
  * @param {mat4|number[]|Float32Array} matrix
176
+ * @returns {this}
167
177
  */
168
- fromMatrix4(matrix: mat4 | number[] | Float32Array): void;
178
+ fromMatrix4(matrix: mat4 | number[] | Float32Array): this;
169
179
  /**
170
180
  * Write out the current transform to a supplied container
171
181
  * @param {number[]|Float32Array} result
@@ -1 +1 @@
1
- {"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/Transform.js"],"names":[],"mappings":"AAsBA;;;;;;;GAOG;AACH;IAwQI;;;;OAIG;IACH,4BAFa,SAAS,CAQrB;IAED;;;;OAIG;IACH,uBAHW,MAAM,EAAE,GAAC,YAAY,GACnB,SAAS,CAQrB;IAiED;;;;;OAKG;IACH,wCAJW,UAAU,gBACV,OAAO,wBAajB;IA/WD;;;OAGG;IACH,mBAHU,OAAO,CAGe;IAEhC;;;OAGG;IACH,mBAHU,UAAU,CAGkB;IAEtC;;;OAGG;IACH,gBAHU,OAAO,CAGY;IAE7B;;;;OAIG;IACH,iBAFU,YAAY,CAEC;IAEvB;;;;OAIG;IACH,OAFU,MAAM,CAEM;IAOtB;;;;OAIG;IACH,eAFa,OAAO,CAQnB;IAED;;;OAGG;IACH,UAFY,OAAO,CAQlB;IAED;;;OAGG;IACH,aAFY,OAAO,CAQlB;IAED;;;;OAIG;IACH,uCAFW,GAAC,QAMX;IAED;;;;OAIG;IACH,yCAFW,GAAC,QAMX;IAYD;;;;OAIG;IACH,cAHW,MAAM,GAAC,cAAc,GACnB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,cAAc,GACnB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,cAAc,SACrB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,cAAc,GACnB,OAAO,CAInB;IAED;;OAEG;IACH,qBAEC;IAED;;;;OAIG;IACH,eAHW,OAAO,OACP,OAAO,QAmBjB;IAED,0BAwBC;IAED;;;;;;;;;;;;;;;;;MAMC;IAED;;;OAGG;IACH,YAFW,SAAS,QAenB;IAED;;;OAGG;IACH,SAFa,SAAS,CAQrB;IAED;;;;OAIG;IACH,cAHW,SAAS,GACP,OAAO,CAMnB;IAED;;;OAGG;IACH,QAFa,MAAM,CAKlB;IA4BD;;;;OAIG;IACH,sBAHW,SAAS,KACT,SAAS,QAMnB;IAED;;;OAGG;IACH,oBAFW,IAAI,GAAC,MAAM,EAAE,GAAC,YAAY,QAgBpC;IAED;;;OAGG;IACH,kBAFW,MAAM,EAAE,GAAC,YAAY,QAI/B;IAED;;;;;OAKG;IACH,qBAEC;IAED;;;OAGG;IACH,cAFa,OAAO,CAMnB;IAED,mBAEC;IA2BL;;;OAGG;IACH,sBAFU,OAAO,CAEc;;CAZ9B;;kBAIS,MAAM;;oBA7YI,+BAA+B;uBAD5B,kCAAkC;+BAE1B,qBAAqB"}
1
+ {"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/Transform.js"],"names":[],"mappings":"AAsBA;;;;;;;GAOG;AACH;IA0QI;;;;OAIG;IACH,4BAFa,SAAS,CAQrB;IAED;;;;OAIG;IACH,uBAHW,MAAM,EAAE,GAAC,YAAY,GACnB,SAAS,CAQrB;IAiFD;;;;;OAKG;IACH,wCAJW,UAAU,gBACV,OAAO,wBAajB;IAjYD;;;OAGG;IACH,mBAHU,OAAO,CAGe;IAEhC;;;;;OAKG;IACH,mBAHU,UAAU,CAGkB;IAEtC;;;OAGG;IACH,gBAHU,OAAO,CAGY;IAE7B;;;;OAIG;IACH,iBAFU,YAAY,CAEC;IAEvB;;;;OAIG;IACH,OAFU,MAAM,CAEM;IAOtB;;;;OAIG;IACH,eAFa,OAAO,CAQnB;IAED;;;OAGG;IACH,UAFY,OAAO,CAQlB;IAED;;;OAGG;IACH,aAFY,OAAO,CAQlB;IAED;;;;OAIG;IACH,uCAFW,GAAC,QAMX;IAED;;;;OAIG;IACH,yCAFW,GAAC,QAMX;IAYD;;;;OAIG;IACH,cAHW,MAAM,GAAC,cAAc,GACnB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,cAAc,GACnB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,cAAc,SACrB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,cAAc,GACnB,OAAO,CAInB;IAED;;OAEG;IACH,qBAEC;IAED;;;;OAIG;IACH,eAHW,OAAO,OACP,OAAO,QAmBjB;IAED,0BAwBC;IAED;;;;;;;;;;;;;;;;;MAMC;IAED;;;OAGG;IACH,YAFW,SAAS,QAenB;IAED;;;OAGG;IACH,SAFa,SAAS,CAQrB;IAED;;;;OAIG;IACH,cAHW,SAAS,GACP,OAAO,CAMnB;IAED;;;OAGG;IACH,QAFa,MAAM,CAKlB;IA4BD;;;;OAIG;IACH,gBAHW,SAAS,GACP,IAAI,CAIhB;IAED;;;;;OAKG;IACH,sBAJW,SAAS,KACT,SAAS,GACP,IAAI,CAShB;IAED;;;;OAIG;IACH,oBAHW,IAAI,GAAC,MAAM,EAAE,GAAC,YAAY,GACxB,IAAI,CAkBhB;IAED;;;OAGG;IACH,kBAFW,MAAM,EAAE,GAAC,YAAY,QAI/B;IAED;;;;;OAKG;IACH,qBAEC;IAED;;;OAGG;IACH,cAFa,OAAO,CAMnB;IAED,mBAEC;IA2BL;;;OAGG;IACH,sBAFU,OAAO,CAEc;;CAZ9B;;kBAIS,MAAM;;oBA/ZI,+BAA+B;uBAD5B,kCAAkC;+BAE1B,qBAAqB"}
@@ -37,6 +37,8 @@ export class Transform {
37
37
  position = new Vector3(0, 0, 0);
38
38
 
39
39
  /**
40
+ * Orientation represented as a quaternion.
41
+ * If Euler (XYZ) angles are required - consult {@link Quaternion} for relevant method
40
42
  * @type {Quaternion}
41
43
  * @readonly
42
44
  */
@@ -318,20 +320,34 @@ export class Transform {
318
320
  return result;
319
321
  }
320
322
 
323
+ /**
324
+ *
325
+ * @param {Transform} other
326
+ * @returns {this}
327
+ */
328
+ multiply(other) {
329
+ return this.multiplyTransforms(this, other);
330
+ }
331
+
321
332
  /**
322
333
  * Multiply two transforms, result it written into this one
323
334
  * @param {Transform} a
324
335
  * @param {Transform} b
336
+ * @returns {this}
325
337
  */
326
338
  multiplyTransforms(a, b) {
339
+ assert.defined(a, 'a');
340
+ assert.defined(b, 'b');
341
+
327
342
  m4_multiply(scratch_matrix, a.matrix, b.matrix);
328
343
 
329
- this.fromMatrix4(scratch_matrix);
344
+ return this.fromMatrix4(scratch_matrix);
330
345
  }
331
346
 
332
347
  /**
333
348
  *
334
349
  * @param {mat4|number[]|Float32Array} matrix
350
+ * @returns {this}
335
351
  */
336
352
  fromMatrix4(matrix) {
337
353
  assert.isArrayLike(matrix, 'matrix');
@@ -347,6 +363,8 @@ export class Transform {
347
363
 
348
364
  // restore value of the flag
349
365
  this.writeFlag(TransformFlags.AutomaticChangeDetection, ad);
366
+
367
+ return this;
350
368
  }
351
369
 
352
370
  /**
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Flags for {@link Transform} component
3
+ */
1
4
  export type TransformFlags = number;
2
5
  export namespace TransformFlags {
3
6
  let MatrixNeedsUpdate: number;
@@ -1 +1 @@
1
- {"version":3,"file":"TransformFlags.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/TransformFlags.js"],"names":[],"mappings":"6BAEU,MAAM"}
1
+ {"version":3,"file":"TransformFlags.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/TransformFlags.js"],"names":[],"mappings":";;;6BAGU,MAAM"}
@@ -1,4 +1,5 @@
1
1
  /**
2
+ * Flags for {@link Transform} component
2
3
  * @readonly
3
4
  * @enum {number}
4
5
  */