@codexo/exojs 0.6.11 → 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.
Files changed (189) hide show
  1. package/CHANGELOG.md +1356 -0
  2. package/dist/esm/audio/AbstractMedia.d.ts +18 -0
  3. package/dist/esm/audio/AbstractMedia.js +66 -0
  4. package/dist/esm/audio/AbstractMedia.js.map +1 -1
  5. package/dist/esm/audio/AudioAnalyser.d.ts +62 -23
  6. package/dist/esm/audio/AudioAnalyser.js +261 -57
  7. package/dist/esm/audio/AudioAnalyser.js.map +1 -1
  8. package/dist/esm/audio/AudioBus.d.ts +45 -0
  9. package/dist/esm/audio/AudioBus.js +219 -0
  10. package/dist/esm/audio/AudioBus.js.map +1 -0
  11. package/dist/esm/audio/AudioFilter.d.ts +9 -0
  12. package/dist/esm/audio/AudioFilter.js +7 -0
  13. package/dist/esm/audio/AudioFilter.js.map +1 -0
  14. package/dist/esm/audio/AudioListener.d.ts +20 -0
  15. package/dist/esm/audio/AudioListener.js +86 -0
  16. package/dist/esm/audio/AudioListener.js.map +1 -0
  17. package/dist/esm/audio/AudioManager.d.ts +31 -0
  18. package/dist/esm/audio/AudioManager.js +102 -0
  19. package/dist/esm/audio/AudioManager.js.map +1 -0
  20. package/dist/esm/audio/BeatDetector.d.ts +121 -0
  21. package/dist/esm/audio/BeatDetector.js +936 -0
  22. package/dist/esm/audio/BeatDetector.js.map +1 -0
  23. package/dist/esm/audio/Envelope.d.ts +44 -0
  24. package/dist/esm/audio/Envelope.js +60 -0
  25. package/dist/esm/audio/Envelope.js.map +1 -0
  26. package/dist/esm/audio/Music.d.ts +8 -0
  27. package/dist/esm/audio/Music.js +33 -4
  28. package/dist/esm/audio/Music.js.map +1 -1
  29. package/dist/esm/audio/OscillatorSound.d.ts +98 -0
  30. package/dist/esm/audio/OscillatorSound.js +342 -0
  31. package/dist/esm/audio/OscillatorSound.js.map +1 -0
  32. package/dist/esm/audio/Sound.d.ts +94 -9
  33. package/dist/esm/audio/Sound.js +283 -117
  34. package/dist/esm/audio/Sound.js.map +1 -1
  35. package/dist/esm/audio/crossFade.d.ts +19 -0
  36. package/dist/esm/audio/crossFade.js +26 -0
  37. package/dist/esm/audio/crossFade.js.map +1 -0
  38. package/dist/esm/audio/dsp/fft.d.ts +22 -0
  39. package/dist/esm/audio/dsp/mel.d.ts +43 -0
  40. package/dist/esm/audio/dsp/tempogram.d.ts +51 -0
  41. package/dist/esm/audio/filters/ChorusFilter.d.ts +47 -0
  42. package/dist/esm/audio/filters/ChorusFilter.js +139 -0
  43. package/dist/esm/audio/filters/ChorusFilter.js.map +1 -0
  44. package/dist/esm/audio/filters/CompressorFilter.d.ts +31 -0
  45. package/dist/esm/audio/filters/CompressorFilter.js +97 -0
  46. package/dist/esm/audio/filters/CompressorFilter.js.map +1 -0
  47. package/dist/esm/audio/filters/DelayFilter.d.ts +23 -0
  48. package/dist/esm/audio/filters/DelayFilter.js +100 -0
  49. package/dist/esm/audio/filters/DelayFilter.js.map +1 -0
  50. package/dist/esm/audio/filters/DuckingFilter.d.ts +31 -0
  51. package/dist/esm/audio/filters/DuckingFilter.js +152 -0
  52. package/dist/esm/audio/filters/DuckingFilter.js.map +1 -0
  53. package/dist/esm/audio/filters/EqualizerFilter.d.ts +29 -0
  54. package/dist/esm/audio/filters/EqualizerFilter.js +94 -0
  55. package/dist/esm/audio/filters/EqualizerFilter.js.map +1 -0
  56. package/dist/esm/audio/filters/GranularFilter.d.ts +56 -0
  57. package/dist/esm/audio/filters/GranularFilter.js +170 -0
  58. package/dist/esm/audio/filters/GranularFilter.js.map +1 -0
  59. package/dist/esm/audio/filters/HighpassFilter.d.ts +19 -0
  60. package/dist/esm/audio/filters/HighpassFilter.js +62 -0
  61. package/dist/esm/audio/filters/HighpassFilter.js.map +1 -0
  62. package/dist/esm/audio/filters/LowpassFilter.d.ts +19 -0
  63. package/dist/esm/audio/filters/LowpassFilter.js +62 -0
  64. package/dist/esm/audio/filters/LowpassFilter.js.map +1 -0
  65. package/dist/esm/audio/filters/PitchShiftFilter.d.ts +42 -0
  66. package/dist/esm/audio/filters/PitchShiftFilter.js +130 -0
  67. package/dist/esm/audio/filters/PitchShiftFilter.js.map +1 -0
  68. package/dist/esm/audio/filters/ReverbFilter.d.ts +24 -0
  69. package/dist/esm/audio/filters/ReverbFilter.js +107 -0
  70. package/dist/esm/audio/filters/ReverbFilter.js.map +1 -0
  71. package/dist/esm/audio/filters/VocoderFilter.d.ts +38 -0
  72. package/dist/esm/audio/filters/VocoderFilter.js +163 -0
  73. package/dist/esm/audio/filters/VocoderFilter.js.map +1 -0
  74. package/dist/esm/audio/filters/WorkletFilter.d.ts +46 -0
  75. package/dist/esm/audio/filters/WorkletFilter.js +101 -0
  76. package/dist/esm/audio/filters/WorkletFilter.js.map +1 -0
  77. package/dist/esm/audio/filters/index.d.ts +12 -0
  78. package/dist/esm/audio/index.d.ts +15 -1
  79. package/dist/esm/audio/worklet/registerWorklet.d.ts +10 -0
  80. package/dist/esm/audio/worklet/registerWorklet.js +44 -0
  81. package/dist/esm/audio/worklet/registerWorklet.js.map +1 -0
  82. package/dist/esm/core/Application.d.ts +19 -0
  83. package/dist/esm/core/Application.js +76 -2
  84. package/dist/esm/core/Application.js.map +1 -1
  85. package/dist/esm/core/SceneNode.d.ts +9 -1
  86. package/dist/esm/core/SceneNode.js +44 -6
  87. package/dist/esm/core/SceneNode.js.map +1 -1
  88. package/dist/esm/core/Time.js +1 -1
  89. package/dist/esm/core/index.d.ts +0 -1
  90. package/dist/esm/debug/BoundingBoxesLayer.d.ts +18 -0
  91. package/dist/esm/debug/BoundingBoxesLayer.js +128 -0
  92. package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -0
  93. package/dist/esm/debug/DebugLayer.d.ts +29 -0
  94. package/dist/esm/debug/DebugLayer.js +26 -0
  95. package/dist/esm/debug/DebugLayer.js.map +1 -0
  96. package/dist/esm/debug/DebugOverlay.d.ts +48 -0
  97. package/dist/esm/debug/DebugOverlay.js +117 -0
  98. package/dist/esm/debug/DebugOverlay.js.map +1 -0
  99. package/dist/esm/debug/HitTestLayer.d.ts +23 -0
  100. package/dist/esm/debug/HitTestLayer.js +109 -0
  101. package/dist/esm/debug/HitTestLayer.js.map +1 -0
  102. package/dist/esm/debug/PerformanceLayer.d.ts +21 -0
  103. package/dist/esm/debug/PerformanceLayer.js +175 -0
  104. package/dist/esm/debug/PerformanceLayer.js.map +1 -0
  105. package/dist/esm/debug/PointerStackLayer.d.ts +23 -0
  106. package/dist/esm/debug/PointerStackLayer.js +152 -0
  107. package/dist/esm/debug/PointerStackLayer.js.map +1 -0
  108. package/dist/esm/debug/index.d.ts +6 -0
  109. package/dist/esm/debug/index.js +7 -0
  110. package/dist/esm/debug/index.js.map +1 -0
  111. package/dist/esm/index.js +29 -2
  112. package/dist/esm/index.js.map +1 -1
  113. package/dist/esm/input/InputManager.d.ts +10 -0
  114. package/dist/esm/input/InputManager.js +35 -5
  115. package/dist/esm/input/InputManager.js.map +1 -1
  116. package/dist/esm/input/InteractionEvent.d.ts +18 -0
  117. package/dist/esm/input/InteractionEvent.js +29 -0
  118. package/dist/esm/input/InteractionEvent.js.map +1 -0
  119. package/dist/esm/input/InteractionManager.d.ts +134 -0
  120. package/dist/esm/input/InteractionManager.js +546 -0
  121. package/dist/esm/input/InteractionManager.js.map +1 -0
  122. package/dist/esm/input/index.d.ts +2 -0
  123. package/dist/esm/input/interaction-hooks.d.ts +34 -0
  124. package/dist/esm/input/interaction-hooks.js +35 -0
  125. package/dist/esm/input/interaction-hooks.js.map +1 -0
  126. package/dist/esm/math/Circle.d.ts +12 -2
  127. package/dist/esm/math/Circle.js +82 -14
  128. package/dist/esm/math/Circle.js.map +1 -1
  129. package/dist/esm/math/Interval.js +1 -1
  130. package/dist/esm/math/ObservableVector.d.ts +2 -2
  131. package/dist/esm/math/ObservableVector.js +4 -2
  132. package/dist/esm/math/ObservableVector.js.map +1 -1
  133. package/dist/esm/math/Polygon.d.ts +15 -1
  134. package/dist/esm/math/Polygon.js +58 -6
  135. package/dist/esm/math/Polygon.js.map +1 -1
  136. package/dist/esm/math/Quadtree.d.ts +47 -0
  137. package/dist/esm/math/Quadtree.js +168 -0
  138. package/dist/esm/math/Quadtree.js.map +1 -0
  139. package/dist/esm/math/Random.js +1 -1
  140. package/dist/esm/math/Size.js +1 -1
  141. package/dist/esm/math/Vector.js +1 -1
  142. package/dist/esm/math/collision-detection.js +4 -1
  143. package/dist/esm/math/collision-detection.js.map +1 -1
  144. package/dist/esm/math/index.d.ts +2 -0
  145. package/dist/esm/math/swept-collision.d.ts +90 -0
  146. package/dist/esm/math/swept-collision.js +255 -0
  147. package/dist/esm/math/swept-collision.js.map +1 -0
  148. package/dist/esm/particles/ParticleSystem.js +1 -0
  149. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  150. package/dist/esm/particles/affectors/TorqueAffector.js +1 -1
  151. package/dist/esm/rendering/Container.d.ts +1 -0
  152. package/dist/esm/rendering/Container.js +19 -0
  153. package/dist/esm/rendering/Container.js.map +1 -1
  154. package/dist/esm/rendering/RenderNode.d.ts +27 -0
  155. package/dist/esm/rendering/RenderNode.js +44 -0
  156. package/dist/esm/rendering/RenderNode.js.map +1 -1
  157. package/dist/esm/rendering/View.d.ts +6 -4
  158. package/dist/esm/rendering/View.js +12 -2
  159. package/dist/esm/rendering/View.js.map +1 -1
  160. package/dist/esm/rendering/filters/WebGl2ShaderFilter.d.ts +109 -0
  161. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js +268 -0
  162. package/dist/esm/rendering/filters/WebGl2ShaderFilter.js.map +1 -0
  163. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts +111 -0
  164. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +397 -0
  165. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -0
  166. package/dist/esm/rendering/index.d.ts +3 -0
  167. package/dist/esm/rendering/mesh/Mesh.js +1 -0
  168. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  169. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.d.ts +34 -0
  170. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js +60 -0
  171. package/dist/esm/rendering/shader/upgradeFragmentShaderToGl300.js.map +1 -0
  172. package/dist/esm/rendering/sprite/Sprite.d.ts +6 -1
  173. package/dist/esm/rendering/sprite/Sprite.js +41 -19
  174. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  175. package/dist/esm/rendering/video/Video.d.ts +4 -0
  176. package/dist/esm/rendering/video/Video.js +32 -4
  177. package/dist/esm/rendering/video/Video.js.map +1 -1
  178. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +4 -4
  179. package/dist/esm/rendering/webgl2/WebGl2Backend.js +7 -16
  180. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  181. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +10 -8
  182. package/dist/esm/rendering/webgpu/WebGpuBackend.js +30 -40
  183. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  184. package/dist/exo.esm.js +8021 -2459
  185. package/dist/exo.esm.js.map +1 -1
  186. package/package.json +14 -2
  187. package/dist/esm/core/Quadtree.d.ts +0 -20
  188. package/dist/esm/core/Quadtree.js +0 -86
  189. package/dist/esm/core/Quadtree.js.map +0 -1
