@woosh/meep-engine 2.123.2 → 2.123.5

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 (29) 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/EntityComponentDataset.d.ts.map +1 -1
  23. package/src/engine/ecs/EntityComponentDataset.js +39 -9
  24. package/src/engine/ecs/transform/Transform.d.ts +12 -2
  25. package/src/engine/ecs/transform/Transform.d.ts.map +1 -1
  26. package/src/engine/ecs/transform/Transform.js +19 -1
  27. package/src/engine/ecs/transform/TransformFlags.d.ts +3 -0
  28. package/src/engine/ecs/transform/TransformFlags.d.ts.map +1 -1
  29. 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.2",
8
+ "version": "2.123.5",
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
 
@@ -1 +1 @@
1
- {"version":3,"file":"EntityComponentDataset.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityComponentDataset.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityComponentDataset.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityComponentDataset.js"],"names":[],"mappings":"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"}
@@ -161,12 +161,20 @@ export class EntityComponentDataset {
161
161
  entityGeneration = new Uint32Array(0);
162
162
 
163
163
  /**
164
+ * Bit table, if a bit is set - that means component is present.
165
+ * The format is
166
+ * entity_0: [component_0, component_1, ... component_n]
167
+ * entity_1: [component_0, component_1, ... component_n]
168
+ * ...
169
+ * entity_n: [component_0, component_1, ... component_n]
164
170
  * @private
165
171
  * @type {BitSet}
166
172
  */
167
173
  componentOccupancy = new BitSet();
168
174
 
169
175
  /**
176
+ * Do not modify directly.
177
+ * Use {@link setComponentTypeMap} instead.
170
178
  * @private
171
179
  * @type {Class[]}
172
180
  */
@@ -425,7 +433,7 @@ export class EntityComponentDataset {
425
433
  /**
426
434
  * Convenience method for retrieving a collection of components for a given entity
427
435
  * @param {number} entity ID of the entity
428
- * @param {Array} componentClasses Classes of components to extract
436
+ * @param {[]} componentClasses Classes of components to extract
429
437
  * @returns {Array}
430
438
  */
431
439
  getComponents(entity, componentClasses) {
@@ -495,6 +503,7 @@ export class EntityComponentDataset {
495
503
  /**
496
504
  * Modify dataset component mapping. Algorithm will attempt to mutate dataset even if entities exist, however, it will not remove component classes for which instances exist in the dataset.
497
505
  * @param {Class[]} map collection of component classes
506
+ * @returns {void}
498
507
  * @throws Error when attempting to remove component classes with live instances
499
508
  */
500
509
  setComponentTypeMap(map) {
@@ -598,6 +607,8 @@ export class EntityComponentDataset {
598
607
  for (i = 0, l = typesToAdd.length; i < l; i++) {
599
608
  const type = typesToAdd[i];
600
609
 
610
+ assert.defined(type, 'type');
611
+
601
612
  const newIndex = map.indexOf(type);
602
613
 
603
614
  //initialize component store
@@ -683,10 +694,13 @@ export class EntityComponentDataset {
683
694
  /**
684
695
  *
685
696
  * @param {Class[]} types
686
- * @returns {boolean}
697
+ * @returns {boolean} true if all types are present, false otherwise
687
698
  */
688
699
  areComponentTypesRegistered(types) {
689
- for (let i = 0; i < types.length; i++) {
700
+ assert.isArray(types, 'types');
701
+
702
+ const count = types.length;
703
+ for (let i = 0; i < count; i++) {
690
704
  const type = types[i];
691
705
 
692
706
  if (!this.isComponentTypeRegistered(type)) {
@@ -704,6 +718,9 @@ export class EntityComponentDataset {
704
718
  * @return {boolean}
705
719
  */
706
720
  isComponentTypeRegistered(type) {
721
+ assert.defined(type, 'type');
722
+ assert.notNull(type, 'type');
723
+
707
724
  const componentTypeMap = this.getComponentTypeMap();
708
725
 
709
726
  return componentTypeMap.indexOf(type) !== -1;
@@ -762,7 +779,8 @@ export class EntityComponentDataset {
762
779
  * @returns {boolean} true iff component is removed, false if it was not registered
763
780
  */
764
781
  unregisterComponentType(type) {
765
- if (this.isComponentTypeRegistered(type)) {
782
+
783
+ if (!this.isComponentTypeRegistered(type)) {
766
784
  // not registered
767
785
  return false;
768
786
  }
@@ -806,7 +824,7 @@ export class EntityComponentDataset {
806
824
  */
807
825
  getEntityGeneration(entity_id) {
808
826
  assert.isNonNegativeInteger(entity_id, 'entity_id');
809
- assert.ok(this.entityExists(entity_id),`Entity ${entity_id} does not exist`);
827
+ assert.ok(this.entityExists(entity_id), `Entity ${entity_id} does not exist`);
810
828
 
811
829
  return this.entityGeneration[entity_id];
812
830
  }
@@ -1003,10 +1021,13 @@ export class EntityComponentDataset {
1003
1021
 
1004
1022
  /**
1005
1023
  *
1006
- * @param klass
1024
+ * @param {Function|Class} klass
1007
1025
  * @returns {number}
1008
1026
  */
1009
1027
  computeComponentTypeIndex(klass) {
1028
+ assert.defined(klass, "klass");
1029
+ assert.notNull(klass, "klass");
1030
+
1010
1031
  const idx = this.__type_to_index_map.get(klass);
1011
1032
 
1012
1033
  if (idx === undefined) {
@@ -1399,13 +1420,15 @@ export class EntityComponentDataset {
1399
1420
  traverseComponentsByIndex(componentTypeIndex, visitor, thisArg) {
1400
1421
 
1401
1422
  assert.isNumber(componentTypeIndex, "componentTypeIndex");
1423
+ assert.isNonNegativeInteger(componentTypeIndex, "componentTypeIndex");
1402
1424
  assert.isFunction(visitor, "visitor");
1403
1425
 
1404
1426
  this.__traverseComponentsByIndex_via_property(componentTypeIndex, visitor, thisArg);
1405
1427
  }
1406
1428
 
1407
1429
  /**
1408
- *
1430
+ * Alternative to {@link __traverseComponentsByIndex_via_property} as of 2020, appears to be significantly slower on Chrome with larger datasets
1431
+ * @private
1409
1432
  * @param {number} componentTypeIndex
1410
1433
  * @param {function} visitor
1411
1434
  * @param {*} [thisArg]
@@ -1438,7 +1461,7 @@ export class EntityComponentDataset {
1438
1461
  }
1439
1462
 
1440
1463
  /**
1441
- *
1464
+ * @private
1442
1465
  * @param {number} componentTypeIndex
1443
1466
  * @param {function} visitor
1444
1467
  * @param {*} [thisArg]
@@ -1574,6 +1597,9 @@ export class EntityComponentDataset {
1574
1597
  * @returns {boolean}
1575
1598
  */
1576
1599
  removeAnyEventListener(entity, listener, thisArg) {
1600
+ assert.isNonNegativeInteger(entity, "entity");
1601
+ assert.isFunction(listener, "listener");
1602
+
1577
1603
  const evl = this.__entityAnyEventListeners;
1578
1604
 
1579
1605
  let handlers = evl[entity];
@@ -1609,7 +1635,7 @@ export class EntityComponentDataset {
1609
1635
  * @param {*} [thisArg]
1610
1636
  */
1611
1637
  addEntityEventListener(entity, eventName, listener, thisArg) {
1612
-
1638
+ assert.isNonNegativeInteger(entity, "entity");
1613
1639
  assert.isString(eventName, "eventName");
1614
1640
  assert.isFunction(listener, "listener");
1615
1641
 
@@ -1648,6 +1674,10 @@ export class EntityComponentDataset {
1648
1674
  * @returns {boolean}
1649
1675
  */
1650
1676
  removeEntityEventListener(entity, eventName, listener, thisArg) {
1677
+ assert.isNonNegativeInteger(entity, "entity");
1678
+ assert.isString(eventName, "eventName");
1679
+ assert.isFunction(listener, "listener");
1680
+
1651
1681
  const evl = this.__entityEventListeners;
1652
1682
 
1653
1683
  const hash = evl[entity];
@@ -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
  */