@aura3d/math 4.0.3 → 4.0.5

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 (165) hide show
  1. package/dist/Box3.d.ts +50 -0
  2. package/dist/Box3.d.ts.map +1 -1
  3. package/dist/Box3.js +177 -6
  4. package/dist/Box3.js.map +1 -1
  5. package/dist/Capsule.d.ts +25 -0
  6. package/dist/Capsule.d.ts.map +1 -0
  7. package/dist/Capsule.js +54 -0
  8. package/dist/Capsule.js.map +1 -0
  9. package/dist/Color.d.ts +27 -0
  10. package/dist/Color.d.ts.map +1 -1
  11. package/dist/Color.js +87 -0
  12. package/dist/Color.js.map +1 -1
  13. package/dist/ConvexHull.d.ts +100 -0
  14. package/dist/ConvexHull.d.ts.map +1 -0
  15. package/dist/ConvexHull.js +578 -0
  16. package/dist/ConvexHull.js.map +1 -0
  17. package/dist/Curves.d.ts +59 -18
  18. package/dist/Curves.d.ts.map +1 -1
  19. package/dist/Curves.js +15 -73
  20. package/dist/Curves.js.map +1 -1
  21. package/dist/Cylindrical.d.ts +19 -0
  22. package/dist/Cylindrical.d.ts.map +1 -0
  23. package/dist/Cylindrical.js +40 -0
  24. package/dist/Cylindrical.js.map +1 -0
  25. package/dist/Euler.d.ts +24 -0
  26. package/dist/Euler.d.ts.map +1 -1
  27. package/dist/Euler.js +126 -2
  28. package/dist/Euler.js.map +1 -1
  29. package/dist/Frustum.d.ts +18 -0
  30. package/dist/Frustum.d.ts.map +1 -1
  31. package/dist/Frustum.js +62 -12
  32. package/dist/Frustum.js.map +1 -1
  33. package/dist/Line3.d.ts +38 -0
  34. package/dist/Line3.d.ts.map +1 -0
  35. package/dist/Line3.js +122 -0
  36. package/dist/Line3.js.map +1 -0
  37. package/dist/MathUtils.d.ts +37 -0
  38. package/dist/MathUtils.d.ts.map +1 -0
  39. package/dist/MathUtils.js +105 -0
  40. package/dist/MathUtils.js.map +1 -0
  41. package/dist/Matrix3.d.ts +23 -2
  42. package/dist/Matrix3.d.ts.map +1 -1
  43. package/dist/Matrix3.js +90 -0
  44. package/dist/Matrix3.js.map +1 -1
  45. package/dist/Matrix4.d.ts +3 -0
  46. package/dist/Matrix4.d.ts.map +1 -1
  47. package/dist/Matrix4.js +17 -0
  48. package/dist/Matrix4.js.map +1 -1
  49. package/dist/OBB.d.ts +44 -0
  50. package/dist/OBB.d.ts.map +1 -0
  51. package/dist/OBB.js +214 -0
  52. package/dist/OBB.js.map +1 -0
  53. package/dist/Octree.d.ts +72 -0
  54. package/dist/Octree.d.ts.map +1 -0
  55. package/dist/Octree.js +385 -0
  56. package/dist/Octree.js.map +1 -0
  57. package/dist/Plane.d.ts +42 -0
  58. package/dist/Plane.d.ts.map +1 -1
  59. package/dist/Plane.js +79 -3
  60. package/dist/Plane.js.map +1 -1
  61. package/dist/Quaternion.d.ts +6 -1
  62. package/dist/Quaternion.d.ts.map +1 -1
  63. package/dist/Quaternion.js +28 -3
  64. package/dist/Quaternion.js.map +1 -1
  65. package/dist/Ray.d.ts +42 -2
  66. package/dist/Ray.d.ts.map +1 -1
  67. package/dist/Ray.js +202 -9
  68. package/dist/Ray.js.map +1 -1
  69. package/dist/ShapeUtils.d.ts +28 -0
  70. package/dist/ShapeUtils.d.ts.map +1 -0
  71. package/dist/ShapeUtils.js +551 -0
  72. package/dist/ShapeUtils.js.map +1 -0
  73. package/dist/Sphere.d.ts +32 -0
  74. package/dist/Sphere.d.ts.map +1 -1
  75. package/dist/Sphere.js +122 -4
  76. package/dist/Sphere.js.map +1 -1
  77. package/dist/Spherical.d.ts +21 -0
  78. package/dist/Spherical.d.ts.map +1 -0
  79. package/dist/Spherical.js +50 -0
  80. package/dist/Spherical.js.map +1 -0
  81. package/dist/SphericalHarmonics3.d.ts +35 -0
  82. package/dist/SphericalHarmonics3.d.ts.map +1 -0
  83. package/dist/SphericalHarmonics3.js +115 -0
  84. package/dist/SphericalHarmonics3.js.map +1 -0
  85. package/dist/Triangle.d.ts +45 -0
  86. package/dist/Triangle.d.ts.map +1 -0
  87. package/dist/Triangle.js +160 -0
  88. package/dist/Triangle.js.map +1 -0
  89. package/dist/Vector2.d.ts +7 -0
  90. package/dist/Vector2.d.ts.map +1 -1
  91. package/dist/Vector2.js +17 -0
  92. package/dist/Vector2.js.map +1 -1
  93. package/dist/Vector3.d.ts +16 -0
  94. package/dist/Vector3.d.ts.map +1 -1
  95. package/dist/Vector3.js +35 -0
  96. package/dist/Vector3.js.map +1 -1
  97. package/dist/curves/ArcCurve.d.ts +7 -0
  98. package/dist/curves/ArcCurve.d.ts.map +1 -0
  99. package/dist/curves/ArcCurve.js +9 -0
  100. package/dist/curves/ArcCurve.js.map +1 -0
  101. package/dist/curves/CatmullRomCurve3.d.ts +39 -0
  102. package/dist/curves/CatmullRomCurve3.d.ts.map +1 -0
  103. package/dist/curves/CatmullRomCurve3.js +176 -0
  104. package/dist/curves/CatmullRomCurve3.js.map +1 -0
  105. package/dist/curves/ClampedCatmullRomCurve3.d.ts +26 -0
  106. package/dist/curves/ClampedCatmullRomCurve3.d.ts.map +1 -0
  107. package/dist/curves/ClampedCatmullRomCurve3.js +48 -0
  108. package/dist/curves/ClampedCatmullRomCurve3.js.map +1 -0
  109. package/dist/curves/CubicBezierCurve.d.ts +14 -0
  110. package/dist/curves/CubicBezierCurve.d.ts.map +1 -0
  111. package/dist/curves/CubicBezierCurve.js +25 -0
  112. package/dist/curves/CubicBezierCurve.js.map +1 -0
  113. package/dist/curves/CubicBezierCurve3.d.ts +14 -0
  114. package/dist/curves/CubicBezierCurve3.d.ts.map +1 -0
  115. package/dist/curves/CubicBezierCurve3.js +25 -0
  116. package/dist/curves/CubicBezierCurve3.js.map +1 -0
  117. package/dist/curves/CurveBase.d.ts +49 -0
  118. package/dist/curves/CurveBase.d.ts.map +1 -0
  119. package/dist/curves/CurveBase.js +199 -0
  120. package/dist/curves/CurveBase.js.map +1 -0
  121. package/dist/curves/CurvePath.d.ts +34 -0
  122. package/dist/curves/CurvePath.d.ts.map +1 -0
  123. package/dist/curves/CurvePath.js +135 -0
  124. package/dist/curves/CurvePath.js.map +1 -0
  125. package/dist/curves/EllipseCurve.d.ts +18 -0
  126. package/dist/curves/EllipseCurve.d.ts.map +1 -0
  127. package/dist/curves/EllipseCurve.js +67 -0
  128. package/dist/curves/EllipseCurve.js.map +1 -0
  129. package/dist/curves/Interpolations.d.ts +9 -0
  130. package/dist/curves/Interpolations.d.ts.map +1 -0
  131. package/dist/curves/Interpolations.js +21 -0
  132. package/dist/curves/Interpolations.js.map +1 -0
  133. package/dist/curves/LineCurve.d.ts +16 -0
  134. package/dist/curves/LineCurve.d.ts.map +1 -0
  135. package/dist/curves/LineCurve.js +32 -0
  136. package/dist/curves/LineCurve.js.map +1 -0
  137. package/dist/curves/LineCurve3.d.ts +16 -0
  138. package/dist/curves/LineCurve3.d.ts.map +1 -0
  139. package/dist/curves/LineCurve3.js +32 -0
  140. package/dist/curves/LineCurve3.js.map +1 -0
  141. package/dist/curves/Path.d.ts +23 -0
  142. package/dist/curves/Path.d.ts.map +1 -0
  143. package/dist/curves/Path.js +94 -0
  144. package/dist/curves/Path.js.map +1 -0
  145. package/dist/curves/QuadraticBezierCurve.d.ts +13 -0
  146. package/dist/curves/QuadraticBezierCurve.d.ts.map +1 -0
  147. package/dist/curves/QuadraticBezierCurve.js +23 -0
  148. package/dist/curves/QuadraticBezierCurve.js.map +1 -0
  149. package/dist/curves/QuadraticBezierCurve3.d.ts +13 -0
  150. package/dist/curves/QuadraticBezierCurve3.d.ts.map +1 -0
  151. package/dist/curves/QuadraticBezierCurve3.js +23 -0
  152. package/dist/curves/QuadraticBezierCurve3.js.map +1 -0
  153. package/dist/curves/Shape.d.ts +15 -0
  154. package/dist/curves/Shape.d.ts.map +1 -0
  155. package/dist/curves/Shape.js +26 -0
  156. package/dist/curves/Shape.js.map +1 -0
  157. package/dist/curves/SplineCurve.d.ts +11 -0
  158. package/dist/curves/SplineCurve.d.ts.map +1 -0
  159. package/dist/curves/SplineCurve.js +27 -0
  160. package/dist/curves/SplineCurve.js.map +1 -0
  161. package/dist/index.d.ts +12 -0
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +16 -0
  164. package/dist/index.js.map +1 -1
  165. package/package.json +1 -1
