@woosh/meep-engine 2.124.11 → 2.124.13
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/README.md +1 -1
- package/package.json +1 -1
- package/src/core/assert.d.ts +8 -0
- package/src/core/assert.d.ts.map +1 -1
- package/src/core/assert.js +14 -0
- package/src/core/debug/matchers/IsFinite.d.ts +6 -0
- package/src/core/debug/matchers/IsFinite.d.ts.map +1 -0
- package/src/core/debug/matchers/IsFinite.js +11 -0
- package/src/core/debug/matchers/IsInteger.d.ts +6 -0
- package/src/core/debug/matchers/IsInteger.d.ts.map +1 -0
- package/src/core/debug/matchers/IsInteger.js +11 -0
- package/src/core/debug/matchers/IsUndefined.js +1 -0
- package/src/core/debug/matchers/matchers.d.ts +5 -0
- package/src/core/debug/matchers/matchers.d.ts.map +1 -1
- package/src/core/debug/matchers/matchers.js +14 -0
- package/src/core/math/interval/NumericInterval.d.ts +49 -9
- package/src/core/math/interval/NumericInterval.d.ts.map +1 -1
- package/src/core/math/interval/NumericInterval.js +91 -13
- package/src/core/math/spline/spline_hermite3_bounds.d.ts +7 -7
- package/src/core/math/spline/spline_hermite3_bounds.d.ts.map +1 -1
- package/src/core/math/spline/spline_hermite3_bounds.js +13 -7
- package/src/core/model/ObservedBoolean.d.ts +3 -3
- package/src/core/model/ObservedBoolean.d.ts.map +1 -1
- package/src/core/model/ObservedBoolean.js +3 -3
- package/src/core/model/ObservedEnum.d.ts.map +1 -1
- package/src/core/model/ObservedEnum.js +52 -11
- package/src/core/model/ObservedInteger.d.ts +7 -7
- package/src/core/model/ObservedInteger.d.ts.map +1 -1
- package/src/core/model/ObservedInteger.js +12 -11
- package/src/engine/animation/AnimationUtils.js +1 -1
- package/src/engine/animation/curve/AnimationCurve.d.ts +25 -9
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +40 -18
- package/src/engine/animation/curve/Keyframe.d.ts +4 -2
- package/src/engine/animation/curve/Keyframe.d.ts.map +1 -1
- package/src/engine/animation/curve/Keyframe.js +6 -2
- package/src/engine/animation/curve/animation_curve_compute_aabb.js +1 -1
- package/src/engine/animation/curve/animation_curve_optimize.d.ts +2 -1
- package/src/engine/animation/curve/animation_curve_optimize.d.ts.map +1 -1
- package/src/engine/animation/curve/animation_curve_optimize.js +6 -0
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +25 -7
- package/src/engine/ecs/EntityManager.d.ts +1 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +49 -23
- package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
- package/src/engine/ecs/EntityObserver.js +9 -0
- package/src/engine/ecs/util/EntityBuilderUtils.d.ts.map +1 -0
- package/src/engine/ecs/{EntityBuilderUtils.js → util/EntityBuilderUtils.js} +1 -1
- package/src/engine/ecs/EntityBuilderUtils.d.ts.map +0 -1
- /package/src/engine/ecs/{EntityBuilderUtils.d.ts → util/EntityBuilderUtils.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ To help get you started, various samples are provided under `/samples` folder. F
|
|
|
13
13
|
|
|
14
14
|
## Quality
|
|
15
15
|
|
|
16
|
-
Meep is covered by 2,
|
|
16
|
+
Meep is covered by 2,669 unit tests
|
|
17
17
|
|
|
18
18
|
The aim is to [ensure quality](https://about.codecov.io/blog/the-case-against-100-code-coverage/). As a result, the tests are written to cover complex code first and to exhaustively validate critical algorithms.
|
|
19
19
|
Most of the test code is significantly larger than the code that is being tested.
|
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.124.
|
|
8
|
+
"version": "2.124.13",
|
|
9
9
|
"main": "build/meep.module.js",
|
|
10
10
|
"module": "build/meep.module.js",
|
|
11
11
|
"exports": {
|
package/src/core/assert.d.ts
CHANGED
|
@@ -128,6 +128,14 @@ export namespace assert {
|
|
|
128
128
|
import isFiniteNumber = isFinite;
|
|
129
129
|
export { isFiniteNumber };
|
|
130
130
|
/**
|
|
131
|
+
* More powerful and flexible assertion API based on matchers.
|
|
132
|
+
* Allows complex matching criteria to be constructed.
|
|
133
|
+
*
|
|
134
|
+
* see {@link Matcher}
|
|
135
|
+
* @example
|
|
136
|
+
* assert.that(value,'value', anyOf(isNull(),isUndefined())); // will trigger iff !(value === undefined || value === null)
|
|
137
|
+
* assert.that(value, 'value', isOneOf([3,7])); // will only trigger iff !(value === 3 || value === 7)
|
|
138
|
+
*
|
|
131
139
|
* @template T
|
|
132
140
|
* @param {T} value
|
|
133
141
|
* @param {string} name
|
package/src/core/assert.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/core/assert.js"],"names":[],"mappings":"AAgDA;;;;GAIG;AACH,0BAHW,OAAO,MACP,MAAM,QAMhB;;IAsJD;;;;;OAKG;IACH,eALa,CAAC,SACH,CAAC,0BAED,MAAM,QAUhB;;;;;;;;;;;;;;;IAmBD;;;;;;OAMG;IACH,oCALW,GAAC,SACD,KAAK,eACL,MAAM,eACN,MAAM,QAKhB;IAGD;;;;OAIG;IACH,gCAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,gCAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,iCAHW,OAAO,GAAC,GAAC,SACT,MAAM,QAQhB;IAED;;;;OAIG;IACH,kCAHW,WAAS,GAAC,SACV,MAAM,QAQhB;IAED;;;;OAIG;IACH,gCAHW,MAAO,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,iCAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,4CAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,wBAJa,CAAC,SACH,CAAC,EAAE,SACH,MAAM,QAOhB;IAED;;;;OAIG;IACH,4BAJa,CAAC,SACH,SAAS,CAAC,CAAC,CAAC,GAAC,CAAC,EAAE,GAAC,WAAW,GAAC,YAAY,SACzC,MAAM,QAOhB;IAGD;;;;OAIG;IACH,+BAHW,GAAC,uBASX;IAED;;;;OAIG;IACH,iCAHW,GAAC,uBASX;IAGD;;;;OAIG;IACH,8BAHW,GAAC,uBAOX;IAED;;;;OAIG;IACH,+BAHW,GAAC,uBASX;IAED;;;;OAIG;IACH,8BAHW,MAAM,SACN,MAAM,QAMhB;IAED;;;;;OAKG;IACH,gCAHW,MAAM,SACN,MAAM,QAMhB;;;IAQD
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/core/assert.js"],"names":[],"mappings":"AAgDA;;;;GAIG;AACH,0BAHW,OAAO,MACP,MAAM,QAMhB;;IAsJD;;;;;OAKG;IACH,eALa,CAAC,SACH,CAAC,0BAED,MAAM,QAUhB;;;;;;;;;;;;;;;IAmBD;;;;;;OAMG;IACH,oCALW,GAAC,SACD,KAAK,eACL,MAAM,eACN,MAAM,QAKhB;IAGD;;;;OAIG;IACH,gCAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,gCAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,iCAHW,OAAO,GAAC,GAAC,SACT,MAAM,QAQhB;IAED;;;;OAIG;IACH,kCAHW,WAAS,GAAC,SACV,MAAM,QAQhB;IAED;;;;OAIG;IACH,gCAHW,MAAO,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,iCAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,4CAHW,MAAM,GAAC,GAAC,SACR,MAAM,QAQhB;IAED;;;;OAIG;IACH,wBAJa,CAAC,SACH,CAAC,EAAE,SACH,MAAM,QAOhB;IAED;;;;OAIG;IACH,4BAJa,CAAC,SACH,SAAS,CAAC,CAAC,CAAC,GAAC,CAAC,EAAE,GAAC,WAAW,GAAC,YAAY,SACzC,MAAM,QAOhB;IAGD;;;;OAIG;IACH,+BAHW,GAAC,uBASX;IAED;;;;OAIG;IACH,iCAHW,GAAC,uBASX;IAGD;;;;OAIG;IACH,8BAHW,GAAC,uBAOX;IAED;;;;OAIG;IACH,+BAHW,GAAC,uBASX;IAED;;;;OAIG;IACH,8BAHW,MAAM,SACN,MAAM,QAMhB;IAED;;;;;OAKG;IACH,gCAHW,MAAM,SACN,MAAM,QAMhB;;;IAQD;;;;;;;;;;;;;OAaG;IACH,qBALa,CAAC,SACH,CAAC,QACD,MAAM,WACN,OAAO,CAAC,CAAC,CAAC,QAwBpB;;AAldD;;;;;GAKG;AACH,0BALa,CAAC,KACH,CAAC,KACD,CAAC,MACD,MAAM,QAIhB;AAED;;;;GAIG;AACH,0BAHW,OAAO,MACP,MAAM,QAIhB;AAhCD;;;;;GAKG;AACH,uBALa,CAAC,KACH,CAAC,KACD,CAAC,MACD,MAAM,QAShB;AAqBD;;;;;GAKG;AACH,kCAJW,MAAM,KACN,MAAM,MACN,MAAM,QAIhB;AAaD;;;;;GAKG;AACH,gCAJW,MAAM,KACN,MAAM,MACN,MAAM,QAiBhB;AAyBD;;;;;GAKG;AACH,uCAJW,MAAM,KACN,MAAM,MACN,MAAM,QAiBhB;AA5CD;;;;;GAKG;AACH,6BAJW,MAAM,KACN,MAAM,MACN,MAAM,QAiBhB;AAyBD;;;;;GAKG;AACH,oCAJW,MAAM,KACN,MAAM,MACN,MAAM,QAiBhB;AAKD;;;;;GAKG;AACH,+BAJW,GAAC,QACD,MAAM,cACN,MAAM,QAehB;AAED;;;;;GAKG;AACH,0BALa,CAAC,YACH,CAAC,EAAE,UACH,CAAC,YACD,MAAM,QAIhB;AAED;;;;;GAKG;AACH,4BALa,CAAC,YACH,CAAC,EAAE,UACH,CAAC,YACD,MAAM,QAIhB;AAED;;;;;GAKG;AACH,4BALa,CAAC,KACH,CAAC,EAAE,GAAC,SAAS,CAAC,CAAC,CAAC,GAAC,YAAY,GAAC,UAAU,KACxC,CAAC,EAAE,GAAC,SAAS,CAAC,CAAC,CAAC,GAAC,YAAY,GAAC,UAAU,YACxC,MAAM,QAMhB"}
|
package/src/core/assert.js
CHANGED
|
@@ -448,16 +448,30 @@ assert.isFinite = function (value, name = "value") {
|
|
|
448
448
|
assert.isFiniteNumber = assert.isFinite;
|
|
449
449
|
|
|
450
450
|
/**
|
|
451
|
+
* More powerful and flexible assertion API based on matchers.
|
|
452
|
+
* Allows complex matching criteria to be constructed.
|
|
453
|
+
*
|
|
454
|
+
* see {@link Matcher}
|
|
455
|
+
* @example
|
|
456
|
+
* assert.that(value,'value', anyOf(isNull(),isUndefined())); // will trigger iff !(value === undefined || value === null)
|
|
457
|
+
* assert.that(value, 'value', isOneOf([3,7])); // will only trigger iff !(value === 3 || value === 7)
|
|
458
|
+
*
|
|
451
459
|
* @template T
|
|
452
460
|
* @param {T} value
|
|
453
461
|
* @param {string} name
|
|
454
462
|
* @param {Matcher<T>} matcher
|
|
455
463
|
*/
|
|
456
464
|
assert.that = function (value, name, matcher) {
|
|
465
|
+
assert.isString(name, 'name');
|
|
466
|
+
assert.defined(matcher, 'matcher');
|
|
467
|
+
|
|
457
468
|
if (matcher.matches(value)) {
|
|
458
469
|
return;
|
|
459
470
|
}
|
|
460
471
|
|
|
472
|
+
// if we got here, our assertion has failed
|
|
473
|
+
// construct failure message
|
|
474
|
+
|
|
461
475
|
const mismatch_description = new InMemoryDescriptor();
|
|
462
476
|
|
|
463
477
|
mismatch_description.appendText(`Expected ${name} to be `);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsFinite.d.ts","sourceRoot":"","sources":["../../../../../src/core/debug/matchers/IsFinite.js"],"names":[],"mappings":"AAEA;IACI,uDAEC;IAED,mCAEC;CACJ;4BAV2B,mBAAmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsInteger.d.ts","sourceRoot":"","sources":["../../../../../src/core/debug/matchers/IsInteger.js"],"names":[],"mappings":"AAEA;IACI,uDAEC;IAED,mCAEC;CACJ;4BAV2B,mBAAmB"}
|
|
@@ -48,6 +48,9 @@ export function isUndefined<T_1>(): Matcher<T_1>;
|
|
|
48
48
|
* @return {Matcher<T>}
|
|
49
49
|
*/
|
|
50
50
|
export function isDefined<T_1>(): Matcher<T_1>;
|
|
51
|
+
export function isFinite(): IsFinite;
|
|
52
|
+
export function isInfinite(): Matcher<any>;
|
|
53
|
+
export function isInteger(): IsInteger;
|
|
51
54
|
/**
|
|
52
55
|
* @template T
|
|
53
56
|
* @param {Matcher|T} value
|
|
@@ -85,4 +88,6 @@ export function nothing<T_1>(message?: string): Matcher<T_1>;
|
|
|
85
88
|
*/
|
|
86
89
|
export function isNotUndefined<T_1>(): Matcher<T_1>;
|
|
87
90
|
import { Matcher } from "../Matcher.js";
|
|
91
|
+
import { IsFinite } from "./IsFinite.js";
|
|
92
|
+
import { IsInteger } from "./IsInteger.js";
|
|
88
93
|
//# sourceMappingURL=matchers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../../../../src/core/debug/matchers/matchers.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../../../../src/core/debug/matchers/matchers.js"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wCAHW,OAAO,CAAC,GAAC,CAAC,GACT,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;;GAIG;AACH,wCAHW,OAAO,CAAC,GAAC,CAAC,GACT,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;;GAIG;AACH,kCAHW,OAAO,CAAC,GAAC,CAAC,GACT,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;;GAIG;AACH,oCAHW,GAAC,GACA,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;;GAIG;AACH,uCAHW,GAAC,GACA,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;GAGG;AACH,+BAFY,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;GAGG;AACH,kCAFY,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;GAGG;AACH,oCAFY,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;GAGG;AACH,kCAFY,OAAO,CAAC,GAAC,CAAC,CAIrB;AAQD,qCAEC;AAED,2CAEC;AAED,uCAEC;AAED;;;;GAIG;AACH,oCAHW,eAAQ,GAAC,GACR,OAAO,CAAC,GAAC,CAAC,CAQrB;AAED;;;;GAIG;AACH,iCAHW,GAAC,EAAE,GACD,OAAO,CAAC,GAAC,CAAC,CAItB;AAGD;;;;GAIG;AACH,0CAHW,GAAC,GACA,OAAO,CAAC,GAAC,CAAC,CAIrB;AAcD;;;;;GAKG;AACH,wCAHW,MAAM,GACL,OAAO,CAAC,GAAC,CAAC,CAIrB;AAED;;;;GAIG;AACH,uCAHW,MAAM,GACL,OAAO,CAAC,GAAC,CAAC,CAUrB;AA7FD;;;GAGG;AACH,uCAFY,OAAO,CAAC,GAAC,CAAC,CAIrB;wBAzFuB,eAAe;yBAMd,eAAe;0BAEd,gBAAgB"}
|
|
@@ -4,7 +4,9 @@ import { AnyOf } from "./AnyOf.js";
|
|
|
4
4
|
import { DescribeAs } from "./DescribeAs.js";
|
|
5
5
|
import { IsAnything } from "./IsAnything.js";
|
|
6
6
|
import { IsEqual } from "./IsEqual.js";
|
|
7
|
+
import { IsFinite } from "./IsFinite.js";
|
|
7
8
|
import { IsIn } from "./IsIn.js";
|
|
9
|
+
import { IsInteger } from "./IsInteger.js";
|
|
8
10
|
import { IsIterableContaining } from "./IsIterableContaining.js";
|
|
9
11
|
import { IsNot } from "./IsNot.js";
|
|
10
12
|
import { IsNull } from "./IsNull.js";
|
|
@@ -93,6 +95,18 @@ export function isDefined() {
|
|
|
93
95
|
*/
|
|
94
96
|
export const isNotUndefined = isDefined;
|
|
95
97
|
|
|
98
|
+
export function isFinite(){
|
|
99
|
+
return new IsFinite();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function isInfinite(){
|
|
103
|
+
return not(isFinite());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function isInteger(){
|
|
107
|
+
return new IsInteger();
|
|
108
|
+
}
|
|
109
|
+
|
|
96
110
|
/**
|
|
97
111
|
* @template T
|
|
98
112
|
* @param {Matcher|T} value
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines a numeric interval, by min and max.
|
|
3
|
+
* Provides a suite of interval logic operations.
|
|
4
|
+
* Interval can be of 0 width.
|
|
5
|
+
*/
|
|
1
6
|
export class NumericInterval {
|
|
2
7
|
/**
|
|
3
8
|
*
|
|
@@ -25,13 +30,15 @@ export class NumericInterval {
|
|
|
25
30
|
*
|
|
26
31
|
* @param {number} min
|
|
27
32
|
* @param {number} max
|
|
33
|
+
* @returns {this}
|
|
28
34
|
*/
|
|
29
|
-
set(min: number, max: number):
|
|
35
|
+
set(min: number, max: number): this;
|
|
30
36
|
/**
|
|
31
37
|
*
|
|
32
38
|
* @param {number} value
|
|
39
|
+
* @returns {this}
|
|
33
40
|
*/
|
|
34
|
-
multiplyScalar(value: number):
|
|
41
|
+
multiplyScalar(value: number): this;
|
|
35
42
|
/**
|
|
36
43
|
* Compute normalized position of input within this interval, where result is 0 if input is equal to `min`, and 1 when input is equal to `max`
|
|
37
44
|
* @param {number} v value to be normalized
|
|
@@ -49,11 +56,6 @@ export class NumericInterval {
|
|
|
49
56
|
* @returns {boolean}
|
|
50
57
|
*/
|
|
51
58
|
isExact(): boolean;
|
|
52
|
-
/**
|
|
53
|
-
*
|
|
54
|
-
* @returns {number}
|
|
55
|
-
*/
|
|
56
|
-
computeAverage(): number;
|
|
57
59
|
/**
|
|
58
60
|
*
|
|
59
61
|
* @param {function} random Random number generator function, must return values between 0 and 1
|
|
@@ -65,6 +67,19 @@ export class NumericInterval {
|
|
|
65
67
|
min: number;
|
|
66
68
|
max: number;
|
|
67
69
|
};
|
|
70
|
+
/**
|
|
71
|
+
*
|
|
72
|
+
* @param {number[]|Float32Array|Float64Array} array
|
|
73
|
+
* @param {number} [offset=0]
|
|
74
|
+
*/
|
|
75
|
+
fromArray(array: number[] | Float32Array | Float64Array, offset?: number): this;
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @param {number[]|Float32Array|Float64Array} [destination=[]]
|
|
79
|
+
* @param {number} [offset=0]
|
|
80
|
+
* @return {number[]}
|
|
81
|
+
*/
|
|
82
|
+
toArray(destination?: number[] | Float32Array | Float64Array, offset?: number): number[];
|
|
68
83
|
toString(): string;
|
|
69
84
|
/**
|
|
70
85
|
*
|
|
@@ -79,8 +94,27 @@ export class NumericInterval {
|
|
|
79
94
|
/**
|
|
80
95
|
*
|
|
81
96
|
* @param {NumericInterval} other
|
|
97
|
+
* @returns {this}
|
|
98
|
+
*/
|
|
99
|
+
copy(other: NumericInterval): this;
|
|
100
|
+
/**
|
|
101
|
+
* Performs union operation with another interval, mutates current interval.
|
|
102
|
+
* @param {NumericInterval} other
|
|
103
|
+
* @returns {this}
|
|
104
|
+
*/
|
|
105
|
+
union(other: NumericInterval): this;
|
|
106
|
+
/**
|
|
107
|
+
*
|
|
108
|
+
* @param {NumericInterval} other
|
|
109
|
+
* @return {boolean}
|
|
82
110
|
*/
|
|
83
|
-
|
|
111
|
+
overlaps(other: NumericInterval): boolean;
|
|
112
|
+
/**
|
|
113
|
+
*
|
|
114
|
+
* @param {NumericInterval} other
|
|
115
|
+
* @return {boolean}
|
|
116
|
+
*/
|
|
117
|
+
contains(other: NumericInterval): boolean;
|
|
84
118
|
/**
|
|
85
119
|
*
|
|
86
120
|
* @param {NumericInterval} other
|
|
@@ -93,10 +127,16 @@ export class NumericInterval {
|
|
|
93
127
|
*/
|
|
94
128
|
hash(): number;
|
|
95
129
|
/**
|
|
96
|
-
* Distance between min and max (
|
|
130
|
+
* Distance between min and max (`= max - min`)
|
|
97
131
|
* @returns {number}
|
|
98
132
|
*/
|
|
99
133
|
get span(): number;
|
|
134
|
+
get middle(): number;
|
|
135
|
+
/**
|
|
136
|
+
* @deprecated use {@link middle} instead
|
|
137
|
+
* @returns {number}
|
|
138
|
+
*/
|
|
139
|
+
computeAverage(): number;
|
|
100
140
|
/**
|
|
101
141
|
* @readonly
|
|
102
142
|
* @type {boolean}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumericInterval.d.ts","sourceRoot":"","sources":["../../../../../src/core/math/interval/NumericInterval.js"],"names":[],"mappings":"AAKA;IACI;;;;;OAKG;IACH,kBAJW,MAAM,QACN,MAAM,EA4BhB;IAhBG;;;OAGG;IACH,KAFU,MAAM,CAEF;IACd;;;OAGG;IACH,KAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,oBAFU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEnB;IAIjC
|
|
1
|
+
{"version":3,"file":"NumericInterval.d.ts","sourceRoot":"","sources":["../../../../../src/core/math/interval/NumericInterval.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH;IACI;;;;;OAKG;IACH,kBAJW,MAAM,QACN,MAAM,EA4BhB;IAhBG;;;OAGG;IACH,KAFU,MAAM,CAEF;IACd;;;OAGG;IACH,KAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,oBAFU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEnB;IAIjC;;;;;OAKG;IACH,SAJW,MAAM,OACN,MAAM,GACJ,IAAI,CA6BhB;IAGD;;;;OAIG;IACH,sBAHW,MAAM,GACJ,IAAI,CAchB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,UAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,WAFa,OAAO,CAInB;IAGD;;;;OAIG;IACH,gCAFa,MAAM,CAOlB;IAED,0BAEC;IAED;;;MAKC;IAED;;;;OAIG;IACH,iBAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,WAClC,MAAM,QAIhB;IAED;;;;;OAKG;IACH,sBAJW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,WAClC,MAAM,GACL,MAAM,EAAE,CAOnB;IAED,mBAEC;IAED;;;OAGG;IACH,uBAFW,YAAY,QAKtB;IAED;;;OAGG;IACH,yBAFW,YAAY,QAKtB;IAED;;;;OAIG;IACH,YAHW,eAAe,GACb,IAAI,CAIhB;IAED;;;;OAIG;IACH,aAHW,eAAe,GACb,IAAI,CAShB;IAED;;;;OAIG;IACH,gBAHW,eAAe,GACd,OAAO,CAMlB;IAED;;;;OAIG;IACH,gBAHW,eAAe,GACd,OAAO,CAMlB;IAED;;;;OAIG;IACH,cAHW,eAAe,GACb,OAAO,CAMnB;IAED;;;OAGG;IACH,QAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAED,qBAEC;IAED;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAN1C;;mBAUS,eAAe;kBAMf,eAAe;iBAMf,eAAe;;mBA9SN,+BAA+B"}
|
|
@@ -3,6 +3,11 @@ import Signal from "../../events/signal/Signal.js";
|
|
|
3
3
|
import { computeHashFloat } from "../../primitives/numbers/computeHashFloat.js";
|
|
4
4
|
import { inverseLerp } from "../inverseLerp.js";
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Defines a numeric interval, by min and max.
|
|
8
|
+
* Provides a suite of interval logic operations.
|
|
9
|
+
* Interval can be of 0 width.
|
|
10
|
+
*/
|
|
6
11
|
export class NumericInterval {
|
|
7
12
|
/**
|
|
8
13
|
*
|
|
@@ -42,6 +47,7 @@ export class NumericInterval {
|
|
|
42
47
|
*
|
|
43
48
|
* @param {number} min
|
|
44
49
|
* @param {number} max
|
|
50
|
+
* @returns {this}
|
|
45
51
|
*/
|
|
46
52
|
set(min, max) {
|
|
47
53
|
assert.isNumber(min, 'min');
|
|
@@ -56,23 +62,27 @@ export class NumericInterval {
|
|
|
56
62
|
const oldMax = this.max;
|
|
57
63
|
|
|
58
64
|
if (min === oldMin && max === oldMax) {
|
|
59
|
-
|
|
65
|
+
// no change
|
|
66
|
+
return this;
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
this.min = min;
|
|
63
70
|
this.max = max;
|
|
64
71
|
|
|
65
72
|
if (!this.onChanged.hasHandlers()) {
|
|
66
|
-
return;
|
|
73
|
+
return this;
|
|
67
74
|
}
|
|
68
75
|
|
|
69
76
|
this.onChanged.send4(min, max, oldMin, oldMax);
|
|
77
|
+
|
|
78
|
+
return this;
|
|
70
79
|
}
|
|
71
80
|
|
|
72
81
|
|
|
73
82
|
/**
|
|
74
83
|
*
|
|
75
84
|
* @param {number} value
|
|
85
|
+
* @returns {this}
|
|
76
86
|
*/
|
|
77
87
|
multiplyScalar(value) {
|
|
78
88
|
const v0 = this.min * value;
|
|
@@ -82,9 +92,10 @@ export class NumericInterval {
|
|
|
82
92
|
//probably negative scale
|
|
83
93
|
this.set(v1, v0);
|
|
84
94
|
} else {
|
|
85
|
-
|
|
86
95
|
this.set(v0, v1);
|
|
87
96
|
}
|
|
97
|
+
|
|
98
|
+
return this;
|
|
88
99
|
}
|
|
89
100
|
|
|
90
101
|
/**
|
|
@@ -113,13 +124,6 @@ export class NumericInterval {
|
|
|
113
124
|
return this.min === this.max;
|
|
114
125
|
}
|
|
115
126
|
|
|
116
|
-
/**
|
|
117
|
-
*
|
|
118
|
-
* @returns {number}
|
|
119
|
-
*/
|
|
120
|
-
computeAverage() {
|
|
121
|
-
return (this.min + this.max) * 0.5;
|
|
122
|
-
}
|
|
123
127
|
|
|
124
128
|
/**
|
|
125
129
|
*
|
|
@@ -129,7 +133,8 @@ export class NumericInterval {
|
|
|
129
133
|
sampleRandom(random) {
|
|
130
134
|
assert.isFunction(random, "random");
|
|
131
135
|
|
|
132
|
-
|
|
136
|
+
const span = this.max - this.min;
|
|
137
|
+
return this.min + random() * span;
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
fromJSON(json) {
|
|
@@ -143,6 +148,28 @@ export class NumericInterval {
|
|
|
143
148
|
};
|
|
144
149
|
}
|
|
145
150
|
|
|
151
|
+
/**
|
|
152
|
+
*
|
|
153
|
+
* @param {number[]|Float32Array|Float64Array} array
|
|
154
|
+
* @param {number} [offset=0]
|
|
155
|
+
*/
|
|
156
|
+
fromArray(array, offset = 0) {
|
|
157
|
+
return this.set(array[offset], array[offset + 1]);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
*
|
|
162
|
+
* @param {number[]|Float32Array|Float64Array} [destination=[]]
|
|
163
|
+
* @param {number} [offset=0]
|
|
164
|
+
* @return {number[]}
|
|
165
|
+
*/
|
|
166
|
+
toArray(destination = [], offset = 0) {
|
|
167
|
+
destination[offset] = this.min;
|
|
168
|
+
destination[offset + 1] = this.max;
|
|
169
|
+
|
|
170
|
+
return destination;
|
|
171
|
+
}
|
|
172
|
+
|
|
146
173
|
toString() {
|
|
147
174
|
return `NumericInterval{ min=${this.min}, max=${this.max} }`;
|
|
148
175
|
}
|
|
@@ -168,9 +195,46 @@ export class NumericInterval {
|
|
|
168
195
|
/**
|
|
169
196
|
*
|
|
170
197
|
* @param {NumericInterval} other
|
|
198
|
+
* @returns {this}
|
|
171
199
|
*/
|
|
172
200
|
copy(other) {
|
|
173
|
-
this.set(other.min, other.max);
|
|
201
|
+
return this.set(other.min, other.max);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Performs union operation with another interval, mutates current interval.
|
|
206
|
+
* @param {NumericInterval} other
|
|
207
|
+
* @returns {this}
|
|
208
|
+
*/
|
|
209
|
+
union(other) {
|
|
210
|
+
assert.equal(other.isNumericInterval, true, "other must be a NumericInterval");
|
|
211
|
+
|
|
212
|
+
return this.set(
|
|
213
|
+
Math.min(this.min, other.min),
|
|
214
|
+
Math.max(this.max, other.max)
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
*
|
|
220
|
+
* @param {NumericInterval} other
|
|
221
|
+
* @return {boolean}
|
|
222
|
+
*/
|
|
223
|
+
overlaps(other) {
|
|
224
|
+
assert.equal(other.isNumericInterval, true, "other must be a NumericInterval");
|
|
225
|
+
|
|
226
|
+
return this.min < other.max && this.max > other.min;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
*
|
|
231
|
+
* @param {NumericInterval} other
|
|
232
|
+
* @return {boolean}
|
|
233
|
+
*/
|
|
234
|
+
contains(other) {
|
|
235
|
+
assert.equal(other.isNumericInterval, true, "other must be a NumericInterval");
|
|
236
|
+
|
|
237
|
+
return this.min <= other.min && this.max >= other.max;
|
|
174
238
|
}
|
|
175
239
|
|
|
176
240
|
/**
|
|
@@ -179,6 +243,8 @@ export class NumericInterval {
|
|
|
179
243
|
* @returns {boolean}
|
|
180
244
|
*/
|
|
181
245
|
equals(other) {
|
|
246
|
+
assert.equal(other.isNumericInterval, true, "other must be a NumericInterval");
|
|
247
|
+
|
|
182
248
|
return this.min === other.min && this.max === other.max;
|
|
183
249
|
}
|
|
184
250
|
|
|
@@ -195,12 +261,24 @@ export class NumericInterval {
|
|
|
195
261
|
}
|
|
196
262
|
|
|
197
263
|
/**
|
|
198
|
-
* Distance between min and max (
|
|
264
|
+
* Distance between min and max (`= max - min`)
|
|
199
265
|
* @returns {number}
|
|
200
266
|
*/
|
|
201
267
|
get span() {
|
|
202
268
|
return this.max - this.min;
|
|
203
269
|
}
|
|
270
|
+
|
|
271
|
+
get middle() {
|
|
272
|
+
return (this.max + this.min) * 0.5;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @deprecated use {@link middle} instead
|
|
277
|
+
* @returns {number}
|
|
278
|
+
*/
|
|
279
|
+
computeAverage() {
|
|
280
|
+
return this.middle;
|
|
281
|
+
}
|
|
204
282
|
}
|
|
205
283
|
|
|
206
284
|
/**
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compute bounds of a
|
|
3
|
-
* Note that this is a 1d case solver
|
|
2
|
+
* Compute `y0,y1` bounds of a cubic hermite spline.
|
|
4
3
|
* Lower bound will be written into result[offset], upper bounds will be written into result[offset+result_stride]
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 0 = 3 t^2 (m0 + m1 + 2 p0 - 2 p1) - 2 t (2 m0 + m1 + 3 p0 - 3 p1) + m0
|
|
8
|
-
* @param {number[]|Float32Array} result
|
|
4
|
+
*
|
|
5
|
+
* @param {number[]|Float32Array} result output will be written here, only y0 and y1
|
|
9
6
|
* @param {number} result_offset offset into the result array
|
|
10
|
-
* @param {number} result_stride
|
|
7
|
+
* @param {number} result_stride useful for mixing multidimensional results
|
|
11
8
|
* @param {number} p0
|
|
12
9
|
* @param {number} p1
|
|
13
10
|
* @param {number} m0
|
|
14
11
|
* @param {number} m1
|
|
12
|
+
*
|
|
13
|
+
* @author Alex Goldring
|
|
14
|
+
* @copyright Company Named Limited (c) 2025
|
|
15
15
|
*/
|
|
16
16
|
export function spline_hermite3_bounds(result: number[] | Float32Array, result_offset: number, result_stride: number, p0: number, p1: number, m0: number, m1: number): void;
|
|
17
17
|
//# sourceMappingURL=spline_hermite3_bounds.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spline_hermite3_bounds.d.ts","sourceRoot":"","sources":["../../../../../src/core/math/spline/spline_hermite3_bounds.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,+
|
|
1
|
+
{"version":3,"file":"spline_hermite3_bounds.d.ts","sourceRoot":"","sources":["../../../../../src/core/math/spline/spline_hermite3_bounds.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,+CAXW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,iBACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAqFhB"}
|
|
@@ -4,19 +4,19 @@ import { min2 } from "../min2.js";
|
|
|
4
4
|
import { spline_hermite3 } from "./spline_hermite3.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Compute bounds of a
|
|
8
|
-
* Note that this is a 1d case solver
|
|
7
|
+
* Compute `y0,y1` bounds of a cubic hermite spline.
|
|
9
8
|
* Lower bound will be written into result[offset], upper bounds will be written into result[offset+result_stride]
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* 0 = 3 t^2 (m0 + m1 + 2 p0 - 2 p1) - 2 t (2 m0 + m1 + 3 p0 - 3 p1) + m0
|
|
13
|
-
* @param {number[]|Float32Array} result
|
|
9
|
+
*
|
|
10
|
+
* @param {number[]|Float32Array} result output will be written here, only y0 and y1
|
|
14
11
|
* @param {number} result_offset offset into the result array
|
|
15
|
-
* @param {number} result_stride
|
|
12
|
+
* @param {number} result_stride useful for mixing multidimensional results
|
|
16
13
|
* @param {number} p0
|
|
17
14
|
* @param {number} p1
|
|
18
15
|
* @param {number} m0
|
|
19
16
|
* @param {number} m1
|
|
17
|
+
*
|
|
18
|
+
* @author Alex Goldring
|
|
19
|
+
* @copyright Company Named Limited (c) 2025
|
|
20
20
|
*/
|
|
21
21
|
export function spline_hermite3_bounds(
|
|
22
22
|
result,
|
|
@@ -24,6 +24,12 @@ export function spline_hermite3_bounds(
|
|
|
24
24
|
result_stride,
|
|
25
25
|
p0, p1, m0, m1) {
|
|
26
26
|
|
|
27
|
+
/*
|
|
28
|
+
Solution is based on https://stackoverflow.com/questions/24809978/calculating-the-bounding-box-of-cubic-bezier-curve
|
|
29
|
+
Differentiation of hermite polynomial is done in WolframAlpha:
|
|
30
|
+
0 = 3 t^2 (m0 + m1 + 2 p0 - 2 p1) - 2 t (2 m0 + m1 + 3 p0 - 3 p1) + m0
|
|
31
|
+
*/
|
|
32
|
+
|
|
27
33
|
assert.greaterThan(result_stride, 0, 'result_stride must be greater than 0');
|
|
28
34
|
assert.isInteger(result_stride, 'result_stride');
|
|
29
35
|
|
|
@@ -2,10 +2,10 @@ export default ObservedBoolean;
|
|
|
2
2
|
declare class ObservedBoolean extends Boolean {
|
|
3
3
|
/**
|
|
4
4
|
*
|
|
5
|
-
* @param {boolean} value
|
|
5
|
+
* @param {boolean} [value=false]
|
|
6
6
|
* @constructor
|
|
7
7
|
*/
|
|
8
|
-
constructor(value
|
|
8
|
+
constructor(value?: boolean);
|
|
9
9
|
/**
|
|
10
10
|
* @readonly
|
|
11
11
|
* @type {Signal<boolean,boolean>}
|
|
@@ -50,7 +50,7 @@ declare class ObservedBoolean extends Boolean {
|
|
|
50
50
|
process(f: (arg0: boolean, arg1: boolean) => any, thisArg?: any): this;
|
|
51
51
|
/**
|
|
52
52
|
*
|
|
53
|
-
* @returns {
|
|
53
|
+
* @returns {boolean}
|
|
54
54
|
*/
|
|
55
55
|
getValue(): boolean;
|
|
56
56
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedBoolean.d.ts","sourceRoot":"","sources":["../../../../src/core/model/ObservedBoolean.js"],"names":[],"mappings":";AAGA;IAQI;;;;OAIG;IACH,
|
|
1
|
+
{"version":3,"file":"ObservedBoolean.d.ts","sourceRoot":"","sources":["../../../../src/core/model/ObservedBoolean.js"],"names":[],"mappings":";AAGA;IAQI;;;;OAIG;IACH,oBAHW,OAAO,EAcjB;IAtBD;;;OAGG;IACH,oBAFU,MAAM,CAAC,OAAO,EAAC,OAAO,CAAC,CAER;IAYrB;;;;OAIG;IACH,gBAAoB;IAmBxB;;;;OAIG;IACH,WAHW,OAAO,GACL,eAAe,CAa3B;IAED,gBAEC;IAED,iBAEC;IAED;;;OAGG;IACH,YAFW,eAAe,QAIzB;IAED;;;;OAIG;IACH,cAHW,eAAe,GACb,OAAO,CAInB;IAED;;;OAGG;IACH,YAFY,MAAM,CAIjB;IAED;;;;;OAKG;IACH,WAJW,CAAS,IAAO,EAAP,OAAO,EAAC,IAAO,EAAP,OAAO,QAAC,YACzB,GAAC,GACC,IAAI,CAWhB;IAED;;;OAGG;IACH,YAFa,OAAO,CAInB;IAED;;OAEG;IACH,eAEC;IAED,kBAEC;IAED,yBAEC;IAED;;;OAGG;IACH,uBAFW,YAAY,QAItB;IAED;;;OAGG;IACH,yBAFW,YAAY,QAKtB;IAeL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAlB1C;;eAIS,eAAe;cAMf,eAAe;;mBAjKN,4BAA4B"}
|
|
@@ -11,10 +11,10 @@ class ObservedBoolean extends Boolean {
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
*
|
|
14
|
-
* @param {boolean} value
|
|
14
|
+
* @param {boolean} [value=false]
|
|
15
15
|
* @constructor
|
|
16
16
|
*/
|
|
17
|
-
constructor(value) {
|
|
17
|
+
constructor(value=false) {
|
|
18
18
|
super();
|
|
19
19
|
|
|
20
20
|
assert.isBoolean(value, 'value');
|
|
@@ -113,7 +113,7 @@ class ObservedBoolean extends Boolean {
|
|
|
113
113
|
|
|
114
114
|
/**
|
|
115
115
|
*
|
|
116
|
-
* @returns {
|
|
116
|
+
* @returns {boolean}
|
|
117
117
|
*/
|
|
118
118
|
getValue() {
|
|
119
119
|
return this.__value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedEnum.d.ts","sourceRoot":"","sources":["../../../../src/core/model/ObservedEnum.js"],"names":[],"mappings":";AAGA;IACI
|
|
1
|
+
{"version":3,"file":"ObservedEnum.d.ts","sourceRoot":"","sources":["../../../../src/core/model/ObservedEnum.js"],"names":[],"mappings":";AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IACI;;;;OAIG;IACH,mBAHW,CAAC;;OAyBX;IAlBG;;;;OAIG;IACH,gBAAoB;IACpB;;;;OAIG;IACH,mBAA0B;IAE1B;;;OAGG;IACH,oBAFU,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAEQ;IAGjC;;;OAGG;IACH;;MAEC;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,YAAY,CAYxB;IAED;;;;OAIG;IACH,mBAHW,YAAY,CAAC,GAAC,CAAC,GACb,OAAO,CAInB;IAED;;;OAGG;IACH,QAFY,MAAM,CAcjB;IAED;;;OAGG;IACH,YAFW,YAAY,QAItB;IAED;;;OAGG;IACH,YAFa,CAAC,CAIb;IAED;;;;;OAKG;IACH,mBAJW,CAAS,IAAC,EAAD,CAAC,EAAC,IAAC,EAAD,CAAC,QAAC,YACb,GAAC,GACC,IAAI,CAUhB;IAED,YAEC;IAED,yBAEC;CACJ;mBA9IkB,4BAA4B"}
|