@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.
- package/package.json +1 -1
- package/src/core/collection/RingBuffer.d.ts.map +1 -1
- package/src/core/collection/RingBuffer.js +9 -0
- package/src/core/geom/Quaternion.d.ts +48 -7
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Quaternion.js +48 -7
- package/src/engine/development/performance/AbstractMetric.d.ts +12 -0
- package/src/engine/development/performance/AbstractMetric.d.ts.map +1 -1
- package/src/engine/development/performance/AbstractMetric.js +21 -0
- package/src/engine/development/performance/MetricCollection.d.ts +26 -2
- package/src/engine/development/performance/MetricCollection.d.ts.map +1 -1
- package/src/engine/development/performance/MetricCollection.js +32 -3
- package/src/engine/development/performance/MetricStatistics.js +1 -1
- package/src/engine/development/performance/RingBufferMetric.d.ts +14 -1
- package/src/engine/development/performance/RingBufferMetric.d.ts.map +1 -1
- package/src/engine/development/performance/RingBufferMetric.js +17 -1
- package/src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.d.ts +10 -1
- package/src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.d.ts.map +1 -1
- package/src/engine/development/performance/monitor/MetricCollectionConsoleMonitor.js +12 -3
- package/src/engine/development/performance/monitor/PeriodicConsolePrinter.d.ts.map +1 -1
- package/src/engine/development/performance/monitor/PeriodicConsolePrinter.js +5 -0
- package/src/engine/ecs/guid/UUID.d.ts +2 -1
- package/src/engine/ecs/guid/UUID.d.ts.map +1 -1
- package/src/engine/ecs/guid/UUID.js +45 -31
- package/src/engine/ecs/transform/Transform.d.ts +12 -2
- package/src/engine/ecs/transform/Transform.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform.js +19 -1
- package/src/engine/ecs/transform/TransformFlags.d.ts +3 -0
- package/src/engine/ecs/transform/TransformFlags.d.ts.map +1 -1
- package/src/engine/ecs/transform/TransformFlags.js +1 -0
package/package.json
CHANGED
|
@@ -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,
|
|
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):
|
|
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():
|
|
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
|
-
|
|
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):
|
|
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) =>
|
|
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
|
|
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":"AAmBA;;;;;;GAMG;AACH;
|
|
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
|
-
|
|
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
|
-
|
|
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":"
|
|
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,
|
|
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 =
|
|
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
|
}
|
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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":"
|
|
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":"UUID.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/guid/UUID.js"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH;
|
|
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
|
-
|
|
149
|
+
for (let i = 0; i < 16; i+=4) {
|
|
137
150
|
|
|
138
|
-
|
|
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
|
-
|
|
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
|
-
|
|
190
|
-
arr[
|
|
191
|
-
arr[
|
|
192
|
-
arr[
|
|
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
|
-
|
|
196
|
-
arr[
|
|
205
|
+
const v1 = hex2dec(string.slice(9, 13));
|
|
206
|
+
arr[4] = (v1) >>> 8;
|
|
207
|
+
arr[5] = v1 & 0xff;
|
|
197
208
|
|
|
198
209
|
// Parse ........-....-####-....-............
|
|
199
|
-
|
|
200
|
-
arr[
|
|
210
|
+
const v2 = hex2dec(string.slice(14, 18));
|
|
211
|
+
arr[6] = (v2) >>> 8;
|
|
212
|
+
arr[7] = v2 & 0xff;
|
|
201
213
|
|
|
202
214
|
// Parse ........-....-....-####-............
|
|
203
|
-
|
|
204
|
-
arr[
|
|
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
|
-
|
|
209
|
-
arr[
|
|
210
|
-
arr[
|
|
211
|
-
arr[
|
|
212
|
-
arr[
|
|
213
|
-
arr[
|
|
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):
|
|
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):
|
|
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;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformFlags.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/TransformFlags.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TransformFlags.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/TransformFlags.js"],"names":[],"mappings":";;;6BAGU,MAAM"}
|