@@ -0,0 +1,168 @@
1
+ import { Rectangle } from './Rectangle.js';
2
+
3
+ class Quadtree {
4
+ _bounds;
5
+ _maxItems;
6
+ _maxDepth;
7
+ _depth;
8
+ _items;
9
+ _children;
10
+ constructor(bounds, maxItems = 8, maxDepth = 5, depth = 0) {
11
+ this._bounds = bounds;
12
+ this._maxItems = maxItems;
13
+ this._maxDepth = maxDepth;
14
+ this._depth = depth;
15
+ this._items = [];
16
+ this._children = null;
17
+ }
18
+ insert(item) {
19
+ // If not subdivided and under capacity, store here.
20
+ if (this._children === null && this._items.length < this._maxItems) {
21
+ this._items.push(item);
22
+ return;
23
+ }
24
+ // Subdivide if we haven't yet and depth allows.
25
+ if (this._children === null && this._depth < this._maxDepth) {
26
+ this._subdivide();
27
+ }
28
+ // Try to push into a single child whose bounds fully contain the item.
29
+ if (this._children !== null) {
30
+ for (const child of this._children) {
31
+ if (child._bounds.containsRect(item.bounds)) {
32
+ child.insert(item);
33
+ return;
34
+ }
35
+ }
36
+ }
37
+ // No single child fully contains it — keep at this node.
38
+ this._items.push(item);
39
+ }
40
+ /**
41
+ * Returns all items whose bounds contain the point `(x, y)`.
42
+ *
43
+ * The optional `results` parameter allows callers to provide a
44
+ * pre-allocated array that will be reused across calls. The array is
45
+ * **appended to** (not replaced), so callers should reset it (e.g.
46
+ * `buf.length = 0`) before passing it in when a fresh result set is
47
+ * needed. The same array reference is returned.
48
+ *
49
+ * Omitting `results` allocates a new array on every call. For
50
+ * hot paths (e.g. per-frame hit-testing) prefer passing a persistent
51
+ * buffer to avoid allocation pressure.
52
+ */
53
+ queryPoint(x, y, results = []) {
54
+ if (!this._bounds.contains(x, y)) {
55
+ return results;
56
+ }
57
+ for (const item of this._items) {
58
+ if (item.bounds.contains(x, y)) {
59
+ results.push(item);
60
+ }
61
+ }
62
+ if (this._children !== null) {
63
+ for (const child of this._children) {
64
+ child.queryPoint(x, y, results);
65
+ }
66
+ }
67
+ return results;
68
+ }
69
+ queryRect(rect, results = []) {
70
+ // Check intersection using left/right/top/bottom comparisons to avoid
71
+ // needing a full Rectangle.intersectsWith() call with collision dispatch.
72
+ if (rect.right < this._bounds.left
73
+ || rect.left > this._bounds.right
74
+ || rect.bottom < this._bounds.top
75
+ || rect.top > this._bounds.bottom) {
76
+ return results;
77
+ }
78
+ for (const item of this._items) {
79
+ if (!(item.bounds.right < rect.left
80
+ || item.bounds.left > rect.right
81
+ || item.bounds.bottom < rect.top
82
+ || item.bounds.top > rect.bottom)) {
83
+ results.push(item);
84
+ }
85
+ }
86
+ if (this._children !== null) {
87
+ for (const child of this._children) {
88
+ child.queryRect(rect, results);
89
+ }
90
+ }
91
+ return results;
92
+ }
93
+ /**
94
+ * Remove the first occurrence of `item` from this subtree by object
95
+ * identity. Returns `true` if the item was found and removed, `false`
96
+ * otherwise. This is an O(n) walk of every node in the affected
97
+ * subtree; prefer `clear()` for bulk removal.
98
+ */
99
+ remove(item) {
100
+ const index = this._items.indexOf(item);
101
+ if (index !== -1) {
102
+ this._items.splice(index, 1);
103
+ return true;
104
+ }
105
+ if (this._children !== null) {
106
+ for (const child of this._children) {
107
+ if (child.remove(item)) {
108
+ return true;
109
+ }
110
+ }
111
+ }
112
+ return false;
113
+ }
114
+ clear() {
115
+ this._items.length = 0;
116
+ if (this._children !== null) {
117
+ for (const child of this._children) {
118
+ child.clear();
119
+ }
120
+ this._children = null;
121
+ }
122
+ }
123
+ /**
124
+ * Walk every subdivided region's bounding rectangle, calling `callback`
125
+ * once per node in the tree (including the root). Used by debug layers
126
+ * to visualise quadtree partitioning. Prefixed with underscore to signal
127
+ * "internal-but-public" (debug use only).
128
+ */
129
+ _walkBounds(callback) {
130
+ callback(this._bounds);
131
+ if (this._children !== null) {
132
+ for (const child of this._children) {
133
+ child._walkBounds(callback);
134
+ }
135
+ }
136
+ }
137
+ destroy() {
138
+ this._items.length = 0;
139
+ this._bounds.destroy();
140
+ if (this._children !== null) {
141
+ for (const child of this._children) {
142
+ child.destroy();
143
+ }
144
+ this._children = null;
145
+ }
146
+ }
147
+ _subdivide() {
148
+ const { x, y, width, height } = this._bounds;
149
+ const halfW = width / 2;
150
+ const halfH = height / 2;
151
+ const depth = this._depth + 1;
152
+ const maxItems = this._maxItems;
153
+ const maxDepth = this._maxDepth;
154
+ this._children = [
155
+ // NW
156
+ new Quadtree(new Rectangle(x, y, halfW, halfH), maxItems, maxDepth, depth),
157
+ // NE
158
+ new Quadtree(new Rectangle(x + halfW, y, halfW, halfH), maxItems, maxDepth, depth),
159
+ // SW
160
+ new Quadtree(new Rectangle(x, y + halfH, halfW, halfH), maxItems, maxDepth, depth),
161
+ // SE
162
+ new Quadtree(new Rectangle(x + halfW, y + halfH, halfW, halfH), maxItems, maxDepth, depth),
163
+ ];
164
+ }
165
+ }
166
+
167
+ export { Quadtree };
168
+ //# sourceMappingURL=Quadtree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Quadtree.js","sources":["../../../../src/math/Quadtree.ts"],"sourcesContent":[null],"names":[],"mappings":";;MAOa,QAAQ,CAAA;AACA,IAAA,OAAO;AACP,IAAA,SAAS;AACT,IAAA,SAAS;AACT,IAAA,MAAM;AACf,IAAA,MAAM;AACN,IAAA,SAAS;IAEjB,WAAA,CAAmB,MAAiB,EAAE,QAAA,GAAmB,CAAC,EAAE,QAAA,GAAmB,CAAC,EAAE,KAAA,GAAgB,CAAC,EAAA;AAC/F,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACzB;AAEO,IAAA,MAAM,CAAC,IAAqB,EAAA;;AAE/B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAChE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YACzD,IAAI,CAAC,UAAU,EAAE;QACrB;;AAGA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACzC,oBAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;oBAClB;gBACJ;YACJ;QACJ;;AAGA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B;AAEA;;;;;;;;;;;;AAYG;AACI,IAAA,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,UAAkC,EAAE,EAAA;AACxE,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAC9B,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAC5B,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;YACnC;QACJ;AAEA,QAAA,OAAO,OAAO;IAClB;AAEO,IAAA,SAAS,CAAC,IAAe,EAAE,OAAA,GAAkC,EAAE,EAAA;;;QAGlE,IACI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AACvB,eAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AACzB,eAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;eAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EACnC;AACE,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5B,IACI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACxB,mBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AACxB,mBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;mBAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EACnC;AACE,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAA,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAClC;QACJ;AAEA,QAAA,OAAO,OAAO;IAClB;AAEA;;;;;AAKG;AACI,IAAA,MAAM,CAAC,IAAqB,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAEvC,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAE5B,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACpB,oBAAA,OAAO,IAAI;gBACf;YACJ;QACJ;AAEA,QAAA,OAAO,KAAK;IAChB;IAEO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAEtB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChC,KAAK,CAAC,KAAK,EAAE;YACjB;AAEA,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACzB;IACJ;AAEA;;;;;AAKG;AACI,IAAA,WAAW,CAAC,QAAmC,EAAA;AAClD,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAEtB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC/B;QACJ;IACJ;IAEO,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAEtB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChC,KAAK,CAAC,OAAO,EAAE;YACnB;AAEA,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACzB;IACJ;IAEQ,UAAU,GAAA;AACd,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO;AAC5C,QAAA,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC;AACvB,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS;QAE/B,IAAI,CAAC,SAAS,GAAG;;AAEb,YAAA,IAAI,QAAQ,CAAI,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;;YAE7E,IAAI,QAAQ,CAAI,IAAI,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;;YAErF,IAAI,QAAQ,CAAI,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;;YAErF,IAAI,QAAQ,CAAI,IAAI,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;SAChG;IACL;AACH;;;;"}
@@ -45,7 +45,7 @@ class Random {
45
45
  return this._value;
46
46
  }
