@woosh/meep-engine 2.126.63 → 2.126.65

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 CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Pure JavaScript game engine. Fully featured and production ready.",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.126.63",
8
+ "version": "2.126.65",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -4,8 +4,9 @@ export default class List<T> {
4
4
  get length(): number
5
5
 
6
6
  on: {
7
- added: Signal<T>,
8
- removed: Signal<T, number>
7
+ added: Signal<T, number>,
8
+ removed: Signal<T, number>,
9
+ changed: Signal<void>,
9
10
  }
10
11
 
11
12
  constructor(elements?: T[])
@@ -1 +1 @@
1
- {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/list/List.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/list/List.js"],"names":[],"mappings":"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"}
@@ -28,9 +28,36 @@ class List {
28
28
  * @readonly
29
29
  * @type {Signal<T,number>}
30
30
  */
31
- removed: new Signal()
31
+ removed: new Signal(),
32
+
33
+ /**
34
+ * Captures both {@link #on.added} and {@link #on.removed} signals.
35
+ * Useful shortcut if you don't care about actual modifications, just the fact that something has changed.
36
+ * @readonly
37
+ * @type {Signal<>}
38
+ */
39
+ get changed() {
40
+ // lazily initialization, don't want to create the signal and capture events if we don't need it
41
+
42
+ const signal = new Signal();
43
+
44
+ // pipe changes to an aggregate signal
45
+ this.added.add(signal.send0, signal);
46
+ this.removed.add(signal.send0, signal);
47
+
48
+ // rewrite the property to return the aggregate signal
49
+ Object.defineProperty(this, 'changed', {
50
+ value: signal,
51
+ writable: false,
52
+ enumerable: true,
53
+ configurable: false
54
+ });
55
+
56
+ return signal;
57
+ }
32
58
  };
33
59
 
60
+
34
61
  /**
35
62
  * @readonly
36
63
  * @type {T[]}
@@ -58,6 +85,7 @@ class List {
58
85
  * @type {number}
59
86
  */
60
87
  this.length = this.data.length;
88
+
61
89
  }
62
90
 
63
91
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AABB2.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/aabb/AABB2.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AABB2.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/2d/aabb/AABB2.js"],"names":[],"mappings":"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"}
@@ -477,16 +477,15 @@ class AABB2 {
477
477
  * @return {number}
478
478
  */
479
479
  get centerY() {
480
-
481
480
  return (this.y0 + this.y1) * 0.5
482
481
  }
483
482
 
484
483
  /**
485
- *
484
+ * @deprecated prefer to use {@link width} property instead
486
485
  * @returns {number}
487
486
  */
488
487
  getWidth() {
489
- return this.x1 - this.x0;
488
+ return this.width;
490
489
  }
491
490
 
492
491
  /**
@@ -494,15 +493,16 @@ class AABB2 {
494
493
  * @return {number}
495
494
  */
496
495
  get width() {
497
- return this.getWidth();
496
+ return this.x1 - this.x0;
498
497
  }
499
498
 
500
499
  /**
501
500
  *
501
+ * @deprecated prefer to use {@link height} property instead
502
502
  * @returns {number}
503
503
  */
504
504
  getHeight() {
505
- return this.y1 - this.y0;
505
+ return this.height;
506
506
  }
507
507
 
508
508
  /**
@@ -510,7 +510,7 @@ class AABB2 {
510
510
  * @return {number}
511
511
  */
512
512
  get height() {
513
- return this.getHeight();
513
+ return this.y1 - this.y0;
514
514
  }
515
515
 
516
516
  /**
@@ -520,6 +520,8 @@ class AABB2 {
520
520
  * @param {Number} x1
521
521
  * @param {Number} y1
522
522
  * @returns {this}
523
+ *
524
+ * @see setBoundsUnordered
523
525
  */
524
526
  set(x0, y0, x1, y1) {
525
527
  assert.isNumber(x0, `x0`);
@@ -546,8 +548,8 @@ class AABB2 {
546
548
  * @param {number} y
547
549
  */
548
550
  setPosition(x, y) {
549
- const width = this.getWidth();
550
- const height = this.getHeight();
551
+ const width = this.width;
552
+ const height = this.height;
551
553
 
552
554
  this.set(x, y, x + width, y + height);
553
555
  }
@@ -598,7 +600,7 @@ class AABB2 {
598
600
  *
599
601
  * @return {number}
600
602
  */
601
- hash(){
603
+ hash() {
602
604
  let h = 0; // Initial hash value
603
605
 
604
606
  // Prime numbers for mixing. These are often chosen to be large and coprime.
@@ -750,8 +752,13 @@ AABB2.prototype.isAABB2 = true;
750
752
  AABB2.computeLineBetweenTwoBoxes = computeLineBetweenTwoBoxes;
751
753
 
752
754
  /**
755
+ * Useful singleton with bounds 0,0,0,0.
753
756
  * @readonly
754
757
  * @type {AABB2}
758
+ * @example
759
+ * const box = new AABB();
760
+ * // ...
761
+ * box.copy(AABB.zero); // zero out
755
762
  */
756
763
  AABB2.zero = Object.freeze(new AABB2(0, 0, 0, 0));
757
764
 
@@ -5,6 +5,11 @@
5
5
  * @param {number} b
6
6
  * @param {number} fraction value between 0 and 1
7
7
  * @return {number}
8
+ *
9
+ * @example
10
+ * lerp(1, 2, 0.5) === 1.5
11
+ * lerp(1, 2, 0) === 1
12
+ * lerp(1, 2, 1) === 2
8
13
  */
9
14
  export function lerp(a: number, b: number, fraction: number): number;
10
15
  //# sourceMappingURL=lerp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lerp.d.ts","sourceRoot":"","sources":["../../../../src/core/math/lerp.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBALW,MAAM,KACN,MAAM,YACN,MAAM,GACL,MAAM,CAKjB"}
1
+ {"version":3,"file":"lerp.d.ts","sourceRoot":"","sources":["../../../../src/core/math/lerp.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAVW,MAAM,KACN,MAAM,YACN,MAAM,GACL,MAAM,CAUjB"}
@@ -5,6 +5,11 @@
5
5
  * @param {number} b
6
6
  * @param {number} fraction value between 0 and 1
7
7
  * @return {number}
8
+ *
9
+ * @example
10
+ * lerp(1, 2, 0.5) === 1.5
11
+ * lerp(1, 2, 0) === 1
12
+ * lerp(1, 2, 1) === 2
8
13
  */
9
14
  export function lerp(a, b, fraction) {
10
15
  const span = b - a;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @see https://www.w3.org/TR/WGSL/#roundup
3
3
  * @param {number} x what to round
4
- * @param {number} divisor divisor
4
+ * @param {number} divisor divisor positive integer
5
5
  * @return {number}
6
6
  *
7
7
  * @example
@@ -3,7 +3,7 @@ import { assert } from "@woosh/meep-engine/src/core/assert";
3
3
  /**
4
4
  * @see https://www.w3.org/TR/WGSL/#roundup
5
5
  * @param {number} x what to round
6
- * @param {number} divisor divisor
6
+ * @param {number} divisor divisor positive integer
7
7
  * @return {number}
8
8
  *
9
9
  * @example
@@ -19,7 +19,7 @@ export function spline3_hermite(t, p0, p1, m0, m1) {
19
19
  const a = 2 * t3 - 3 * t2 + 1;
20
20
  const b = t3 - 2 * t2 + t;
21
21
  const c = t3 - t2;
22
- const d = -2 * t3 + 3 * t2;
22
+ const d = 3 * t2 - 2 * t3;
23
23
 
24
24
  return a * p0 + b * m0 + c * m1 + d * p1;
25
25
  }
@@ -2,6 +2,9 @@
2
2
  * Square input (x^2)
3
3
  * @param {number} x
4
4
  * @returns {number}
5
+ * @example
6
+ * sqr(2) === 4
7
+ * sqr(4) === 16
5
8
  */
6
9
  export function sqr(x: number): number;
7
10
  //# sourceMappingURL=sqr.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqr.d.ts","sourceRoot":"","sources":["../../../../src/core/math/sqr.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,uBAHW,MAAM,GACJ,MAAM,CAIlB"}
1
+ {"version":3,"file":"sqr.d.ts","sourceRoot":"","sources":["../../../../src/core/math/sqr.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,uBANW,MAAM,GACJ,MAAM,CAOlB"}
@@ -2,6 +2,9 @@
2
2
  * Square input (x^2)
3
3
  * @param {number} x
4
4
  * @returns {number}
5
+ * @example
6
+ * sqr(2) === 4
7
+ * sqr(4) === 16
5
8
  */
6
9
  export function sqr(x) {
7
10
  return x * x;
@@ -120,7 +120,7 @@ export class Keyframe {
120
120
  */
121
121
  hash() {
122
122
  return computeHashFloat(this.time)
123
- ^ computeHashFloat(this.value);
123
+ ^ (computeHashFloat(this.value) * 31);
124
124
  }
125
125
 
126
126
  toJSON() {
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Subdivide a curve segment by introducing a new keyframe at a given normalized time.
3
+ * Subdivision does not alter the curve shape in any way, it is intended primarily for editing purposes.
4
+ * @param {Keyframe} out keyframe to be added at the point of subdivision, its tangents, time and value will be overwritten
5
+ * @param {Keyframe} key0
6
+ * @param {Keyframe} key1
7
+ * @param {number} t normalized time in [0..1] between key0 and key1 where new frame is to be inserted
8
+ * @returns {Keyframe} `out`, for convenience
9
+ * @see AnimationCurve
10
+ * @example
11
+ * const new_frame = animation_curve_subdivide(new Keyframe(), key0, key1, 0.5);
12
+ * curve.add(new_frame);
13
+ */
14
+ export function animation_curve_subdivide(out: Keyframe, key0: Keyframe, key1: Keyframe, t: number): Keyframe;
15
+ //# sourceMappingURL=animation_curve_subdivide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation_curve_subdivide.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/animation_curve_subdivide.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,+CAVW,QAAQ,QACR,QAAQ,QACR,QAAQ,KACR,MAAM,GACJ,QAAQ,CA2CpB"}
@@ -0,0 +1,55 @@
1
+ import { lerp } from "../../../core/math/lerp.js";
2
+ import { spline3_hermite } from "../../../core/math/spline/spline3_hermite.js";
3
+ import { spline3_hermite_derivative } from "../../../core/math/spline/spline3_hermite_derivative.js";
4
+
5
+ /**
6
+ * Subdivide a curve segment by introducing a new keyframe at a given normalized time.
7
+ * Subdivision does not alter the curve shape in any way, it is intended primarily for editing purposes.
8
+ * @param {Keyframe} out keyframe to be added at the point of subdivision, its tangents, time and value will be overwritten
9
+ * @param {Keyframe} key0
10
+ * @param {Keyframe} key1
11
+ * @param {number} t normalized time in [0..1] between key0 and key1 where new frame is to be inserted
12
+ * @returns {Keyframe} `out`, for convenience
13
+ * @see AnimationCurve
14
+ * @example
15
+ * const new_frame = animation_curve_subdivide(new Keyframe(), key0, key1, 0.5);
16
+ * curve.add(new_frame);
17
+ */
18
+ export function animation_curve_subdivide(
19
+ out,
20
+ key0,
21
+ key1,
22
+ t
23
+ ) {
24
+
25
+ const v0 = key0.value;
26
+ const v1 = key1.value;
27
+
28
+ const time_span = key1.time - key0.time;
29
+
30
+ // Note that Keyframe tangents are normalized, so we denomalize them before using them
31
+ const m0 = key0.outTangent * time_span;
32
+ const m1 = key1.inTangent * time_span;
33
+
34
+ const xm = spline3_hermite(
35
+ t,
36
+ v0, v1,
37
+ m0, m1
38
+ );
39
+ const vm = spline3_hermite_derivative(
40
+ t,
41
+ v0, v1,
42
+ m0, m1
43
+ );
44
+
45
+ out.time = lerp(key0.time, key1.time, t);
46
+ out.value = xm;
47
+
48
+ // re-normalize tangent
49
+ const new_tangent = vm / time_span;
50
+
51
+ out.inTangent = new_tangent;
52
+ out.outTangent = new_tangent;
53
+
54
+ return out;
55
+ }