@codexo/exojs 0.6.12 → 0.7.11
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/CHANGELOG.md +1316 -0
- package/dist/esm/audio/AbstractMedia.d.ts +18 -0
- package/dist/esm/audio/AbstractMedia.js +66 -0
- package/dist/esm/audio/AbstractMedia.js.map +1 -1
- package/dist/esm/audio/AudioAnalyser.d.ts +62 -23
- package/dist/esm/audio/AudioAnalyser.js +261 -57
- package/dist/esm/audio/AudioAnalyser.js.map +1 -1
- package/dist/esm/audio/AudioBus.d.ts +45 -0
- package/dist/esm/audio/AudioBus.js +219 -0
- package/dist/esm/audio/AudioBus.js.map +1 -0
- package/dist/esm/audio/AudioFilter.d.ts +9 -0
- package/dist/esm/audio/AudioFilter.js +7 -0
- package/dist/esm/audio/AudioFilter.js.map +1 -0
- package/dist/esm/audio/AudioListener.d.ts +20 -0
- package/dist/esm/audio/AudioListener.js +86 -0
- package/dist/esm/audio/AudioListener.js.map +1 -0
- package/dist/esm/audio/AudioManager.d.ts +31 -0
- package/dist/esm/audio/AudioManager.js +102 -0
- package/dist/esm/audio/AudioManager.js.map +1 -0
- package/dist/esm/audio/BeatDetector.d.ts +121 -0
- package/dist/esm/audio/BeatDetector.js +936 -0
- package/dist/esm/audio/BeatDetector.js.map +1 -0
- package/dist/esm/audio/Envelope.d.ts +44 -0
- package/dist/esm/audio/Envelope.js +60 -0
- package/dist/esm/audio/Envelope.js.map +1 -0
- package/dist/esm/audio/Music.d.ts +8 -0
- package/dist/esm/audio/Music.js +33 -4
- package/dist/esm/audio/Music.js.map +1 -1
- package/dist/esm/audio/OscillatorSound.d.ts +98 -0
- package/dist/esm/audio/OscillatorSound.js +342 -0
- package/dist/esm/audio/OscillatorSound.js.map +1 -0
- package/dist/esm/audio/Sound.d.ts +94 -9
- package/dist/esm/audio/Sound.js +283 -117
- package/dist/esm/audio/Sound.js.map +1 -1
- package/dist/esm/audio/crossFade.d.ts +19 -0
- package/dist/esm/audio/crossFade.js +26 -0
- package/dist/esm/audio/crossFade.js.map +1 -0
- package/dist/esm/audio/dsp/fft.d.ts +22 -0
- package/dist/esm/audio/dsp/mel.d.ts +43 -0
- package/dist/esm/audio/dsp/tempogram.d.ts +51 -0
- package/dist/esm/audio/filters/ChorusFilter.d.ts +47 -0
- package/dist/esm/audio/filters/ChorusFilter.js +139 -0
- package/dist/esm/audio/filters/ChorusFilter.js.map +1 -0
- package/dist/esm/audio/filters/CompressorFilter.d.ts +31 -0
- package/dist/esm/audio/filters/CompressorFilter.js +97 -0
- package/dist/esm/audio/filters/CompressorFilter.js.map +1 -0
- package/dist/esm/audio/filters/DelayFilter.d.ts +23 -0
- package/dist/esm/audio/filters/DelayFilter.js +100 -0
- package/dist/esm/audio/filters/DelayFilter.js.map +1 -0
- package/dist/esm/audio/filters/DuckingFilter.d.ts +31 -0
- package/dist/esm/audio/filters/DuckingFilter.js +152 -0
- package/dist/esm/audio/filters/DuckingFilter.js.map +1 -0
- package/dist/esm/audio/filters/EqualizerFilter.d.ts +29 -0
- package/dist/esm/audio/filters/EqualizerFilter.js +94 -0
- package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -0
- package/dist/esm/audio/filters/GranularFilter.d.ts +56 -0
- package/dist/esm/audio/filters/GranularFilter.js +170 -0
- package/dist/esm/audio/filters/GranularFilter.js.map +1 -0
- package/dist/esm/audio/filters/HighpassFilter.d.ts +19 -0
- package/dist/esm/audio/filters/HighpassFilter.js +62 -0
- package/dist/esm/audio/filters/HighpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/LowpassFilter.d.ts +19 -0
- package/dist/esm/audio/filters/LowpassFilter.js +62 -0
- package/dist/esm/audio/filters/LowpassFilter.js.map +1 -0
- package/dist/esm/audio/filters/PitchShiftFilter.d.ts +42 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js +130 -0
- package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -0
- package/dist/esm/audio/filters/ReverbFilter.d.ts +24 -0
- package/dist/esm/audio/filters/ReverbFilter.js +107 -0
- package/dist/esm/audio/filters/ReverbFilter.js.map +1 -0
- package/dist/esm/audio/filters/VocoderFilter.d.ts +38 -0
- package/dist/esm/audio/filters/VocoderFilter.js +163 -0
- package/dist/esm/audio/filters/VocoderFilter.js.map +1 -0
- package/dist/esm/audio/filters/WorkletFilter.d.ts +46 -0
- package/dist/esm/audio/filters/WorkletFilter.js +101 -0
- package/dist/esm/audio/filters/WorkletFilter.js.map +1 -0
- package/dist/esm/audio/filters/index.d.ts +12 -0
- package/dist/esm/audio/index.d.ts +15 -1
- package/dist/esm/audio/worklet/registerWorklet.d.ts +10 -0
- package/dist/esm/audio/worklet/registerWorklet.js +44 -0
- package/dist/esm/audio/worklet/registerWorklet.js.map +1 -0
- package/dist/esm/core/Application.d.ts +19 -0
- package/dist/esm/core/Application.js +76 -2
- package/dist/esm/core/Application.js.map +1 -1
- package/dist/esm/core/SceneNode.d.ts +9 -1
- package/dist/esm/core/SceneNode.js +44 -6
- package/dist/esm/core/SceneNode.js.map +1 -1
- package/dist/esm/core/Time.js +1 -1
- package/dist/esm/core/index.d.ts +0 -1
- package/dist/esm/debug/BoundingBoxesLayer.d.ts +18 -0
- package/dist/esm/debug/BoundingBoxesLayer.js +128 -0
- package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -0
- package/dist/esm/debug/DebugLayer.d.ts +29 -0
- package/dist/esm/debug/DebugLayer.js +26 -0
- package/dist/esm/debug/DebugLayer.js.map +1 -0
- package/dist/esm/debug/DebugOverlay.d.ts +48 -0
- package/dist/esm/debug/DebugOverlay.js +117 -0
- package/dist/esm/debug/DebugOverlay.js.map +1 -0
- package/dist/esm/debug/HitTestLayer.d.ts +23 -0
- package/dist/esm/debug/HitTestLayer.js +109 -0
- package/dist/esm/debug/HitTestLayer.js.map +1 -0
- package/dist/esm/debug/PerformanceLayer.d.ts +21 -0
- package/dist/esm/debug/PerformanceLayer.js +175 -0
- package/dist/esm/debug/PerformanceLayer.js.map +1 -0
- package/dist/esm/debug/PointerStackLayer.d.ts +23 -0
- package/dist/esm/debug/PointerStackLayer.js +152 -0
- package/dist/esm/debug/PointerStackLayer.js.map +1 -0
- package/dist/esm/debug/index.d.ts +6 -0
- package/dist/esm/debug/index.js +7 -0
- package/dist/esm/debug/index.js.map +1 -0
- package/dist/esm/index.js +28 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/input/InputManager.d.ts +10 -0
- package/dist/esm/input/InputManager.js +35 -5
- package/dist/esm/input/InputManager.js.map +1 -1
- package/dist/esm/input/InteractionEvent.d.ts +18 -0
- package/dist/esm/input/InteractionEvent.js +29 -0
- package/dist/esm/input/InteractionEvent.js.map +1 -0
- package/dist/esm/input/InteractionManager.d.ts +134 -0
- package/dist/esm/input/InteractionManager.js +546 -0
- package/dist/esm/input/InteractionManager.js.map +1 -0
- package/dist/esm/input/index.d.ts +2 -0
- package/dist/esm/input/interaction-hooks.d.ts +34 -0
- package/dist/esm/input/interaction-hooks.js +35 -0
- package/dist/esm/input/interaction-hooks.js.map +1 -0
- package/dist/esm/math/Circle.d.ts +12 -2
- package/dist/esm/math/Circle.js +82 -14
- package/dist/esm/math/Circle.js.map +1 -1
- package/dist/esm/math/Interval.js +1 -1
- package/dist/esm/math/ObservableVector.d.ts +2 -2
- package/dist/esm/math/ObservableVector.js +4 -2
- package/dist/esm/math/ObservableVector.js.map +1 -1
- package/dist/esm/math/Polygon.d.ts +15 -1
- package/dist/esm/math/Polygon.js +58 -6
- package/dist/esm/math/Polygon.js.map +1 -1
- package/dist/esm/math/Quadtree.d.ts +47 -0
- package/dist/esm/math/Quadtree.js +168 -0
- package/dist/esm/math/Quadtree.js.map +1 -0
- package/dist/esm/math/Random.js +1 -1
- package/dist/esm/math/Size.js +1 -1
- package/dist/esm/math/Vector.js +1 -1
- package/dist/esm/math/collision-detection.js +4 -1
- package/dist/esm/math/collision-detection.js.map +1 -1
- package/dist/esm/math/index.d.ts +1 -0
- package/dist/esm/particles/ParticleSystem.js +1 -0
- package/dist/esm/particles/ParticleSystem.js.map +1 -1
- package/dist/esm/particles/affectors/TorqueAffector.js +1 -1
- package/dist/esm/rendering/Container.d.ts +1 -0
- package/dist/esm/rendering/Container.js +19 -0
- package/dist/esm/rendering/Container.js.map +1 -1
- package/dist/esm/rendering/RenderNode.d.ts +27 -0
- package/dist/esm/rendering/RenderNode.js +44 -0
- package/dist/esm/rendering/RenderNode.js.map +1 -1
- package/dist/esm/rendering/View.d.ts +6 -4
- package/dist/esm/rendering/View.js +12 -2
- package/dist/esm/rendering/View.js.map +1 -1
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +109 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +268 -0
- package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +111 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js +397 -0
- package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -0
- package/dist/esm/rendering/index.d.ts +3 -0
- package/dist/esm/rendering/mesh/Mesh.js +1 -0
- package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.d.ts +34 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +60 -0
- package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -0
- package/dist/esm/rendering/sprite/Sprite.d.ts +6 -1
- package/dist/esm/rendering/sprite/Sprite.js +41 -19
- package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
- package/dist/esm/rendering/video/Video.d.ts +4 -0
- package/dist/esm/rendering/video/Video.js +32 -4
- package/dist/esm/rendering/video/Video.js.map +1 -1
- package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +4 -4
- package/dist/esm/rendering/webgl2/WebGl2Backend.js +7 -16
- package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
- package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +10 -8
- package/dist/esm/rendering/webgpu/WebGpuBackend.js +30 -40
- package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
- package/dist/exo.esm.js +7764 -2453
- package/dist/exo.esm.js.map +1 -1
- package/package.json +14 -2
- package/dist/esm/core/Quadtree.d.ts +0 -20
- package/dist/esm/core/Quadtree.js +0 -86
- package/dist/esm/core/Quadtree.js.map +0 -1
|
@@ -9,6 +9,9 @@ export declare class Circle implements ShapeLike {
|
|
|
9
9
|
readonly collisionType: CollisionType;
|
|
10
10
|
private readonly _position;
|
|
11
11
|
private _collisionVertices;
|
|
12
|
+
private _verticesDirty;
|
|
13
|
+
private _normals;
|
|
14
|
+
private _normalsDirty;
|
|
12
15
|
private _radius;
|
|
13
16
|
constructor(x?: number, y?: number, radius?: number);
|
|
14
17
|
get position(): Vector;
|
|
@@ -27,7 +30,15 @@ export declare class Circle implements ShapeLike {
|
|
|
27
30
|
equals({ x, y, radius }?: Partial<Circle>): boolean;
|
|
28
31
|
getBounds(): Rectangle;
|
|
29
32
|
/**
|
|
30
|
-
*
|
|
33
|
+
* Returns the edge normals for the approximated collision polygon.
|
|
34
|
+
*
|
|
35
|
+
* The returned array is cached and reused across calls — the same array
|
|
36
|
+
* reference is returned on consecutive calls when nothing has changed.
|
|
37
|
+
* This matches the `Sprite.getNormals()` behaviour introduced in 0.6.19.
|
|
38
|
+
*
|
|
39
|
+
* The cache is invalidated automatically when `x`, `y`, `radius`,
|
|
40
|
+
* `position`, `setPosition`, `setRadius`, `set`, or `copy` mutate the
|
|
41
|
+
* circle.
|
|
31
42
|
*/
|
|
32
43
|
getNormals(): Array<Vector>;
|
|
33
44
|
project(axis: Vector, result?: Interval): Interval;
|
|
@@ -36,6 +47,5 @@ export declare class Circle implements ShapeLike {
|
|
|
36
47
|
collidesWith(target: Collidable): CollisionResponse | null;
|
|
37
48
|
destroy(): void;
|
|
38
49
|
private getCollisionVertices;
|
|
39
|
-
private getCollisionVertex;
|
|
40
50
|
static get temp(): Circle;
|
|
41
51
|
}
|
package/dist/esm/math/Circle.js
CHANGED
|
@@ -10,6 +10,9 @@ class Circle {
|
|
|
10
10
|
collisionType = CollisionType.Circle;
|
|
11
11
|
_position;
|
|
12
12
|
_collisionVertices = null;
|
|
13
|
+
_verticesDirty = true;
|
|
14
|
+
_normals = null;
|
|
15
|
+
_normalsDirty = true;
|
|
13
16
|
_radius;
|
|
14
17
|
constructor(x = 0, y = 0, radius = 0) {
|
|
15
18
|
this._position = new Vector(x, y);
|
|
@@ -20,41 +23,68 @@ class Circle {
|
|
|
20
23
|
}
|
|
21
24
|
set position(position) {
|
|
22
25
|
this._position.copy(position);
|
|
26
|
+
this._verticesDirty = true;
|
|
27
|
+
this._normalsDirty = true;
|
|
23
28
|
}
|
|
24
29
|
get x() {
|
|
25
30
|
return this._position.x;
|
|
26
31
|
}
|
|
27
32
|
set x(x) {
|
|
33
|
+
if (this._position.x === x) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
28
36
|
this._position.x = x;
|
|
37
|
+
this._verticesDirty = true;
|
|
38
|
+
this._normalsDirty = true;
|
|
29
39
|
}
|
|
30
40
|
get y() {
|
|
31
41
|
return this._position.y;
|
|
32
42
|
}
|
|
33
43
|
set y(y) {
|
|
44
|
+
if (this._position.y === y) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
34
47
|
this._position.y = y;
|
|
48
|
+
this._verticesDirty = true;
|
|
49
|
+
this._normalsDirty = true;
|
|
35
50
|
}
|
|
36
51
|
get radius() {
|
|
37
52
|
return this._radius;
|
|
38
53
|
}
|
|
39
54
|
set radius(radius) {
|
|
55
|
+
if (this._radius === radius) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
40
58
|
this._radius = radius;
|
|
59
|
+
this._verticesDirty = true;
|
|
60
|
+
this._normalsDirty = true;
|
|
41
61
|
}
|
|
42
62
|
setPosition(x, y) {
|
|
43
63
|
this._position.set(x, y);
|
|
64
|
+
this._verticesDirty = true;
|
|
65
|
+
this._normalsDirty = true;
|
|
44
66
|
return this;
|
|
45
67
|
}
|
|
46
68
|
setRadius(radius) {
|
|
47
|
-
this._radius
|
|
69
|
+
if (this._radius !== radius) {
|
|
70
|
+
this._radius = radius;
|
|
71
|
+
this._verticesDirty = true;
|
|
72
|
+
this._normalsDirty = true;
|
|
73
|
+
}
|
|
48
74
|
return this;
|
|
49
75
|
}
|
|
50
76
|
set(x, y, radius) {
|
|
51
77
|
this._position.set(x, y);
|
|
52
78
|
this._radius = radius;
|
|
79
|
+
this._verticesDirty = true;
|
|
80
|
+
this._normalsDirty = true;
|
|
53
81
|
return this;
|
|
54
82
|
}
|
|
55
83
|
copy(circle) {
|
|
56
84
|
this._position.copy(circle.position);
|
|
57
85
|
this._radius = circle.radius;
|
|
86
|
+
this._verticesDirty = true;
|
|
87
|
+
this._normalsDirty = true;
|
|
58
88
|
return this;
|
|
59
89
|
}
|
|
60
90
|
clone() {
|
|
@@ -69,11 +99,33 @@ class Circle {
|
|
|
69
99
|
return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2);
|
|
70
100
|
}
|
|
71
101
|
/**
|
|
72
|
-
*
|
|
102
|
+
* Returns the edge normals for the approximated collision polygon.
|
|
103
|
+
*
|
|
104
|
+
* The returned array is cached and reused across calls — the same array
|
|
105
|
+
* reference is returned on consecutive calls when nothing has changed.
|
|
106
|
+
* This matches the `Sprite.getNormals()` behaviour introduced in 0.6.19.
|
|
107
|
+
*
|
|
108
|
+
* The cache is invalidated automatically when `x`, `y`, `radius`,
|
|
109
|
+
* `position`, `setPosition`, `setRadius`, `set`, or `copy` mutate the
|
|
110
|
+
* circle.
|
|
73
111
|
*/
|
|
74
112
|
getNormals() {
|
|
75
|
-
|
|
76
|
-
|
|
113
|
+
if (this._normalsDirty) {
|
|
114
|
+
const points = this.getCollisionVertices();
|
|
115
|
+
if (this._normals === null) {
|
|
116
|
+
this._normals = points.map(() => new Vector());
|
|
117
|
+
}
|
|
118
|
+
for (let i = 0; i < points.length; i++) {
|
|
119
|
+
const p = points[i];
|
|
120
|
+
const next = points[(i + 1) % points.length];
|
|
121
|
+
this._normals[i]
|
|
122
|
+
.set(next.x - p.x, next.y - p.y)
|
|
123
|
+
.rperp()
|
|
124
|
+
.normalize();
|
|
125
|
+
}
|
|
126
|
+
this._normalsDirty = false;
|
|
127
|
+
}
|
|
128
|
+
return this._normals;
|
|
77
129
|
}
|
|
78
130
|
project(axis, result = new Interval()) {
|
|
79
131
|
const center = axis.dot(this.x, this.y);
|
|
@@ -109,22 +161,38 @@ class Circle {
|
|
|
109
161
|
}
|
|
110
162
|
destroy() {
|
|
111
163
|
this._position.destroy();
|
|
164
|
+
if (this._collisionVertices !== null) {
|
|
165
|
+
for (const v of this._collisionVertices) {
|
|
166
|
+
v.destroy();
|
|
167
|
+
}
|
|
168
|
+
this._collisionVertices = null;
|
|
169
|
+
}
|
|
170
|
+
if (this._normals !== null) {
|
|
171
|
+
for (const v of this._normals) {
|
|
172
|
+
v.destroy();
|
|
173
|
+
}
|
|
174
|
+
this._normals = null;
|
|
175
|
+
}
|
|
112
176
|
}
|
|
113
177
|
getCollisionVertices() {
|
|
114
|
-
if (this.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
this._collisionVertices
|
|
178
|
+
if (this._verticesDirty) {
|
|
179
|
+
const segments = Circle.collisionSegments;
|
|
180
|
+
if (this._collisionVertices === null) {
|
|
181
|
+
this._collisionVertices = new Array(segments);
|
|
182
|
+
for (let i = 0; i < segments; i++) {
|
|
183
|
+
this._collisionVertices[i] = new Vector();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
for (let i = 0; i < segments; i++) {
|
|
187
|
+
const angle = i * 2 * Math.PI / segments - Math.PI / 2;
|
|
188
|
+
const x = Math.cos(angle) * this._radius;
|
|
189
|
+
const y = Math.sin(angle) * this._radius;
|
|
190
|
+
this._collisionVertices[i].set(this._radius + x, this._radius + y);
|
|
118
191
|
}
|
|
192
|
+
this._verticesDirty = false;
|
|
119
193
|
}
|
|
120
194
|
return this._collisionVertices;
|
|
121
195
|
}
|
|
122
|
-
getCollisionVertex(index) {
|
|
123
|
-
const angle = index * 2 * Math.PI / Circle.collisionSegments - Math.PI / 2;
|
|
124
|
-
const x = Math.cos(angle) * this._radius;
|
|
125
|
-
const y = Math.sin(angle) * this._radius;
|
|
126
|
-
return new Vector(this._radius + x, this._radius + y);
|
|
127
|
-
}
|
|
128
196
|
static get temp() {
|
|
129
197
|
if (temp === null) {
|
|
130
198
|
temp = new Circle();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Circle.js","sources":["../../../../src/math/Circle.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAsBA,IAAI,IAAI,GAAkB,IAAI;MAEjB,MAAM,CAAA;AAER,IAAA,OAAO,iBAAiB,GAAG,EAAE;AAEpB,IAAA,aAAa,GAAkB,aAAa,CAAC,MAAM;AAElD,IAAA,SAAS;IAClB,kBAAkB,GAAyB,IAAI;
|
|
1
|
+
{"version":3,"file":"Circle.js","sources":["../../../../src/math/Circle.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAsBA,IAAI,IAAI,GAAkB,IAAI;MAEjB,MAAM,CAAA;AAER,IAAA,OAAO,iBAAiB,GAAG,EAAE;AAEpB,IAAA,aAAa,GAAkB,aAAa,CAAC,MAAM;AAElD,IAAA,SAAS;IAClB,kBAAkB,GAAyB,IAAI;IAC/C,cAAc,GAAY,IAAI;IAC9B,QAAQ,GAAyB,IAAI;IACrC,aAAa,GAAY,IAAI;AAC7B,IAAA,OAAO;IAEf,WAAA,CAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAA;QACvC,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACzB;AAEA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,IAAW,QAAQ,CAAC,QAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAEA,IAAA,IAAW,CAAC,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B;IAEA,IAAW,CAAC,CAAC,CAAS,EAAA;QAClB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE;YACxB;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAEA,IAAA,IAAW,CAAC,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B;IAEA,IAAW,CAAC,CAAC,CAAS,EAAA;QAClB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE;YACxB;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;AAEA,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO;IACvB;IAEA,IAAW,MAAM,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;YACzB;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC7B;IAEO,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,SAAS,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC7B;AAEA,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,MAAc,EAAA;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,IAAI,CAAC,MAAc,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,OAAO,IAAI;IACf;IAEO,KAAK,GAAA;AACR,QAAA,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAS;IAC1D;IAEO,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAsB,EAAE,EAAA;QAChD,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC;gBAC/B,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC;gBAC/B,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;IAC3D;IAEO,SAAS,GAAA;AACZ,QAAA,OAAO,IAAI,SAAS,CAChB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EACpB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EACpB,IAAI,CAAC,MAAM,GAAG,CAAC,EACf,IAAI,CAAC,MAAM,GAAG,CAAC,CAClB;IACL;AAEA;;;;;;;;;;AAUG;IACI,UAAU,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAE1C,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YAClD;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;AAE5C,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC;AACV,qBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,qBAAA,KAAK;AACL,qBAAA,SAAS,EAAE;YACpB;AAEA,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC9B;QAEA,OAAO,IAAI,CAAC,QAAS;IACzB;AAEO,IAAA,OAAO,CAAC,IAAY,EAAE,MAAA,GAAmB,IAAI,QAAQ,EAAE,EAAA;AAC1D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAExC,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD;IAEO,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAA;AAChC,QAAA,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;IAC/D;AAEO,IAAA,cAAc,CAAC,MAAkB,EAAA;AACpC,QAAA,QAAQ,MAAM,CAAC,aAAa;AACxB,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE,OAAO,sBAAsB,CAAE,MAAoB,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC;AACpG,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE,OAAO,sBAAsB,CAAC,MAAmB,EAAE,IAAI,CAAC;AACtF,YAAA,KAAK,aAAa,CAAC,OAAO,EAAE,OAAO,sBAAsB,CAAC,IAAI,EAAE,MAAiB,CAAC;AAClF,YAAA,KAAK,aAAa,CAAC,MAAM,EAAE,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAgB,CAAC;AAClF,YAAA,KAAK,aAAa,CAAC,OAAO,EAAE,OAAO,yBAAyB,CAAC,IAAI,EAAE,MAAiB,CAAC;AACrF,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE,OAAO,sBAAsB,CAAC,MAAc,EAAE,IAAI,CAAC;AAC5E,YAAA,KAAK,aAAa,CAAC,KAAK,EAAE,OAAO,uBAAuB,CAAC,MAAgB,EAAE,IAAI,CAAC;AAChF,YAAA,SAAS,OAAO,KAAK;;IAE7B;AAEO,IAAA,YAAY,CAAC,MAAkB,EAAA;AAClC,QAAA,QAAQ,MAAM,CAAC,aAAa;AACxB,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE,OAAO,2BAA2B,CAAC,IAAI,EAAG,MAAoB,CAAC,SAAS,EAAE,CAAC;AACzG,YAAA,KAAK,aAAa,CAAC,SAAS,EAAE,OAAO,2BAA2B,CAAC,IAAI,EAAE,MAAmB,CAAC;AAC3F,YAAA,KAAK,aAAa,CAAC,OAAO,EAAE,OAAO,yBAAyB,CAAC,MAAiB,EAAE,IAAI,EAAE,IAAI,CAAC;AAC3F,YAAA,KAAK,aAAa,CAAC,MAAM,EAAE,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAgB,CAAC;;;;AAIlF,YAAA,SAAS,OAAO,IAAI;;IAE5B;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AAClC,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACrC,CAAC,CAAC,OAAO,EAAE;YACf;AAEA,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAClC;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxB,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC3B,CAAC,CAAC,OAAO,EAAE;YACf;AAEA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACxB;IACJ;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB;AAEzC,YAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;gBAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC;AAE7C,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;oBAC/B,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,EAAE;gBAC7C;YACJ;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AACtD,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO;AACxC,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO;gBAExC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACtE;AAEA,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC/B;QAEA,OAAO,IAAI,CAAC,kBAAmB;IACnC;AAEO,IAAA,WAAW,IAAI,GAAA;AAClB,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACf,YAAA,IAAI,GAAG,IAAI,MAAM,EAAE;QACvB;AAEA,QAAA,OAAO,IAAI;IACf;;;;;"}
|
|
@@ -30,7 +30,7 @@ class Interval {
|
|
|
30
30
|
return this.max < interval.max ? this.max - interval.min : interval.max - this.min;
|
|
31
31
|
}
|
|
32
32
|
destroy() {
|
|
33
|
-
//
|
|
33
|
+
// no-op — pure value class, kept for Destroyable interface conformance
|
|
34
34
|
}
|
|
35
35
|
static zero = new Interval(0, 0);
|
|
36
36
|
static get temp() {
|
|
@@ -2,8 +2,8 @@ import { AbstractVector } from '@/math/AbstractVector';
|
|
|
2
2
|
export declare class ObservableVector extends AbstractVector {
|
|
3
3
|
private _x;
|
|
4
4
|
private _y;
|
|
5
|
-
private
|
|
6
|
-
constructor(callback: () => void, x?: number, y?: number);
|
|
5
|
+
private _callback;
|
|
6
|
+
constructor(callback: (() => void) | null, x?: number, y?: number);
|
|
7
7
|
get x(): number;
|
|
8
8
|
set x(x: number);
|
|
9
9
|
get y(): number;
|
|
@@ -60,13 +60,15 @@ class ObservableVector extends AbstractVector {
|
|
|
60
60
|
return this;
|
|
61
61
|
}
|
|
62
62
|
clone() {
|
|
63
|
-
return new ObservableVector(this._callback, this._x, this._y);
|
|
63
|
+
return new ObservableVector(this._callback ?? (() => { }), this._x, this._y);
|
|
64
64
|
}
|
|
65
65
|
copy(vector) {
|
|
66
66
|
return this.set(vector.x, vector.y);
|
|
67
67
|
}
|
|
68
68
|
destroy() {
|
|
69
|
-
//
|
|
69
|
+
// Clear the callback to prevent leaks if this vector is retained by an
|
|
70
|
+
// external scope after the owning object is destroyed.
|
|
71
|
+
this._callback = null;
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableVector.js","sources":["../../../../src/math/ObservableVector.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEM,MAAO,gBAAiB,SAAQ,cAAc,CAAA;AAExC,IAAA,EAAE;AACF,IAAA,EAAE;
|
|
1
|
+
{"version":3,"file":"ObservableVector.js","sources":["../../../../src/math/ObservableVector.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,9 @@ export declare class Polygon implements ShapeLike {
|
|
|
9
9
|
private readonly _position;
|
|
10
10
|
private readonly _points;
|
|
11
11
|
private readonly _edges;
|
|
12
|
-
|
|
12
|
+
/** Cached normals — null until first getNormals() call; reused across calls. */
|
|
13
|
+
private _cachedNormals;
|
|
14
|
+
private _normalsDirty;
|
|
13
15
|
constructor(points?: Array<Vector>, x?: number, y?: number);
|
|
14
16
|
get position(): Vector;
|
|
15
17
|
set position(position: Vector);
|
|
@@ -20,6 +22,7 @@ export declare class Polygon implements ShapeLike {
|
|
|
20
22
|
get points(): Array<Vector>;
|
|
21
23
|
set points(points: Array<Vector>);
|
|
22
24
|
get edges(): Array<Vector>;
|
|
25
|
+
/** @deprecated Use {@link getNormals} for a stable cached reference. */
|
|
23
26
|
get normals(): Array<Vector>;
|
|
24
27
|
setPosition(x: number, y: number): this;
|
|
25
28
|
setPoints(newPoints: Array<Vector>): this;
|
|
@@ -28,6 +31,17 @@ export declare class Polygon implements ShapeLike {
|
|
|
28
31
|
clone(): this;
|
|
29
32
|
equals({ x, y, points }?: Partial<Polygon>): boolean;
|
|
30
33
|
getBounds(): Rectangle;
|
|
34
|
+
/**
|
|
35
|
+
* Returns the edge normals for this polygon.
|
|
36
|
+
*
|
|
37
|
+
* The returned array is cached and reused across calls — the same array
|
|
38
|
+
* reference is returned on consecutive calls when the polygon has not
|
|
39
|
+
* changed. The cache is invalidated automatically when `setPoints`,
|
|
40
|
+
* `setPosition`, `set`, or `copy` mutate the polygon.
|
|
41
|
+
*
|
|
42
|
+
* This matches the `Circle.getNormals()` and `Sprite.getNormals()`
|
|
43
|
+
* behaviour introduced in 0.6.19.
|
|
44
|
+
*/
|
|
31
45
|
getNormals(): Array<Vector>;
|
|
32
46
|
project(axis: Vector, result?: Interval): Interval;
|
|
33
47
|
contains(x: number, y: number): boolean;
|
package/dist/esm/math/Polygon.js
CHANGED
|
@@ -10,7 +10,9 @@ class Polygon {
|
|
|
10
10
|
_position;
|
|
11
11
|
_points = [];
|
|
12
12
|
_edges = [];
|
|
13
|
-
|
|
13
|
+
/** Cached normals — null until first getNormals() call; reused across calls. */
|
|
14
|
+
_cachedNormals = null;
|
|
15
|
+
_normalsDirty = true;
|
|
14
16
|
constructor(points = [], x = 0, y = 0) {
|
|
15
17
|
this._position = new Vector(x, y);
|
|
16
18
|
this.setPoints(points);
|
|
@@ -20,18 +22,21 @@ class Polygon {
|
|
|
20
22
|
}
|
|
21
23
|
set position(position) {
|
|
22
24
|
this._position.copy(position);
|
|
25
|
+
this._normalsDirty = true;
|
|
23
26
|
}
|
|
24
27
|
get x() {
|
|
25
28
|
return this._position.x;
|
|
26
29
|
}
|
|
27
30
|
set x(x) {
|
|
28
31
|
this._position.x = x;
|
|
32
|
+
this._normalsDirty = true;
|
|
29
33
|
}
|
|
30
34
|
get y() {
|
|
31
35
|
return this._position.y;
|
|
32
36
|
}
|
|
33
37
|
set y(y) {
|
|
34
38
|
this._position.y = y;
|
|
39
|
+
this._normalsDirty = true;
|
|
35
40
|
}
|
|
36
41
|
get points() {
|
|
37
42
|
return this._points;
|
|
@@ -42,11 +47,13 @@ class Polygon {
|
|
|
42
47
|
get edges() {
|
|
43
48
|
return this._edges;
|
|
44
49
|
}
|
|
50
|
+
/** @deprecated Use {@link getNormals} for a stable cached reference. */
|
|
45
51
|
get normals() {
|
|
46
|
-
return this.
|
|
52
|
+
return this.getNormals();
|
|
47
53
|
}
|
|
48
54
|
setPosition(x, y) {
|
|
49
55
|
this._position.set(x, y);
|
|
56
|
+
this._normalsDirty = true;
|
|
50
57
|
return this;
|
|
51
58
|
}
|
|
52
59
|
setPoints(newPoints) {
|
|
@@ -60,31 +67,38 @@ class Polygon {
|
|
|
60
67
|
if (diff > 0) {
|
|
61
68
|
this._points.splice(newLen).forEach(point => point.destroy());
|
|
62
69
|
this._edges.splice(newLen).forEach(point => point.destroy());
|
|
63
|
-
|
|
70
|
+
// Trim the cached normals array if it exists and is longer than newLen.
|
|
71
|
+
if (this._cachedNormals !== null && this._cachedNormals.length > newLen) {
|
|
72
|
+
const removed = this._cachedNormals.splice(newLen);
|
|
73
|
+
for (const v of removed) {
|
|
74
|
+
v.destroy();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
64
77
|
}
|
|
65
78
|
else if (diff < 0) {
|
|
66
79
|
for (let i = len; i < newLen; i++) {
|
|
67
80
|
this._points.push(newPoints[i].clone());
|
|
68
81
|
this._edges.push(newPoints[i].clone());
|
|
69
|
-
this._normals.push(newPoints[i].clone());
|
|
70
82
|
}
|
|
71
83
|
}
|
|
72
84
|
for (let i = 0; i < newLen; i++) {
|
|
73
85
|
const curr = this._points[i];
|
|
74
86
|
const next = this._points[(i + 1) % newLen];
|
|
75
87
|
this._edges[i].set(next.x - curr.x, next.y - curr.y);
|
|
76
|
-
this._normals[i].copy(this._edges[i]).rperp().normalize();
|
|
77
88
|
}
|
|
89
|
+
this._normalsDirty = true;
|
|
78
90
|
return this;
|
|
79
91
|
}
|
|
80
92
|
set(x, y, points) {
|
|
81
93
|
this._position.set(x, y);
|
|
82
94
|
this.setPoints(points);
|
|
95
|
+
this._normalsDirty = true;
|
|
83
96
|
return this;
|
|
84
97
|
}
|
|
85
98
|
copy(polygon) {
|
|
86
99
|
this._position.copy(polygon.position);
|
|
87
100
|
this.setPoints(polygon.points);
|
|
101
|
+
this._normalsDirty = true;
|
|
88
102
|
return this;
|
|
89
103
|
}
|
|
90
104
|
clone() {
|
|
@@ -109,8 +123,36 @@ class Polygon {
|
|
|
109
123
|
}
|
|
110
124
|
return new Rectangle(this.x + minX, this.y + minY, maxX - minX, maxY - minY);
|
|
111
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Returns the edge normals for this polygon.
|
|
128
|
+
*
|
|
129
|
+
* The returned array is cached and reused across calls — the same array
|
|
130
|
+
* reference is returned on consecutive calls when the polygon has not
|
|
131
|
+
* changed. The cache is invalidated automatically when `setPoints`,
|
|
132
|
+
* `setPosition`, `set`, or `copy` mutate the polygon.
|
|
133
|
+
*
|
|
134
|
+
* This matches the `Circle.getNormals()` and `Sprite.getNormals()`
|
|
135
|
+
* behaviour introduced in 0.6.19.
|
|
136
|
+
*/
|
|
112
137
|
getNormals() {
|
|
113
|
-
|
|
138
|
+
if (this._normalsDirty) {
|
|
139
|
+
const n = this._points.length;
|
|
140
|
+
if (this._cachedNormals === null) {
|
|
141
|
+
this._cachedNormals = [];
|
|
142
|
+
}
|
|
143
|
+
// Grow the cache if needed (shrinking is handled in setPoints).
|
|
144
|
+
while (this._cachedNormals.length < n) {
|
|
145
|
+
this._cachedNormals.push(new Vector());
|
|
146
|
+
}
|
|
147
|
+
for (let i = 0; i < n; i++) {
|
|
148
|
+
this._cachedNormals[i]
|
|
149
|
+
.copy(this._edges[i])
|
|
150
|
+
.rperp()
|
|
151
|
+
.normalize();
|
|
152
|
+
}
|
|
153
|
+
this._normalsDirty = false;
|
|
154
|
+
}
|
|
155
|
+
return this._cachedNormals;
|
|
114
156
|
}
|
|
115
157
|
project(axis, result = new Interval()) {
|
|
116
158
|
const normal = axis.clone().normalize();
|
|
@@ -148,8 +190,18 @@ class Polygon {
|
|
|
148
190
|
for (const point of this._points) {
|
|
149
191
|
point.destroy();
|
|
150
192
|
}
|
|
193
|
+
for (const edge of this._edges) {
|
|
194
|
+
edge.destroy();
|
|
195
|
+
}
|
|
196
|
+
if (this._cachedNormals !== null) {
|
|
197
|
+
for (const v of this._cachedNormals) {
|
|
198
|
+
v.destroy();
|
|
199
|
+
}
|
|
200
|
+
this._cachedNormals = null;
|
|
201
|
+
}
|
|
151
202
|
this._position.destroy();
|
|
152
203
|
this._points.length = 0;
|
|
204
|
+
this._edges.length = 0;
|
|
153
205
|
}
|
|
154
206
|
static get temp() {
|
|
155
207
|
if (temp === null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polygon.js","sources":["../../../../src/math/Polygon.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAuBA,IAAI,IAAI,GAAmB,IAAI;MAElB,OAAO,CAAA;AAEA,IAAA,aAAa,GAAkB,aAAa,CAAC,OAAO;AAEnD,IAAA,SAAS;IACT,OAAO,GAAkB,EAAE;IAC3B,MAAM,GAAkB,EAAE;
|
|
1
|
+
{"version":3,"file":"Polygon.js","sources":["../../../../src/math/Polygon.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Rectangle } from './Rectangle';
|
|
2
|
+
export interface QuadtreeItem<T> {
|
|
3
|
+
bounds: Rectangle;
|
|
4
|
+
payload: T;
|
|
5
|
+
}
|
|
6
|
+
export declare class Quadtree<T> {
|
|
7
|
+
private readonly _bounds;
|
|
8
|
+
private readonly _maxItems;
|
|
9
|
+
private readonly _maxDepth;
|
|
10
|
+
private readonly _depth;
|
|
11
|
+
private _items;
|
|
12
|
+
private _children;
|
|
13
|
+
constructor(bounds: Rectangle, maxItems?: number, maxDepth?: number, depth?: number);
|
|
14
|
+
insert(item: QuadtreeItem<T>): void;
|
|
15
|
+
/**
|
|
16
|
+
* Returns all items whose bounds contain the point `(x, y)`.
|
|
17
|
+
*
|
|
18
|
+
* The optional `results` parameter allows callers to provide a
|
|
19
|
+
* pre-allocated array that will be reused across calls. The array is
|
|
20
|
+
* **appended to** (not replaced), so callers should reset it (e.g.
|
|
21
|
+
* `buf.length = 0`) before passing it in when a fresh result set is
|
|
22
|
+
* needed. The same array reference is returned.
|
|
23
|
+
*
|
|
24
|
+
* Omitting `results` allocates a new array on every call. For
|
|
25
|
+
* hot paths (e.g. per-frame hit-testing) prefer passing a persistent
|
|
26
|
+
* buffer to avoid allocation pressure.
|
|
27
|
+
*/
|
|
28
|
+
queryPoint(x: number, y: number, results?: Array<QuadtreeItem<T>>): Array<QuadtreeItem<T>>;
|
|
29
|
+
queryRect(rect: Rectangle, results?: Array<QuadtreeItem<T>>): Array<QuadtreeItem<T>>;
|
|
30
|
+
/**
|
|
31
|
+
* Remove the first occurrence of `item` from this subtree by object
|
|
32
|
+
* identity. Returns `true` if the item was found and removed, `false`
|
|
33
|
+
* otherwise. This is an O(n) walk of every node in the affected
|
|
34
|
+
* subtree; prefer `clear()` for bulk removal.
|
|
35
|
+
*/
|
|
36
|
+
remove(item: QuadtreeItem<T>): boolean;
|
|
37
|
+
clear(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Walk every subdivided region's bounding rectangle, calling `callback`
|
|
40
|
+
* once per node in the tree (including the root). Used by debug layers
|
|
41
|
+
* to visualise quadtree partitioning. Prefixed with underscore to signal
|
|
42
|
+
* "internal-but-public" (debug use only).
|
|
43
|
+
*/
|
|
44
|
+
_walkBounds(callback: (rect: Rectangle) => void): void;
|
|
45
|
+
destroy(): void;
|
|
46
|
+
private _subdivide;
|
|
47
|
+
}
|