package/dist/Octree.js ADDED
@@ -0,0 +1,385 @@
1
+ import { Box3 } from "./Box3.js";
2
+ import { Capsule } from "./Capsule.js";
3
+ import { Line3 } from "./Line3.js";
4
+ import { Sphere } from "./Sphere.js";
5
+ import { Triangle } from "./Triangle.js";
6
+ import { Vector3 } from "./Vector3.js";
7
+ const EPS = 1e-10;
8
+ /** Closest points on two finite line segments (three `lineToLineClosestPoints`). */
9
+ function lineToLineClosestPoints(line1, line2) {
10
+ const r = line1.end.subtract(line1.start);
11
+ const s = line2.end.subtract(line2.start);
12
+ const w = line2.start.subtract(line1.start);
13
+ const a = r.dot(s);
14
+ const b = r.dot(r);
15
+ const c = s.dot(s);
16
+ const d = s.dot(w);
17
+ const e = r.dot(w);
18
+ let t1;
19
+ let t2;
20
+ const divisor = b * c - a * a;
21
+ if (Math.abs(divisor) < EPS) {
22
+ const d1 = -d / c;
23
+ const d2 = (a - d) / c;
24
+ if (Math.abs(d1 - 0.5) < Math.abs(d2 - 0.5)) {
25
+ t1 = 0;
26
+ t2 = d1;
27
+ }
28
+ else {
29
+ t1 = 1;
30
+ t2 = d2;
31
+ }
32
+ }
33
+ else {
34
+ t1 = (d * a + e * c) / divisor;
35
+ t2 = (t1 * a - d) / c;
36
+ }
37
+ t2 = Math.max(0, Math.min(1, t2));
38
+ t1 = Math.max(0, Math.min(1, t1));
39
+ return {
40
+ point1: r.multiplyScalar(t1).add(line1.start),
41
+ point2: s.multiplyScalar(t2).add(line2.start)
42
+ };
43
+ }
44
+ /**
45
+ * Triangle octree — three.js `examples/jsm/math/Octree.js` parity:
46
+ * `addTriangle`/`build`/`split` and `boxIntersect`, `sphereIntersect`,
47
+ * `capsuleIntersect`, `rayIntersect` collision queries.
48
+ *
49
+ * `fromTriangles(triangles)` is the `fromGraphNode` equivalent for
50
+ * triangle-soup sources (meshes adapted by callers); `fromPositions` accepts
51
+ * raw vertex data + optional index/world transform.
52
+ */
53
+ export class Octree {
54
+ /** Cell bounds — `undefined` until {@link calcBox}/{@link build}. */
55
+ box;
56
+ /** Loose bounds grown by {@link addTriangle}. */
57
+ bounds = new Box3();
58
+ trianglesPerLeaf = 8;
59
+ maxLevel = 16;
60
+ subTrees = [];
61
+ triangles = [];
62
+ constructor(box) {
63
+ this.box = box;
64
+ }
65
+ addTriangle(triangle) {
66
+ const min = this.bounds.min;
67
+ const max = this.bounds.max;
68
+ const newMin = new Vector3(Math.min(min.x, triangle.a.x, triangle.b.x, triangle.c.x), Math.min(min.y, triangle.a.y, triangle.b.y, triangle.c.y), Math.min(min.z, triangle.a.z, triangle.b.z, triangle.c.z));
69
+ const newMax = new Vector3(Math.max(max.x, triangle.a.x, triangle.b.x, triangle.c.x), Math.max(max.y, triangle.a.y, triangle.b.y, triangle.c.y), Math.max(max.z, triangle.a.z, triangle.b.z, triangle.c.z));
70
+ this.bounds = new Box3(newMin, newMax);
71
+ this.triangles.push(triangle);
72
+ return this;
73
+ }
74
+ calcBox() {
75
+ this.box = this.bounds.clone();
76
+ // offset small amount to account for regular grid
77
+ this.box = new Box3(new Vector3(this.box.min.x - 0.01, this.box.min.y - 0.01, this.box.min.z - 0.01), this.box.max);
78
+ return this;
79
+ }
80
+ split(level) {
81
+ if (!this.box)
82
+ return this;
83
+ const subTrees = [];
84
+ const halfsize = this.box.max.subtract(this.box.min).multiplyScalar(0.5);
85
+ for (let x = 0; x < 2; x += 1) {
86
+ for (let y = 0; y < 2; y += 1) {
87
+ for (let z = 0; z < 2; z += 1) {
88
+ const v = new Vector3(x, y, z).multiply(halfsize);
89
+ const min = this.box.min.add(v);
90
+ const max = min.add(halfsize);
91
+ subTrees.push(new Octree(new Box3(min, max)));
92
+ }
93
+ }
94
+ }
95
+ let triangle;
96
+ while ((triangle = this.triangles.pop()) !== undefined) {
97
+ for (const subTree of subTrees) {
98
+ if (subTree.box.intersectsTriangle(triangle)) {
99
+ subTree.triangles.push(triangle);
100
+ }
101
+ }
102
+ }
103
+ for (const subTree of subTrees) {
104
+ const len = subTree.triangles.length;
105
+ if (len > this.trianglesPerLeaf && level < this.maxLevel) {
106
+ subTree.split(level + 1);
107
+ }
108
+ if (len !== 0) {
109
+ this.subTrees.push(subTree);
110
+ }
111
+ }
112
+ return this;
113
+ }
114
+ build() {
115
+ this.calcBox();
116
+ this.split(0);
117
+ return this;
118
+ }
119
+ /** `fromGraphNode` equivalent: build over an explicit triangle list. */
120
+ fromTriangles(triangles) {
121
+ for (const triangle of triangles)
122
+ this.addTriangle(triangle);
123
+ this.build();
124
+ return this;
125
+ }
126
+ /**
127
+ * Build over raw vertex positions with optional index list and world
128
+ * transform — the `fromGraphNode` equivalent for mesh data.
129
+ */
130
+ fromPositions(positions, indices, worldMatrix) {
131
+ if (indices !== undefined && indices.length > 0) {
132
+ for (let i = 0; i < indices.length; i += 3) {
133
+ const a = Vector3.fromArray(positions, indices[i] * 3);
134
+ const b = Vector3.fromArray(positions, indices[i + 1] * 3);
135
+ const c = Vector3.fromArray(positions, indices[i + 2] * 3);
136
+ this.addTriangle(new Triangle(worldMatrix ? a.transformMatrix4(worldMatrix) : a, worldMatrix ? b.transformMatrix4(worldMatrix) : b, worldMatrix ? c.transformMatrix4(worldMatrix) : c));
137
+ }
138
+ }
139
+ else {
140
+ for (let i = 0; i < positions.length; i += 9) {
141
+ const a = Vector3.fromArray(positions, i);
142
+ const b = Vector3.fromArray(positions, i + 3);
143
+ const c = Vector3.fromArray(positions, i + 6);
144
+ this.addTriangle(new Triangle(worldMatrix ? a.transformMatrix4(worldMatrix) : a, worldMatrix ? b.transformMatrix4(worldMatrix) : b, worldMatrix ? c.transformMatrix4(worldMatrix) : c));
145
+ }
146
+ }
147
+ this.build();
148
+ return this;
149
+ }
150
+ getRayTriangles(ray, triangles) {
151
+ for (const subTree of this.subTrees) {
152
+ if (!ray.intersectsBox(subTree.box))
153
+ continue;
154
+ if (subTree.triangles.length > 0) {
155
+ for (const triangle of subTree.triangles) {
156
+ if (!triangles.includes(triangle))
157
+ triangles.push(triangle);
158
+ }
159
+ }
160
+ else {
161
+ subTree.getRayTriangles(ray, triangles);
162
+ }
163
+ }
164
+ }
165
+ triangleCapsuleIntersect(capsule, triangle) {
166
+ const plane = triangle.getPlane();
167
+ const d1 = plane.distanceToPoint(capsule.start) - capsule.radius;
168
+ const d2 = plane.distanceToPoint(capsule.end) - capsule.radius;
169
+ if ((d1 > 0 && d2 > 0) || (d1 < -capsule.radius && d2 < -capsule.radius)) {
170
+ return false;
171
+ }
172
+ const delta = Math.abs(d1 / (Math.abs(d1) + Math.abs(d2)));
173
+ const intersectPoint = capsule.start.lerp(capsule.end, delta);
174
+ if (triangle.containsPoint(intersectPoint)) {
175
+ return { normal: plane.normal, point: intersectPoint, depth: Math.abs(Math.min(d1, d2)) };
176
+ }
177
+ const r2 = capsule.radius * capsule.radius;
178
+ const line1 = new Line3(capsule.start, capsule.end);
179
+ const lines = [
180
+ [triangle.a, triangle.b],
181
+ [triangle.b, triangle.c],
182
+ [triangle.c, triangle.a]
183
+ ];
184
+ for (const [start, end] of lines) {
185
+ const line2 = new Line3(start, end);
186
+ const { point1, point2 } = lineToLineClosestPoints(line1, line2);
187
+ if (point1.distanceToSquared(point2) < r2) {
188
+ return {
189
+ normal: point1.subtract(point2).normalize(),
190
+ point: point2,
191
+ depth: capsule.radius - point1.distanceTo(point2)
192
+ };
193
+ }
194
+ }
195
+ return false;
196
+ }
197
+ triangleBoxIntersect(box, triangle) {
198
+ // cheap check
199
+ if (Math.max(triangle.a.x, triangle.b.x, triangle.c.x) < box.min.x ||
200
+ Math.min(triangle.a.x, triangle.b.x, triangle.c.x) > box.max.x ||
201
+ Math.max(triangle.a.y, triangle.b.y, triangle.c.y) < box.min.y ||
202
+ Math.min(triangle.a.y, triangle.b.y, triangle.c.y) > box.max.y ||
203
+ Math.max(triangle.a.z, triangle.b.z, triangle.c.z) < box.min.z ||
204
+ Math.min(triangle.a.z, triangle.b.z, triangle.c.z) > box.max.z) {
205
+ return false;
206
+ }
207
+ // expensive check
208
+ if (!box.intersectsTriangle(triangle))
209
+ return false;
210
+ const plane = triangle.getPlane();
211
+ // deepest box corner relative to the plane
212
+ const v1 = new Vector3(plane.normal.x > 0 ? box.min.x : box.max.x, plane.normal.y > 0 ? box.min.y : box.max.y, plane.normal.z > 0 ? box.min.z : box.max.z);
213
+ const distance = plane.distanceToPoint(v1);
214
+ return {
215
+ depth: -distance,
216
+ normal: plane.normal,
217
+ point: v1.addScaled(plane.normal, distance)
218
+ };
219
+ }
220
+ triangleSphereIntersect(sphere, triangle) {
221
+ const plane = triangle.getPlane();
222
+ if (!sphere.intersectsPlane(plane))
223
+ return false;
224
+ const depth = Math.abs(plane.distanceToSphere(sphere));
225
+ const r2 = sphere.radius * sphere.radius - depth * depth;
226
+ const plainPoint = plane.projectPoint(sphere.center);
227
+ if (triangle.containsPoint(sphere.center)) {
228
+ return { normal: plane.normal, point: plainPoint, depth: Math.abs(plane.distanceToSphere(sphere)) };
229
+ }
230
+ const lines = [
231
+ [triangle.a, triangle.b],
232
+ [triangle.b, triangle.c],
233
+ [triangle.c, triangle.a]
234
+ ];
235
+ for (const [start, end] of lines) {
236
+ const line = new Line3(start, end);
237
+ const v2 = line.closestPointToPoint(plainPoint, true);
238
+ const d = v2.distanceToSquared(sphere.center);
239
+ if (d < r2) {
240
+ return {
241
+ normal: sphere.center.subtract(v2).normalize(),
242
+ point: v2,
243
+ depth: sphere.radius - Math.sqrt(d)
244
+ };
245
+ }
246
+ }
247
+ return false;
248
+ }
249
+ getSphereTriangles(sphere, triangles) {
250
+ for (const subTree of this.subTrees) {
251
+ if (!sphere.intersectsBox(subTree.box))
252
+ continue;
253
+ if (subTree.triangles.length > 0) {
254
+ for (const triangle of subTree.triangles) {
255
+ if (!triangles.includes(triangle))
256
+ triangles.push(triangle);
257
+ }
258
+ }
259
+ else {
260
+ subTree.getSphereTriangles(sphere, triangles);
261
+ }
262
+ }
263
+ }
264
+ getBoxTriangles(box, triangles) {
265
+ for (const subTree of this.subTrees) {
266
+ if (!box.intersectsBox(subTree.box))
267
+ continue;
268
+ if (subTree.triangles.length > 0) {
269
+ for (const triangle of subTree.triangles) {
270
+ if (!triangles.includes(triangle))
271
+ triangles.push(triangle);
272
+ }
273
+ }
274
+ else {
275
+ subTree.getBoxTriangles(box, triangles);
276
+ }
277
+ }
278
+ }
279
+ getCapsuleTriangles(capsule, triangles) {
280
+ for (const subTree of this.subTrees) {
281
+ if (!capsule.intersectsBox(subTree.box))
282
+ continue;
283
+ if (subTree.triangles.length > 0) {
284
+ for (const triangle of subTree.triangles) {
285
+ if (!triangles.includes(triangle))
286
+ triangles.push(triangle);
287
+ }
288
+ }
289
+ else {
290
+ subTree.getCapsuleTriangles(capsule, triangles);
291
+ }
292
+ }
293
+ }
294
+ /**
295
+ * Resolves `box` against the octree — returns the accumulated collision
296
+ * normal + depth or `false` (three `Octree.boxIntersect`).
297
+ */
298
+ boxIntersect(box) {
299
+ let moving = box;
300
+ const triangles = [];
301
+ let hit = false;
302
+ this.getBoxTriangles(box, triangles);
303
+ for (const triangle of triangles) {
304
+ const result = this.triangleBoxIntersect(moving, triangle);
305
+ if (result) {
306
+ hit = true;
307
+ moving = moving.translate(result.normal.multiplyScalar(result.depth));
308
+ }
309
+ }
310
+ if (hit) {
311
+ const collisionVector = moving.getCenter().subtract(box.getCenter());
312
+ const depth = collisionVector.length();
313
+ return { normal: collisionVector.normalize(), depth };
314
+ }
315
+ return false;
316
+ }
317
+ /** three.js `Octree.sphereIntersect`. */
318
+ sphereIntersect(sphere) {
319
+ let moving = sphere;
320
+ const triangles = [];
321
+ let hit = false;
322
+ this.getSphereTriangles(sphere, triangles);
323
+ for (const triangle of triangles) {
324
+ const result = this.triangleSphereIntersect(moving, triangle);
325
+ if (result) {
326
+ hit = true;
327
+ moving = moving.translate(result.normal.multiplyScalar(result.depth));
328
+ }
329
+ }
330
+ if (hit) {
331
+ const collisionVector = moving.center.subtract(sphere.center);
332
+ const depth = collisionVector.length();
333
+ return { normal: collisionVector.normalize(), depth };
334
+ }
335
+ return false;
336
+ }
337
+ /** three.js `Octree.capsuleIntersect`. */
338
+ capsuleIntersect(capsule) {
339
+ let moving = capsule;
340
+ const triangles = [];
341
+ let hit = false;
342
+ this.getCapsuleTriangles(capsule, triangles);
343
+ for (const triangle of triangles) {
344
+ const result = this.triangleCapsuleIntersect(moving, triangle);
345
+ if (result) {
346
+ hit = true;
347
+ moving = moving.translate(result.normal.multiplyScalar(result.depth));
348
+ }
349
+ }
350
+ if (hit) {
351
+ const collisionVector = moving.getCenter().subtract(capsule.getCenter());
352
+ const depth = collisionVector.length();
353
+ return { normal: collisionVector.normalize(), depth };
354
+ }
355
+ return false;
356
+ }
357
+ /** three.js `Octree.rayIntersect` — nearest triangle hit (backface-culled). */
358
+ rayIntersect(ray) {
359
+ const triangles = [];
360
+ let triangle;
361
+ let position;
362
+ let distance = 1e100;
363
+ this.getRayTriangles(ray, triangles);
364
+ for (const tri of triangles) {
365
+ const result = ray.intersectTriangle(tri.a, tri.b, tri.c, true);
366
+ if (result !== undefined) {
367
+ const newdistance = result.subtract(ray.origin).length();
368
+ if (distance > newdistance) {
369
+ position = result;
370
+ distance = newdistance;
371
+ triangle = tri;
372
+ }
373
+ }
374
+ }
375
+ return distance < 1e100 ? { distance, triangle: triangle, position: position } : false;
376
+ }
377
+ clear() {
378
+ this.box = undefined;
379
+ this.bounds = new Box3();
380
+ this.subTrees.length = 0;
381
+ this.triangles.length = 0;
382
+ return this;
383
+ }
384
+ }
385
+ //# sourceMappingURL=Octree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Octree.js","sourceRoot":"","sources":["../../../../packages/math/src/Octree.ts"],"names":[],"mappings":"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"}
package/dist/Plane.d.ts CHANGED
@@ -1,11 +1,53 @@
1
1
  import { Vector3 } from "./Vector3.js";