47
47
  destroy() {
48
- // todo - check if destroy is needed
48
+ // no-op pure value class, kept for Destroyable interface conformance
49
49
  }
50
50
  _twist() {
51
51
  const state = this._state;
@@ -56,7 +56,7 @@ class Size {
56
56
  && (height === undefined || this.height === height);
57
57
  }
58
58
  destroy() {
59
- // todo - check if destroy is needed
59
+ // no-op pure value class, kept for Destroyable interface conformance
60
60
  }
61
61
  static zero = new Size(0, 0);
62
62
  static get temp() {
@@ -52,7 +52,7 @@ class Vector extends AbstractVector {
52
52
  return interval;
53
53
  }
54
54
  destroy() {
55
- // todo - check if destroy is needed
55
+ // no-op pure value class, kept for Destroyable interface conformance
56
56
  }
57
57
  static get temp() {
58
58
  if (temp === null) {
@@ -173,12 +173,15 @@ const getCollisionRectangleRectangle = (rectA, rectB) => {
173
173
  if ((rectA.left > rectB.right) || (rectA.top > rectB.bottom)) {
174
174
  return null;
175
175
  }
176
+ const overlapX = Math.min(rectA.right, rectB.right) - Math.max(rectA.left, rectB.left);
177
+ const overlapY = Math.min(rectA.bottom, rectB.bottom) - Math.max(rectA.top, rectB.top);
178
+ const overlap = Math.min(overlapX, overlapY);
176
179
  const zeroNormal = rectA.position.clone().set(0, 0);
177
180
  const zeroVector = rectA.position.clone().set(0, 0);
178
181
  return {
179
182
  shapeA: rectA,
180
183
  shapeB: rectB,
181
- overlap: 0, // todo
184
+ overlap,
182
185
  shapeAinB: rectB.containsRect(rectA),
183
186
  shapeBinA: rectA.containsRect(rectB),
184
187
  projectionN: zeroNormal,
@@ -1 +1 @@
1
- {"version":3,"file":"collision-detection.js","sources":["../../../../src/math/collision-detection.ts"],"sourcesContent":[null],"names":["intersectionPrimitivePointPoint","intersectionPrimitivePointRect","intersectionPrimitivePointCircle","intersectionPrimitivePointEllipse","intersectionPrimitivePointPoly","intersectionPrimitiveRectRect","getVoronoiRegionForPoint"],"mappings":"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"}
1
+ {"version":3,"file":"collision-detection.js","sources":["../../../../src/math/collision-detection.ts"],"sourcesContent":[null],"names":["intersectionPrimitivePointPoint","intersectionPrimitivePointRect","intersectionPrimitivePointCircle","intersectionPrimitivePointEllipse","intersectionPrimitivePointPoly","intersectionPrimitiveRectRect","getVoronoiRegionForPoint"],"mappings":";;;;AA2BA;;AAEG;AAEH,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAE,MAAkB,KAAa;AACxE,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE;AACpC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE;AACpC,IAAA,MAAM,WAAW,GAAG,IAAI,QAAQ,EAAE;AAClC,IAAA,MAAM,WAAW,GAAG,IAAI,QAAQ,EAAE;AAElC,IAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AAC3B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AACnC,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;QAEnC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACpC,YAAA,OAAO,KAAK;QAChB;IACJ;AAEA,IAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AAC3B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;AACnC,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;QAEnC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACpC,YAAA,OAAO,KAAK;QAChB;IACJ;AAEA,IAAA,OAAO,IAAI;AACf;AAEA,MAAM,sBAAsB,GAAG,CAAC,MAAiB,EAAE,MAAiB,EAAE,SAAS,GAAG,CAAC,MAC/EA,wBAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;AAG9D,MAAM,qBAAqB,GAAG,CAAC,KAAgB,EAAE,IAAU,EAAE,SAAS,GAAG,GAAG,MACxE,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;AAGtF,MAAM,qBAAqB,GAAG,CAAC,KAAgB,EAAE,SAAoB,MACjEC,uBAA8B,CAAC,KAAK,EAAE,SAAS,CAAC;AAGpD,MAAM,uBAAuB,GAAG,CAAC,KAAgB,EAAE,MAAc,MAC7DC,yBAAgC,CAAC,KAAK,EAAE,MAAM,CAAC;AAGnD,MAAM,wBAAwB,GAAG,CAAC,KAAgB,EAAE,OAAgB,MAChEC,0BAAiC,CAAC,KAAK,EAAE,OAAO,CAAC;AAGrD,MAAM,qBAAqB,GAAG,CAAC,KAAgB,EAAE,OAAgB,MAC7DC,uBAA8B,CAAC,KAAK,EAAE,OAAO,CAAC;AAGlD,MAAM,oBAAoB,GAAG,CAAC,KAAW,EAAE,KAAW,MAClD,4BAA4B,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC;AAG5G,MAAM,oBAAoB,GAAG,CAAC,IAAU,EAAE,SAAoB,KAAa;IACvE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS;AACzC,IAAA,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;IACxB,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;IACpC,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE;AACvC,IAAA,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE;AAEnD,IAAA,OAAO,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU;AACpF,WAAA,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW;AACtF,WAAA,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ;AAClF,WAAA,4BAA4B,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC;AACpG;AAEA,MAAM,sBAAsB,GAAG,CAAC,IAAU,EAAE,MAAc,KAAa;AACnE,IAAA,IAAI,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;AACxG,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI;AACvD,IAAA,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM;AAEvC,IAAA,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAEvC,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE;AACX,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC;AAC7E,IAAA,MAAM,QAAQ,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACvC,IAAA,MAAM,QAAQ,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAEvC,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;AACjG,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,OAAO,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM;AAC5D;AAEA,MAAM,uBAAuB,GAAG,CAAC,IAAU,EAAE,OAAgB,KAAa;AACtE,IAAA,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO;IAElD,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AACpB,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,EAAE;IACtC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,EAAE;IACtC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,IAAI,EAAE;IACpC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,IAAI,EAAE;AACpC,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AAClB,IAAA,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC/B,IAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACrC,IAAA,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;AAEnC,IAAA,IAAI,CAAC,IAAI,CAAC,EAAE;AACR,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;AACrB,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE1C,IAAA,IAAI,YAAY,GAAG,CAAC,EAAE;AAClB,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAChD,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC;AAE5C,IAAA,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACvD;AAEA,MAAM,oBAAoB,GAAG,CAAC,IAAU,EAAE,OAAgB,KAAa;AACnE,IAAA,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;AAClD,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM;AAEzB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;AACtB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAElC,IAAI,4BAA4B,CAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,UAAU,EACf,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,EAC5C,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAC/C,EAAE;AACC,YAAA,OAAO,IAAI;QACf;IACJ;AAEA,IAAA,OAAO,KAAK;AAChB;AAEA,MAAM,oBAAoB,GAAG,CAAC,KAAgB,EAAE,KAAgB,MAC5DC,sBAA6B,CAAC,KAAK,EAAE,KAAK,CAAC;AAG/C,MAAM,sBAAsB,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAa,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAU,KAAa;AACrH,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;AACvC,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;AAExC,IAAA,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM;AACtD;AAEA,MAAM,uBAAuB,GAAG,CAAC,SAAoB,EAAE,OAAgB,MACnE,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAGnF,MAAM,oBAAoB,GAAG,CAAC,SAAoB,EAAE,OAAgB,KAAc,eAAe,CAAC,SAAS,EAAE,OAAO;AAEpH,MAAM,wBAAwB,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAU,MACxG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAG5C,MAAM,yBAAyB,GAAG,CAAC,MAAc,EAAE,OAAgB,MAC/D,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAG7E,MAAM,wBAAwB,GAAG,CAC7B,OAAe,EACf,OAAe,EACf,SAAoB,EACpB,QAAmB,EACnB,MAAc,EACd,MAAc,EACd,MAAc,EACd,KAAa,EACb,KAAa,KACJ;AACT,IAAA,IAAIC,gBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC,IAAI,EAAE;AAC/E,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,MAAM,GAAGA,gBAAwB,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;AAE7G,IAAA,OAAO,MAAM,KAAK,aAAa,CAAC,KAAK,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;AACrF,CAAC;AAED,MAAM,yBAAyB,GAAG,CAC9B,OAAe,EACf,OAAe,EACf,SAAoB,EACpB,QAAmB,EACnB,MAAc,EACd,MAAc,EACd,MAAc,EACd,KAAa,EACb,KAAa,KACJ;AACT,IAAA,IAAIA,gBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC,KAAK,EAAE;AAChF,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,MAAM,GAAGA,gBAAwB,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;AAE7G,IAAA,OAAO,MAAM,KAAK,aAAa,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;AACpF,CAAC;AAED,MAAM,0BAA0B,GAAG,CAC/B,MAAc,EACd,MAAc,EACd,MAAc,EACd,KAAa,EACb,KAAa,KACJ;IACT,MAAM,OAAO,GAAG,KAAK;AACrB,IAAA,MAAM,OAAO,GAAG,CAAC,KAAK;IACtB,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;AAEtD,IAAA,IAAI,YAAY,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,GAAG,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,IAAI,YAAY;AAEzE,IAAA,OAAO,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM;AACtD,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAU,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAW,KAAa;AACnH,IAAA,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE;AACvB,IAAA,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE;AACvB,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM;AAEzB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;AAChC,QAAA,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;AAC1B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AAErB,QAAA,IAAI,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AAC/G,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,IAAI,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AAChH,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,IAAI,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AACpE,YAAA,OAAO,KAAK;QAChB;IACJ;AAEA,IAAA,OAAO,IAAI;AACf;AAEA,MAAM,0BAA0B,GAAG,CAAC,QAAiB,EAAE,QAAiB,MACpE,iBAAiB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAGjF,MAAM,uBAAuB,GAAG,CAAC,OAAgB,EAAE,OAAgB,MAC/D,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAGpF,MAAM,oBAAoB,GAAG,CAAC,QAAiB,EAAE,QAAiB,KAAc,eAAe,CAAC,QAAQ,EAAE,QAAQ;AAElH;;AAEG;AAEH,MAAM,8BAA8B,GAAG,CAAC,KAAgB,EAAE,KAAgB,KAA8B;IACpG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC1D,QAAA,OAAO,IAAI;IACf;IAEA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAC1D,QAAA,OAAO,IAAI;IACf;IAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;IACtF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAE5C,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAEnD,OAAO;AACH,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,MAAM,EAAE,KAAK;QACb,OAAO;AACP,QAAA,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;AACpC,QAAA,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;AACpC,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,WAAW,EAAE,UAAU;KAC1B;AACL;AAEA,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAE,OAAe,KAA8B;AAC5F,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1E,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM;AAClC,IAAA,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ;AAE5D,IAAA,IAAI,OAAO,GAAG,CAAC,EAAE;QACb,UAAU,CAAC,OAAO,EAAE;AACpB,QAAA,OAAO,IAAI;IACf;IAEA,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;IAClD,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;IAEhD,OAAO;AACH,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,MAAM,EAAE,OAAO;QACf,OAAO;QACP,SAAS,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAChG,SAAS,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAChG,WAAW;QACX,WAAW;KACd;AACL;AAEA,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,IAAe,EAAE,IAAI,GAAG,KAAK,KAA8B;AAC5G,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;AAClC,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC;AAC7F,IAAA,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC;AACjI,IAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,MAAM,MAAM,QAAQ,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAEjI,IAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE;AAC1B,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAEpD,OAAO;QACH,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;QAC5B,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;QAC5B,OAAO,EAAE,MAAM,GAAG,QAAQ;QAC1B,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS;QACvC,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS;AACvC,QAAA,WAAW,EAAE,UAAU;AACvB,QAAA,WAAW,EAAE,UAAU;KAC1B;AACL;AAEA,MAAM,yBAAyB,GAAG,CAAC,OAAgB,EAAE,MAAc,EAAE,IAAI,GAAG,KAAK,KAA8B;AAC3G,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAC9B,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM;IAEzB,IAAI,SAAS,GAAG,IAAI;IACpB,IAAI,SAAS,GAAG,IAAI;IACpB,IAAI,OAAO,GAAG,QAAQ;AAEtB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AACxB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAClC,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/B,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAGA,gBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC;QAC/E,MAAM,cAAc,GAAG,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC;AAE9D,QAAA,IAAI,cAAc,GAAG,MAAM,EAAE;YACzB,SAAS,GAAG,KAAK;QACrB;AAEA,QAAA,IAAI,MAAM,KAAK,aAAa,CAAC,IAAI,EAAE;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAChC,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7B,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAE7B,YAAA,IAAIA,gBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,aAAa,CAAC,KAAK,EAAE;AAC1F,gBAAA,IAAI,cAAc,GAAG,MAAM,EAAE;oBACzB,UAAU,CAAC,OAAO,EAAE;AACpB,oBAAA,OAAO,IAAI;gBACf;AAEA,gBAAA,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc;AAEhD,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;oBAChD,OAAO,GAAG,gBAAgB;oBAC1B,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE;gBACtD;gBAEA,SAAS,GAAG,KAAK;YACrB;QACJ;AAAO,aAAA,IAAI,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE;AACvC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAChC,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/B,YAAA,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;YAC/B,MAAM,cAAc,GAAG,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC;AAE9D,YAAA,IAAIA,gBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,aAAa,CAAC,IAAI,EAAE;AACzF,gBAAA,IAAI,cAAc,GAAG,MAAM,EAAE;oBACzB,UAAU,CAAC,OAAO,EAAE;AACpB,oBAAA,OAAO,IAAI;gBACf;AAEA,gBAAA,MAAM,gBAAgB,GAAG,MAAM,GAAG,cAAc;AAEhD,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;oBAChD,OAAO,GAAG,gBAAgB;oBAC1B,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,SAAS,EAAE;gBACtD;gBAEA,SAAS,GAAG,KAAK;YACrB;QACJ;aAAO;YACH,MAAM,OAAO,GAAG,MAAM;AACtB,YAAA,MAAM,OAAO,GAAG,CAAC,MAAM;YACvB,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;YACtD,MAAM,QAAQ,GAAG,YAAY,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,OAAO,KAAK,UAAU,GAAG,OAAO,CAAC,IAAI,YAAY;AAE1G,YAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE;gBAC7C,UAAU,CAAC,OAAO,EAAE;AACpB,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,KAAK,CAAC,GAAG,MAAM,CAAC,EAAE;gBACrD,SAAS,GAAG,KAAK;YACrB;AAEA,YAAA,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ;AAE1C,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBAChD,OAAO,GAAG,gBAAgB;gBAC1B,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE;YAChD;QACJ;IACJ;IAEA,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IAExD,OAAO;QACH,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO;QAC/B,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM;QAC/B,OAAO;QACP,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS;QACvC,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS;AACvC,QAAA,WAAW,EAAE,UAAU;QACvB,WAAW;KACd;AACL;AAEA,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAE,MAAkB,KAA8B;AACzF,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE;AACpC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE;AACpC,IAAA,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AACvD,IAAA,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE;AAC5B,IAAA,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE;IAE5B,IAAI,OAAO,GAAG,QAAQ;IACtB,IAAI,SAAS,GAAG,IAAI;IACpB,IAAI,SAAS,GAAG,IAAI;IACpB,IAAI,SAAS,GAAG,KAAK;IACrB,IAAI,SAAS,GAAG,KAAK;IACrB,IAAI,QAAQ,GAAG,CAAC;AAEhB,IAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AAC3B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;AAC7B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;QAE7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxB,UAAU,CAAC,OAAO,EAAE;AACpB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AAClC,QAAA,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACzC,QAAA,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAEzC,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YACzB,SAAS,GAAG,KAAK;QACrB;AAEA,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YACzB,SAAS,GAAG,KAAK;QACrB;AAEA,QAAA,IAAI,SAAS,IAAI,SAAS,EAAE;AACxB,YAAA,QAAQ,IAAI,IAAI,CAAC,GAAG,CAChB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAClC;QACL;AAEA,QAAA,IAAI,QAAQ,GAAG,OAAO,EAAE;YACpB,OAAO,GAAG,QAAQ;AAClB,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B;IACJ;AAEA,IAAA,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AAC3B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;AAC7B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;QAE7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxB,UAAU,CAAC,OAAO,EAAE;AACpB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AAClC,QAAA,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACzC,QAAA,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAEzC,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YACzB,SAAS,GAAG,KAAK;QACrB;AAEA,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;YACzB,SAAS,GAAG,KAAK;QACrB;AAEA,QAAA,IAAI,SAAS,IAAI,SAAS,EAAE;AACxB,YAAA,QAAQ,IAAI,IAAI,CAAC,GAAG,CAChB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAClC;QACL;AAEA,QAAA,IAAI,QAAQ,GAAG,OAAO,EAAE;YACpB,OAAO,GAAG,QAAQ;AAClB,YAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B;IACJ;AAEA,IAAA,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAEjE,OAAO;QACH,MAAM;QACN,MAAM;QACN,OAAO;QACP,SAAS;QACT,SAAS;AACT,QAAA,WAAW,EAAE,UAAU;QACvB,WAAW;KACd;AACL;;;;"}
@@ -24,3 +24,5 @@ export * from './Random';
24
24
  export * from './Segment';
25
25
  export * from './Size';
26
26
  export * from './PolarVector';
27
+ export * from './swept-collision';
28
+ export * from './Quadtree';
@@ -0,0 +1,90 @@
1
+ import { Rectangle } from './Rectangle';
2
+ import type { CircleLike } from './CircleLike';
3
+ /**
4
+ * Result of a swept-collision query. The moving shape's reference point
5
+ * is at `(x, y)` at impact, having travelled fraction `t` ∈ [0..1] of
6
+ * the requested move (where 0 = no movement, 1 = full move). The
7
+ * `(normalX, normalY)` vector is the contact normal pointing AWAY from
8
+ * the target (suitable for sliding response: project the remaining
9
+ * velocity onto the perpendicular).
10
+ */
11
+ export interface SweptHit {
12
+ readonly t: number;
13
+ readonly x: number;
14
+ readonly y: number;
15
+ readonly normalX: number;
16
+ readonly normalY: number;
17
+ }
18
+ /**
19
+ * Swept axis-aligned box vs. axis-aligned box.
20
+ *
21
+ * Uses the separating-axis slab method: for each axis we compute the entry
22
+ * and exit times of the moving box's slab vs the static box's slab, then
23
+ * combine. `t` is the fraction of the requested move at which first contact
24
+ * occurs (0 = already overlapping at start, 1 = just barely reaches).
25
+ *
26
+ * Already-overlapping case (tEntry < 0 overall): returns `t = 0` with the
27
+ * normal of the deepest-penetration axis, allowing callers to handle the
28
+ * "I'm already inside" situation without a separate discrete test.
29
+ */
30
+ export declare function sweepRectangle(moving: Rectangle, deltaX: number, deltaY: number, target: Rectangle): SweptHit | null;
31
+ /**
32
+ * Swept circle vs. axis-aligned box.
33
+ *
34
+ * **V1 implementation** uses the simple Minkowski expansion fallback:
35
+ * the target rectangle is expanded by `circle.radius` on all sides, then
36
+ * `sweepRectangle` is run treating the circle centre as a zero-sized moving
37
+ * box. This over-collides at rectangle corners (the circle collides with the
38
+ * expanded-rect's flat face when geometrically it should curve around the
39
+ * corner), producing slightly early hits in corner-quadrant trajectories —
40
+ * a known and acceptable accuracy trade-off for V1.
41
+ *
42
+ * TODO (V2): Replace with the full Minkowski rounded-rectangle formulation
43
+ * that handles the four corner quadrants with per-corner circle-vs-circle
44
+ * sub-tests.
45
+ */
46
+ export declare function sweepCircleVsRectangle(moving: CircleLike, deltaX: number, deltaY: number, target: Rectangle): SweptHit | null;
47
+ /**
48
+ * Swept circle vs. stationary circle.
49
+ *
50
+ * Solves `|(moving.centre + delta*t) − target.centre|² = (r1+r2)²` for t,
51
+ * yielding a quadratic. Returns the smaller root if it is in [0, 1].
52
+ *
53
+ * Already-overlapping case: returns `{ t: 0 }` with the normal pointing from
54
+ * target → moving (or an arbitrary normal if both centres coincide).
55
+ */
56
+ export declare function sweepCircleVsCircle(moving: CircleLike, deltaX: number, deltaY: number, target: CircleLike): SweptHit | null;
57
+ /**
58
+ * Returns the earliest `SweptHit` against an array of rectangle targets, or
59
+ * `null` if none are hit.
60
+ *
61
+ * Optimisation: before testing each target individually the swept AABB of the
62
+ * moving rectangle is computed once; targets whose AABB does not overlap the
63
+ * swept AABB are skipped.
64
+ */
65
+ export declare function sweepRectangleAgainst(moving: Rectangle, deltaX: number, deltaY: number, targets: ReadonlyArray<Rectangle>): SweptHit | null;
66
+ /**
67
+ * Returns the earliest `SweptHit` against an array of circle targets, or
68
+ * `null` if none are hit.
69
+ *
70
+ * Optimisation: the swept AABB of the moving circle is computed once and used
71
+ * to skip targets that cannot possibly be reached.
72
+ */
73
+ export declare function sweepCircleAgainst(moving: CircleLike, deltaX: number, deltaY: number, targets: ReadonlyArray<CircleLike>): SweptHit | null;
74
+ /**
75
+ * Generator that yields evenly-spaced position snapshots along a movement
76
+ * vector so the caller can run their own discrete intersection check at each
77
+ * step. Useful for arbitrary shape pairs that lack a closed-form swept test.
78
+ *
79
+ * `maxStepSize` controls the step granularity — smaller values produce more
80
+ * accurate detection but more iterations. Use the smallest dimension of the
81
+ * smaller collider as a sensible default.
82
+ *
83
+ * Always yields at least 2 snapshots (t=0 and t=1), even for zero-length
84
+ * deltas.
85
+ */
86
+ export declare function substepSweep(fromX: number, fromY: number, deltaX: number, deltaY: number, maxStepSize: number): IterableIterator<{
87
+ x: number;
88
+ y: number;
89
+ t: number;
90
+ }>;
@@ -0,0 +1,255 @@
1
+ import { Rectangle } from './Rectangle.js';
2
+
3
+ // ---------------------------------------------------------------------------
4
+ // sweepRectangle — AABB vs AABB slab method
5
+ // ---------------------------------------------------------------------------
6
+ /**
7
+ * Swept axis-aligned box vs. axis-aligned box.
8
+ *
9
+ * Uses the separating-axis slab method: for each axis we compute the entry
10
+ * and exit times of the moving box's slab vs the static box's slab, then
11
+ * combine. `t` is the fraction of the requested move at which first contact
12
+ * occurs (0 = already overlapping at start, 1 = just barely reaches).
13
+ *
14
+ * Already-overlapping case (tEntry < 0 overall): returns `t = 0` with the
15
+ * normal of the deepest-penetration axis, allowing callers to handle the
16
+ * "I'm already inside" situation without a separate discrete test.
17
+ */
18
+ function sweepRectangle(moving, deltaX, deltaY, target) {
19
+ const movMinX = moving.x;
20
+ const movMaxX = moving.x + moving.width;
21
+ const movMinY = moving.y;
22
+ const movMaxY = moving.y + moving.height;
23
+ const tarMinX = target.x;
24
+ const tarMaxX = target.x + target.width;
25
+ const tarMinY = target.y;
26
+ const tarMaxY = target.y + target.height;
27
+ // X axis
28
+ let tEntryX = -Infinity;
29
+ let tExitX = Infinity;
30
+ if (deltaX > 0) {
31
+ tEntryX = (tarMinX - movMaxX) / deltaX;
32
+ tExitX = (tarMaxX - movMinX) / deltaX;
33
+ }
34
+ else if (deltaX < 0) {
35
+ tEntryX = (tarMaxX - movMinX) / deltaX;
36
+ tExitX = (tarMinX - movMaxX) / deltaX;
37
+ }
38
+ else if (movMaxX <= tarMinX || movMinX >= tarMaxX) {
39
+ // No movement on X and no static overlap — can never collide
40
+ return null;
41
+ }
42
+ // Y axis
43
+ let tEntryY = -Infinity;
44
+ let tExitY = Infinity;
45
+ if (deltaY > 0) {
46
+ tEntryY = (tarMinY - movMaxY) / deltaY;
47
+ tExitY = (tarMaxY - movMinY) / deltaY;
48
+ }
49
+ else if (deltaY < 0) {
50
+ tEntryY = (tarMaxY - movMinY) / deltaY;
51
+ tExitY = (tarMinY - movMaxY) / deltaY;
52
+ }
53
+ else if (movMaxY <= tarMinY || movMinY >= tarMaxY) {
54
+ // No movement on Y and no static overlap — can never collide
55
+ return null;
56
+ }
57
+ const tEntry = Math.max(tEntryX, tEntryY);
58
+ const tExit = Math.min(tExitX, tExitY);
59
+ // No overlap window
60
+ if (tEntry > tExit || tExit < 0 || tEntry > 1) {
61
+ return null;
62
+ }
63
+ const t = Math.max(0, tEntry);
64
+ const hitX = moving.x + deltaX * t;
65
+ const hitY = moving.y + deltaY * t;
66
+ // Normal is on the axis whose slab entry was latest.
67
+ // Already-overlapping: use the deepest-penetration axis normal.
68
+ let normalX = 0;
69
+ let normalY = 0;
70
+ if (tEntry <= 0) {
71
+ // Already overlapping — pick the axis with least penetration
72
+ const overlapX = Math.min(movMaxX - tarMinX, tarMaxX - movMinX);
73
+ const overlapY = Math.min(movMaxY - tarMinY, tarMaxY - movMinY);
74
+ if (overlapX < overlapY) {
75
+ normalX = movMinX < tarMinX ? -1 : 1;
76
+ }
77
+ else {
78
+ normalY = movMinY < tarMinY ? -1 : 1;
79
+ }
80
+ }
81
+ else if (tEntryX > tEntryY) {
82
+ // X axis had the latest entry
83
+ normalX = deltaX > 0 ? -1 : 1;
84
+ }
85
+ else {
86
+ // Y axis had the latest entry
87
+ normalY = deltaY > 0 ? -1 : 1;
88
+ }
89
+ return { t, x: hitX, y: hitY, normalX, normalY };
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // sweepCircleVsRectangle — expanded-AABB simple fallback (V1)
93
+ // ---------------------------------------------------------------------------
94
+ /**
95
+ * Swept circle vs. axis-aligned box.
96
+ *
97
+ * **V1 implementation** uses the simple Minkowski expansion fallback:
98
+ * the target rectangle is expanded by `circle.radius` on all sides, then
99
+ * `sweepRectangle` is run treating the circle centre as a zero-sized moving
100
+ * box. This over-collides at rectangle corners (the circle collides with the
101
+ * expanded-rect's flat face when geometrically it should curve around the
102
+ * corner), producing slightly early hits in corner-quadrant trajectories —
103
+ * a known and acceptable accuracy trade-off for V1.
104
+ *
105
+ * TODO (V2): Replace with the full Minkowski rounded-rectangle formulation
106
+ * that handles the four corner quadrants with per-corner circle-vs-circle
107
+ * sub-tests.
108
+ */
109
+ function sweepCircleVsRectangle(moving, deltaX, deltaY, target) {
110
+ const r = moving.radius;
111
+ // Expanded target: grow each side by the circle radius
112
+ const expanded = new Rectangle(target.x - r, target.y - r, target.width + r * 2, target.height + r * 2);
113
+ // Treat the circle centre as a zero-sized moving box
114
+ const centreBox = new Rectangle(moving.x, moving.y, 0, 0);
115
+ return sweepRectangle(centreBox, deltaX, deltaY, expanded);
116
+ }
117
+ // ---------------------------------------------------------------------------
118
+ // sweepCircleVsCircle — quadratic equation
119
+ // ---------------------------------------------------------------------------
120
+ /**
121
+ * Swept circle vs. stationary circle.
122
+ *
123
+ * Solves `|(moving.centre + delta*t) − target.centre|² = (r1+r2)²` for t,
124
+ * yielding a quadratic. Returns the smaller root if it is in [0, 1].
125
+ *
126
+ * Already-overlapping case: returns `{ t: 0 }` with the normal pointing from
127
+ * target → moving (or an arbitrary normal if both centres coincide).
128
+ */
129
+ function sweepCircleVsCircle(moving, deltaX, deltaY, target) {
130
+ const dx = moving.x - target.x;
131
+ const dy = moving.y - target.y;
132
+ const r = moving.radius + target.radius;
133
+ const a = deltaX * deltaX + deltaY * deltaY;
134
+ const b = 2 * (dx * deltaX + dy * deltaY);
135
+ const c = dx * dx + dy * dy - r * r;
136
+ // Already overlapping at start
137
+ if (c <= 0) {
138
+ const dist = Math.sqrt(dx * dx + dy * dy);
139
+ const normalX = dist > 0 ? dx / dist : 1;
140
+ const normalY = dist > 0 ? dy / dist : 0;
141
+ return { t: 0, x: moving.x, y: moving.y, normalX, normalY };
142
+ }
143
+ // No movement
144
+ if (a === 0) {
145
+ return null;
146
+ }
147
+ const disc = b * b - 4 * a * c;
148
+ if (disc < 0) {
149
+ return null;
150
+ }
151
+ const t = (-b - Math.sqrt(disc)) / (2 * a);
152
+ if (t < 0 || t > 1) {
153
+ return null;
154
+ }
155
+ const hitX = moving.x + deltaX * t;
156
+ const hitY = moving.y + deltaY * t;
157
+ // Normal points from target centre → hit circle centre
158
+ const normalX = (hitX - target.x) / r;
159
+ const normalY = (hitY - target.y) / r;
160
+ return { t, x: hitX, y: hitY, normalX, normalY };
161
+ }
162
+ // ---------------------------------------------------------------------------
163
+ // Batch helpers — sweep a shape against multiple targets
164
+ // ---------------------------------------------------------------------------
165
+ /**
166
+ * Returns the earliest `SweptHit` against an array of rectangle targets, or
167
+ * `null` if none are hit.
168
+ *
169
+ * Optimisation: before testing each target individually the swept AABB of the
170
+ * moving rectangle is computed once; targets whose AABB does not overlap the
171
+ * swept AABB are skipped.
172
+ */
173
+ function sweepRectangleAgainst(moving, deltaX, deltaY, targets) {
174
+ if (targets.length === 0) {
175
+ return null;
176
+ }
177
+ // Swept AABB of the moving rectangle (broad-phase skip)
178
+ const sweptMinX = Math.min(moving.x, moving.x + deltaX);
179
+ const sweptMaxX = Math.max(moving.x + moving.width, moving.x + moving.width + deltaX);
180
+ const sweptMinY = Math.min(moving.y, moving.y + deltaY);
181
+ const sweptMaxY = Math.max(moving.y + moving.height, moving.y + moving.height + deltaY);
182
+ let earliest = null;
183
+ for (const target of targets) {
184
+ // Broad-phase: skip if swept AABB doesn't overlap target AABB
185
+ if (sweptMaxX <= target.x
186
+ || sweptMinX >= target.x + target.width
187
+ || sweptMaxY <= target.y
188
+ || sweptMinY >= target.y + target.height) {
189
+ continue;
190
+ }
191
+ const hit = sweepRectangle(moving, deltaX, deltaY, target);
192
+ if (hit !== null && (earliest === null || hit.t < earliest.t)) {
193
+ earliest = hit;
194
+ }
195
+ }
196
+ return earliest;
197
+ }
198
+ /**
199
+ * Returns the earliest `SweptHit` against an array of circle targets, or
200
+ * `null` if none are hit.
201
+ *
202
+ * Optimisation: the swept AABB of the moving circle is computed once and used
203
+ * to skip targets that cannot possibly be reached.
204
+ */
205
+ function sweepCircleAgainst(moving, deltaX, deltaY, targets) {
206
+ if (targets.length === 0) {
207
+ return null;
208
+ }
209
+ // Swept AABB of the moving circle
210
+ const sweptMinX = Math.min(moving.x, moving.x + deltaX) - moving.radius;
211
+ const sweptMaxX = Math.max(moving.x, moving.x + deltaX) + moving.radius;
212
+ const sweptMinY = Math.min(moving.y, moving.y + deltaY) - moving.radius;
213
+ const sweptMaxY = Math.max(moving.y, moving.y + deltaY) + moving.radius;
214
+ let earliest = null;
215
+ for (const target of targets) {
216
+ // Broad-phase: skip if swept AABB doesn't overlap target's AABB
217
+ if (sweptMaxX <= target.x - target.radius
218
+ || sweptMinX >= target.x + target.radius
219
+ || sweptMaxY <= target.y - target.radius
220
+ || sweptMinY >= target.y + target.radius) {
221
+ continue;
222
+ }
223
+ const hit = sweepCircleVsCircle(moving, deltaX, deltaY, target);
224
+ if (hit !== null && (earliest === null || hit.t < earliest.t)) {
225
+ earliest = hit;
226
+ }
227
+ }
228
+ return earliest;
229
+ }
230
+ // ---------------------------------------------------------------------------
231
+ // substepSweep — generic fallback iterator
232
+ // ---------------------------------------------------------------------------
233
+ /**
234
+ * Generator that yields evenly-spaced position snapshots along a movement
235
+ * vector so the caller can run their own discrete intersection check at each
236
+ * step. Useful for arbitrary shape pairs that lack a closed-form swept test.
237
+ *
238
+ * `maxStepSize` controls the step granularity — smaller values produce more
239
+ * accurate detection but more iterations. Use the smallest dimension of the
240
+ * smaller collider as a sensible default.
241
+ *
242
+ * Always yields at least 2 snapshots (t=0 and t=1), even for zero-length
243
+ * deltas.
244
+ */
245
+ function* substepSweep(fromX, fromY, deltaX, deltaY, maxStepSize) {
246
+ const length = Math.hypot(deltaX, deltaY);
247
+ const stepCount = Math.max(1, Math.ceil(length / maxStepSize));
248
+ for (let i = 0; i <= stepCount; i++) {
249
+ const t = i / stepCount;
250
+ yield { x: fromX + deltaX * t, y: fromY + deltaY * t, t };
251
+ }
252
+ }
253
+
254
+ export { substepSweep, sweepCircleAgainst, sweepCircleVsCircle, sweepCircleVsRectangle, sweepRectangle, sweepRectangleAgainst };
255
+ //# sourceMappingURL=swept-collision.js.map