2
+ import { Matrix3 } from "./Matrix3.js";
3
+ import type { Line3 } from "./Line3.js";
4
+ import type { Box3 } from "./Box3.js";
5
+ import type { Sphere } from "./Sphere.js";
6
+ import type { Matrix4 } from "./Matrix4.js";
7
+ /**
8
+ * Plane `n·x + c = 0` with normalized `normal` — three.js `Plane` parity.
9
+ * The constructor normalizes `(normal, constant)` like three's
10
+ * `Plane.normalize()` so signed distances are always well-defined.
11
+ */
2
12
  export declare class Plane {
3
13
  readonly normal: Vector3;
4
14
  readonly constant: number;
5
15
  constructor(normal?: Vector3, constant?: number);
16
+ /** three.js `Plane.setComponents` — does NOT normalize (three semantics). */
17
+ static setComponents(x: number, y: number, z: number, w: number): Plane;
6
18
  static fromPointNormal(point: Vector3, normal: Vector3): Plane;
19
+ /** three.js `Plane.setFromNormalAndCoplanarPoint`. */
20
+ static setFromNormalAndCoplanarPoint(normal: Vector3, point: Vector3): Plane;
21
+ /** CCW winding determines the normal (three `setFromCoplanarPoints`). */
22
+ static fromCoplanarPoints(a: Vector3, b: Vector3, c: Vector3): Plane;
23
+ setFromCoplanarPoints(a: Vector3, b: Vector3, c: Vector3): Plane;
24
+ clone(): Plane;
25
+ copy(plane: Plane): Plane;
26
+ negate(): Plane;
7
27
  distanceToPoint(point: Vector3): number;
28
+ /** Signed distance to a sphere's center plus its radius (three `distanceToSphere`). */
29
+ distanceToSphere(sphere: Sphere): number;
8
30
  projectPoint(point: Vector3): Vector3;
31
+ /** Point on the plane nearest the origin — `normal * -constant` (three `coplanarPoint`). */
32
+ coplanarPoint(): Vector3;
33
+ /**
34
+ * Segment intersection — three.js `Plane.intersectLine` parity:
35
+ * coplanar line returns `line.start`, parallel returns `undefined`,
36
+ * and `undefined` when the intersection lies outside the segment.
37
+ */
9
38
  intersectLine(start: Vector3, end: Vector3): Vector3 | undefined;
39
+ intersectLine(line: Line3): Vector3 | undefined;
40
+ /** Whether the segment `line` crosses the plane (three `intersectsLine`). */
41
+ intersectsLine(line: Line3): boolean;
42
+ intersectsBox(box: Box3): boolean;
43
+ intersectsSphere(sphere: Sphere): boolean;
44
+ /**
45
+ * three.js `Plane.applyMatrix4` — the matrix must be affine; pass a
46
+ * precomputed `Matrix3.getNormalMatrix(matrix)` as `normalMatrix` to
47
+ * skip recomputation.
48
+ */
49
+ applyMatrix4(matrix: Matrix4, normalMatrix?: Matrix3): Plane;
50
+ translate(offset: Vector3): Plane;
51
+ equals(plane: Plane, epsilon?: number): boolean;
10
52
  }
11
53
  //# sourceMappingURL=Plane.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Plane.d.ts","sourceRoot":"","sources":["../../../../packages/math/src/Plane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,qBAAa,KAAK;IAChB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,MAAM,UAAqB,EAAE,QAAQ,SAAI;IAOrD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK;IAK9D,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAIvC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIrC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;CAOjE"}
1
+ {"version":3,"file":"Plane.d.ts","sourceRoot":"","sources":["../../../../packages/math/src/Plane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,KAAK;IAChB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,MAAM,UAAqB,EAAE,QAAQ,SAAI;IAOrD,6EAA6E;IAC7E,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK;IAIvE,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK;IAK9D,sDAAsD;IACtD,MAAM,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK;IAI5E,yEAAyE;IACzE,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,KAAK;IAKpE,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,KAAK;IAIhE,KAAK,IAAI,KAAK;IAId,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IAIzB,MAAM,IAAI,KAAK;IAIf,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAIvC,uFAAuF;IACvF,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIxC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIrC,4FAA4F;IAC5F,aAAa,IAAI,OAAO;IAIxB;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAChE,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS;IAgB/C,6EAA6E;IAC7E,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO;IAMpC,aAAa,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO;IAIjC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIzC;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK;IAO5D,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK;IAIjC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,SAAQ,GAAG,OAAO;CAG/C"}
package/dist/Plane.js CHANGED
@@ -1,4 +1,10 @@
1
1
  import { Vector3 } from "./Vector3.js";
2
+ import { Matrix3 } from "./Matrix3.js";
3
+ /**
4
+ * Plane `n·x + c = 0` with normalized `normal` — three.js `Plane` parity.
5
+ * The constructor normalizes `(normal, constant)` like three's
6
+ * `Plane.normalize()` so signed distances are always well-defined.
7
+ */
2
8
  export class Plane {
3
9
  normal;
4
10
  constant;
@@ -9,23 +15,93 @@ export class Plane {
9
15
  this.normal = normal.multiplyScalar(1 / len);
10
16
  this.constant = constant / len;
11
17
  }
18
+ /** three.js `Plane.setComponents` — does NOT normalize (three semantics). */
19
+ static setComponents(x, y, z, w) {
20
+ return new Plane(new Vector3(x, y, z), w);
21
+ }
12
22
  static fromPointNormal(point, normal) {
13
23
  const normalized = normal.normalize();
14
24
  return new Plane(normalized, -point.dot(normalized));
15
25
  }
26
+ /** three.js `Plane.setFromNormalAndCoplanarPoint`. */
27
+ static setFromNormalAndCoplanarPoint(normal, point) {
28
+ return Plane.fromPointNormal(point, normal);
29
+ }
30
+ /** CCW winding determines the normal (three `setFromCoplanarPoints`). */
31
+ static fromCoplanarPoints(a, b, c) {
32
+ const normal = c.subtract(b).cross(a.subtract(b)).normalize();
33
+ return Plane.fromPointNormal(a, normal);
34
+ }
35
+ setFromCoplanarPoints(a, b, c) {
36
+ return Plane.fromCoplanarPoints(a, b, c);
37
+ }
38
+ clone() {
39
+ return new Plane(this.normal, this.constant);
40
+ }
41
+ copy(plane) {
42
+ return new Plane(plane.normal, plane.constant);
43
+ }
44
+ negate() {
45
+ return new Plane(this.normal.negate(), -this.constant);
46
+ }
16
47
  distanceToPoint(point) {
17
48
  return this.normal.dot(point) + this.constant;
18
49
  }
50
+ /** Signed distance to a sphere's center plus its radius (three `distanceToSphere`). */
51
+ distanceToSphere(sphere) {
52
+ return this.distanceToPoint(sphere.center) - sphere.radius;
53
+ }
19
54
  projectPoint(point) {
20
55
  return point.subtract(this.normal.multiplyScalar(this.distanceToPoint(point)));
21
56
  }
22
- intersectLine(start, end) {
57
+ /** Point on the plane nearest the origin — `normal * -constant` (three `coplanarPoint`). */
58
+ coplanarPoint() {
59
+ return this.normal.multiplyScalar(-this.constant);
60
+ }
61
+ intersectLine(a, b) {
62
+ const start = a instanceof Vector3 ? a : a.start;
63
+ const end = a instanceof Vector3 ? b : a.end;
23
64
  const direction = end.subtract(start);
24
65
  const denominator = this.normal.dot(direction);
25
- if (Math.abs(denominator) < 1e-12)
66
+ if (denominator === 0) {
67
+ // line is coplanar, return start; otherwise no intersection
68
+ if (this.distanceToPoint(start) === 0)
69
+ return start;
26
70
  return undefined;
71
+ }
27
72
  const t = -(start.dot(this.normal) + this.constant) / denominator;
28
- return t < 0 || t > 1 ? undefined : start.add(direction.multiplyScalar(t));
73
+ if (t < 0 || t > 1)
74
+ return undefined;
75
+ return start.addScaled(direction, t);
76
+ }
77
+ /** Whether the segment `line` crosses the plane (three `intersectsLine`). */
78
+ intersectsLine(line) {
79
+ const startSign = this.distanceToPoint(line.start);
80
+ const endSign = this.distanceToPoint(line.end);
81
+ return (startSign < 0 && endSign > 0) || (endSign < 0 && startSign > 0);
82
+ }
83
+ intersectsBox(box) {
84
+ return box.intersectsPlane(this);
85
+ }
86
+ intersectsSphere(sphere) {
87
+ return sphere.intersectsPlane(this);
88
+ }
89
+ /**
90
+ * three.js `Plane.applyMatrix4` — the matrix must be affine; pass a
91
+ * precomputed `Matrix3.getNormalMatrix(matrix)` as `normalMatrix` to
92
+ * skip recomputation.
93
+ */
94
+ applyMatrix4(matrix, normalMatrix) {
95
+ const nm = normalMatrix ?? Matrix3.normalFromMatrix4(matrix);
96
+ const referencePoint = this.coplanarPoint().transformMatrix4(matrix);
97
+ const normal = this.normal.applyMatrix3(nm).normalize();
98
+ return new Plane(normal, -referencePoint.dot(normal));
99
+ }
100
+ translate(offset) {
101
+ return new Plane(this.normal, this.constant - offset.dot(this.normal));
102
+ }
103
+ equals(plane, epsilon = 1e-10) {
104
+ return this.normal.equals(plane.normal, epsilon) && Math.abs(this.constant - plane.constant) <= epsilon;
29
105
  }
30
106
  }
31
107
  //# sourceMappingURL=Plane.js.map
package/dist/Plane.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Plane.js","sourceRoot":"","sources":["../../../../packages/math/src/Plane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,KAAK;IACP,MAAM,CAAU;IAChB,QAAQ,CAAS;IAE1B,YAAY,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,QAAQ,GAAG,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,KAAc,EAAE,MAAe;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,eAAe,CAAC,KAAc;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChD,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,aAAa,CAAC,KAAc,EAAE,GAAY;QACxC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK;YAAE,OAAO,SAAS,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;CACF"}
1
+ {"version":3,"file":"Plane.js","sourceRoot":"","sources":["../../../../packages/math/src/Plane.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { Vector3 } from "./Vector3.js";
2
2
  import type { Matrix4 } from "./Matrix4.js";
3
- export type EulerOrder = "XYZ";
3
+ /** Intrinsic rotation order, matching three.js `Euler` orders. */
4
+ export type EulerOrder = "XYZ" | "YXZ" | "ZXY" | "ZYX" | "YZX" | "XZY";
4
5
  export declare class Quaternion {
5
6
  readonly x: number;
6
7
  readonly y: number;
@@ -10,6 +11,10 @@ export declare class Quaternion {
10
11
  constructor(x?: number, y?: number, z?: number, w?: number);
11
12
  static fromAxisAngle(axis: Vector3, radians: number): Quaternion;
12
13
  static fromUnitVectors(from: Vector3, to: Vector3): Quaternion;
14
+ /**
15
+ * Quaternion for the given intrinsic Euler rotations, applied in `order`
16
+ * (all six three.js orders — same formulas as `Quaternion.setFromEuler`).
17
+ */
13
18
  static fromEuler(x: number, y: number, z: number, order?: EulerOrder): Quaternion;
14
19
  static fromRotationMatrix(matrix: Matrix4): Quaternion;
15
20
  clone(): Quaternion;
@@ -1 +1 @@
1
- {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../packages/math/src/Quaternion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC;AAE/B,qBAAa,UAAU;IAInB,QAAQ,CAAC,CAAC;IACV,QAAQ,CAAC,CAAC;IACV,QAAQ,CAAC,CAAC;IACV,QAAQ,CAAC,CAAC;IANZ,MAAM,CAAC,QAAQ,CAAC,QAAQ,uBAA6C;gBAG1D,CAAC,SAAI,EACL,CAAC,SAAI,EACL,CAAC,SAAI,EACL,CAAC,SAAI;IAGhB,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU;IAQhE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,UAAU;IAe9D,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,UAAkB,GAAG,UAAU;IAiBxF,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU;IA2CtD,KAAK,IAAI,UAAU;IAInB,MAAM,IAAI,MAAM;IAIhB,SAAS,IAAI,UAAU;IAMvB,SAAS,IAAI,UAAU;IAIvB,OAAO,IAAI,UAAU;IAYrB,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;IASnC,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO;IAMjC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU;IA+B5C,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,SAAQ,GAAG,OAAO;CAGhD"}
1
+ {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../packages/math/src/Quaternion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,kEAAkE;AAClE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEvE,qBAAa,UAAU;IAInB,QAAQ,CAAC,CAAC;IACV,QAAQ,CAAC,CAAC;IACV,QAAQ,CAAC,CAAC;IACV,QAAQ,CAAC,CAAC;IANZ,MAAM,CAAC,QAAQ,CAAC,QAAQ,uBAA6C;gBAG1D,CAAC,SAAI,EACL,CAAC,SAAI,EACL,CAAC,SAAI,EACL,CAAC,SAAI;IAGhB,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU;IAQhE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,UAAU;IAe9D;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,UAAkB,GAAG,UAAU;IAgExF,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU;IA2CtD,KAAK,IAAI,UAAU;IAInB,MAAM,IAAI,MAAM;IAIhB,SAAS,IAAI,UAAU;IAMvB,SAAS,IAAI,UAAU;IAIvB,OAAO,IAAI,UAAU;IAYrB,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU;IASnC,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO;IAMjC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU;IA+B5C,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,SAAQ,GAAG,OAAO;CAGhD"}