@woosh/meep-engine 2.153.0 → 2.155.0

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 (107) hide show
  1. package/package.json +1 -1
  2. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +112 -0
  3. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -0
  4. package/src/core/geom/3d/shape/ConvexHullShape3D.js +325 -0
  5. package/src/core/geom/vec3/v3_array_copy.d.ts +3 -3
  6. package/src/core/geom/vec3/v3_array_copy.d.ts.map +1 -1
  7. package/src/core/geom/vec3/v3_array_copy.js +2 -2
  8. package/src/core/geom/vec3/v3_cross.d.ts +17 -0
  9. package/src/core/geom/vec3/v3_cross.d.ts.map +1 -0
  10. package/src/core/geom/vec3/v3_cross.js +20 -0
  11. package/src/core/geom/vec3/v3_subtract.d.ts +16 -0
  12. package/src/core/geom/vec3/v3_subtract.d.ts.map +1 -0
  13. package/src/core/geom/vec3/v3_subtract.js +19 -0
  14. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
  15. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +8 -0
  16. package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts +4 -0
  17. package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
  18. package/src/engine/graphics/ecs/trail2d/Trail2D.js +21 -0
  19. package/src/engine/physics/PLAN.md +4 -4
  20. package/src/engine/physics/body/BodyStorage.d.ts +3 -1
  21. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
  22. package/src/engine/physics/body/BodyStorage.js +452 -450
  23. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  24. package/src/engine/physics/body/SolverBodyState.js +6 -5
  25. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
  26. package/src/engine/physics/broadphase/generate_pairs.js +9 -1
  27. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  28. package/src/engine/physics/ccd/linear_sweep.js +237 -238
  29. package/src/engine/physics/computeInterceptPoint.d.ts.map +1 -1
  30. package/src/engine/physics/computeInterceptPoint.js +8 -3
  31. package/src/engine/physics/contact/ManifoldStore.d.ts +0 -16
  32. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  33. package/src/engine/physics/contact/ManifoldStore.js +1 -38
  34. package/src/engine/physics/ecs/BodyKind.d.ts +3 -2
  35. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
  36. package/src/engine/physics/ecs/BodyKind.js +25 -24
  37. package/src/engine/physics/ecs/PhysicsEvents.d.ts +4 -5
  38. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
  39. package/src/engine/physics/ecs/PhysicsEvents.js +15 -16
  40. package/src/engine/physics/ecs/PhysicsSystem.d.ts +5 -30
  41. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  42. package/src/engine/physics/ecs/PhysicsSystem.js +13 -45
  43. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
  44. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +85 -81
  45. package/src/engine/physics/ecs/is_sensor.d.ts +18 -0
  46. package/src/engine/physics/ecs/is_sensor.d.ts.map +1 -0
  47. package/src/engine/physics/ecs/is_sensor.js +27 -0
  48. package/src/engine/physics/events/ContactEventBuffer.d.ts +2 -1
  49. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
  50. package/src/engine/physics/events/ContactEventBuffer.js +84 -83
  51. package/src/engine/physics/gjk/gjk.d.ts +0 -26
  52. package/src/engine/physics/gjk/gjk.d.ts.map +1 -1
  53. package/src/engine/physics/gjk/gjk.js +3 -52
  54. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts +20 -0
  55. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +1 -0
  56. package/src/engine/physics/gjk/gjk_epa_penetration.js +548 -0
  57. package/src/engine/physics/gjk/minkowski_support.d.ts +4 -9
  58. package/src/engine/physics/gjk/minkowski_support.d.ts.map +1 -1
  59. package/src/engine/physics/gjk/minkowski_support.js +70 -75
  60. package/src/engine/physics/gjk/mpr.d.ts +1 -1
  61. package/src/engine/physics/gjk/mpr.d.ts.map +1 -1
  62. package/src/engine/physics/gjk/mpr.js +362 -344
  63. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
  64. package/src/engine/physics/island/IslandBuilder.js +431 -428
  65. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
  66. package/src/engine/physics/narrowphase/box_box_manifold.js +4 -81
  67. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
  68. package/src/engine/physics/narrowphase/box_triangle_contact.js +4 -39
  69. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  70. package/src/engine/physics/narrowphase/capsule_contacts.js +459 -462
  71. package/src/engine/physics/narrowphase/clip_against_axis_uv.d.ts.map +1 -1
  72. package/src/engine/physics/narrowphase/clip_against_axis_uv.js +4 -1
  73. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +83 -0
  74. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -0
  75. package/src/engine/physics/narrowphase/convex_convex_manifold.js +425 -0
  76. package/src/engine/physics/narrowphase/convex_decomposition.d.ts +32 -0
  77. package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -0
  78. package/src/engine/physics/narrowphase/convex_decomposition.js +293 -0
  79. package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts +41 -0
  80. package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts.map +1 -0
  81. package/src/engine/physics/narrowphase/mesh_convex_hull.js +106 -0
  82. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +8 -0
  83. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -0
  84. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -0
  85. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  86. package/src/engine/physics/narrowphase/narrowphase_step.js +105 -102
  87. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +29 -0
  88. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -0
  89. package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +69 -0
  90. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
  91. package/src/engine/physics/narrowphase/refine_ray_concave.js +152 -145
  92. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
  93. package/src/engine/physics/narrowphase/sphere_box_contact.js +132 -123
  94. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  95. package/src/engine/physics/queries/overlap_shape.js +16 -17
  96. package/src/engine/physics/queries/raycast.d.ts +5 -0
  97. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  98. package/src/engine/physics/queries/raycast.js +16 -8
  99. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  100. package/src/engine/physics/queries/shape_cast.js +13 -7
  101. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
  102. package/src/engine/physics/solver/solve_contacts.js +8 -11
  103. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  104. package/src/engine/physics/vehicle/RaycastVehicle.js +339 -333
  105. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +0 -13
  106. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +0 -1
  107. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +0 -399
@@ -7,6 +7,11 @@
7
7
  * composite convex shapes (no exact ray test yet) fall back to the broadphase
8
8
  * AABB hit + AABB-face normal.
9
9
  *
10
+ * **Sensors are skipped.** A ray passes straight through any body or collider
11
+ * flagged {@link is_sensor} (a trigger is not a solid surface), landing on the
12
+ * nearest solid surface behind it. This is the only behaviour — a query that
13
+ * wants to find trigger volumes uses an overlap query, not a ray.
14
+ *
10
15
  * Multi-collider bodies resolve their primary (first-attached) collider — the
11
16
  * BVH leaf encodes only `body_id`; per-collider rays need the leaf user-data to
12
17
  * carry the collider index (future work).
@@ -1 +1 @@
1
- {"version":3,"file":"raycast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/raycast.js"],"names":[],"mappings":"AA8IA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yGAJmB,MAAM,yBAAsB,OAAO,GAEzC,OAAO,CAwCnB"}
1
+ {"version":3,"file":"raycast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/raycast.js"],"names":[],"mappings":"AAiJA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,yGAJmB,MAAM,yBAAsB,OAAO,GAEzC,OAAO,CAwCnB"}
@@ -11,6 +11,7 @@ import {
11
11
  aabb3_near_distance_to_intersection_ray_segment
12
12
  } from "../../../core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js";
13
13
  import { body_id_index } from "../body/BodyStorage.js";
14
+ import { is_sensor } from "../ecs/is_sensor.js";
14
15
  import { RAY_REFINE_UNSUPPORTED, refine_ray_hit } from "../narrowphase/refine_ray_hit.js";
15
16
 
16
17
  const stack = SCRATCH_UINT32_TRAVERSAL_STACK;
@@ -110,6 +111,8 @@ function bvh_raycast_nearest(
110
111
  const idx = body_id_index(body_id);
111
112
  const collider = system.__primary_collider(idx);
112
113
  if (collider === null) continue;
114
+ // Sensors (triggers) are not solid surfaces — a ray passes through them.
115
+ if (is_sensor(system.__bodies[idx], collider)) continue;
113
116
  if (!filter(entity, collider)) continue;
114
117
 
115
118
  const tr = system.__transforms[idx];
@@ -120,14 +123,14 @@ function bvh_raycast_nearest(
120
123
 
121
124
  if (refined === RAY_REFINE_UNSUPPORTED) {
122
125
  // No exact ray test for this shape — keep the broadphase AABB hit.
123
- if (t_near < acc.best_t) {
124
- acc.best_t = t_near;
125
- acc.best_body = body_id;
126
- aabb_face_normal(best_normal,
127
- float32[address], float32[address + 1], float32[address + 2],
128
- float32[address + 3], float32[address + 4], float32[address + 5],
129
- ox + dx * t_near, oy + dy * t_near, oz + dz * t_near);
130
- }
126
+ // The line-97 `if (t_near >= acc.best_t) continue;` already guarantees
127
+ // t_near < acc.best_t here, so no further guard is needed.
128
+ acc.best_t = t_near;
129
+ acc.best_body = body_id;
130
+ aabb_face_normal(best_normal,
131
+ float32[address], float32[address + 1], float32[address + 2],
132
+ float32[address + 3], float32[address + 4], float32[address + 5],
133
+ ox + dx * t_near, oy + dy * t_near, oz + dz * t_near);
131
134
  } else if (refined < acc.best_t) { // a refined miss is Infinity → never wins
132
135
  acc.best_t = refined;
133
136
  acc.best_body = body_id;
@@ -149,6 +152,11 @@ function bvh_raycast_nearest(
149
152
  * composite convex shapes (no exact ray test yet) fall back to the broadphase
150
153
  * AABB hit + AABB-face normal.
151
154
  *
155
+ * **Sensors are skipped.** A ray passes straight through any body or collider
156
+ * flagged {@link is_sensor} (a trigger is not a solid surface), landing on the
157
+ * nearest solid surface behind it. This is the only behaviour — a query that
158
+ * wants to find trigger volumes uses an overlap query, not a ray.
159
+ *
152
160
  * Multi-collider bodies resolve their primary (first-attached) collider — the
153
161
  * BVH leaf encodes only `body_id`; per-collider rays need the leaf user-data to
154
162
  * carry the collider index (future work).
@@ -1 +1 @@
1
- {"version":3,"file":"shape_cast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/shape_cast.js"],"names":[],"mappings":"AAwEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,+FANW;IAAC,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAA;CAAC,iDAE7B,MAAM,yBAAsB,OAAO,GAEzC,OAAO,CA2QnB"}
1
+ {"version":3,"file":"shape_cast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/shape_cast.js"],"names":[],"mappings":"AAwEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,+FANW;IAAC,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAA;CAAC,iDAE7B,MAAM,yBAAsB,OAAO,GAEzC,OAAO,CAiRnB"}
@@ -155,13 +155,19 @@ export function shape_cast(system, ray, shape, rotation, result, filter = return
155
155
  if (dz > 0) swept_aabb[5] += dz * tMax; else swept_aabb[2] += dz * tMax;
156
156
 
157
157
  // ── 2. Broadphase: gather candidates from both trees ───────────
158
- const n_static = bvh_query_user_data_overlaps_aabb(
159
- scratch_candidates, 0, system.staticBvh, swept_aabb
160
- );
161
- const n_dynamic = bvh_query_user_data_overlaps_aabb(
162
- scratch_candidates, n_static, system.dynamicBvh, swept_aabb
163
- );
164
- const n_total = n_static + n_dynamic;
158
+ // The BVH query returns the TRUE overlap count and silently drops writes past
159
+ // the buffer end. An undersized buffer would make the narrowphase loop read
160
+ // `undefined` candidates and silently MISS the true nearest hit (tunnelling on
161
+ // a long sweep through a dense scene). Grow by doubling and re-query until
162
+ // both fit (deterministic queries → converges in one resize).
163
+ let n_static, n_dynamic, n_total;
164
+ for (;;) {
165
+ n_static = bvh_query_user_data_overlaps_aabb(scratch_candidates, 0, system.staticBvh, swept_aabb);
166
+ n_dynamic = bvh_query_user_data_overlaps_aabb(scratch_candidates, n_static, system.dynamicBvh, swept_aabb);
167
+ n_total = n_static + n_dynamic;
168
+ if (n_total <= scratch_candidates.length) break;
169
+ scratch_candidates = new Uint32Array(Math.max(n_total, scratch_candidates.length * 2));
170
+ }
165
171
  if (n_total === 0) return false;
166
172
 
167
173
  // ── 3. Narrowphase: per-candidate bisection ────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"solve_contacts.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/solver/solve_contacts.js"],"names":[],"mappings":"AA8fA;;;;;;;;;;;;;GAaG;AACH,0FAHW,MAAM,GACJ,MAAM,CA8LlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,2FA0CC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uEAFW,WAAW,QA4FrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,iGAsGC;AAED;;;;;;;;GAQG;AACH,uFAFW,MAAM,QA8HhB;AAED;;;;;;;;;;;GAWG;AACH,yFAuDC;AAED;;;;;;;;;;;;;;GAcG;AACH,2FAFW,MAAM,QA2EhB;AAED;;;;;;;;;;;;;;;GAeG;AACH,oFAJW,MAAM,UACN,MAAM,cACN,MAAM,QAahB;AAnuCD;;;;;GAKG;AACH,0CAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,0CAFU,MAAM,CAEsB"}
1
+ {"version":3,"file":"solve_contacts.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/solver/solve_contacts.js"],"names":[],"mappings":"AAyfA;;;;;;;;;;;;;GAaG;AACH,0FAHW,MAAM,GACJ,MAAM,CAgMlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,2FA0CC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uEAFW,WAAW,QA4FrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,iGAsGC;AAED;;;;;;;;GAQG;AACH,uFAFW,MAAM,QA8HhB;AAED;;;;;;;;;;;GAWG;AACH,yFAuDC;AAED;;;;;;;;;;;;;;GAcG;AACH,2FAFW,MAAM,QA2EhB;AAED;;;;;;;;;;;;;;;GAeG;AACH,oFAJW,MAAM,UACN,MAAM,cACN,MAAM,QAahB;AAruCD;;;;;GAKG;AACH,0CAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,0CAFU,MAAM,CAEsB"}
@@ -19,8 +19,7 @@ import {
19
19
  SBS_STRIDE,
20
20
  } from "../body/SolverBodyState.js";
21
21
  import { CONTACT_STRIDE } from "../contact/ManifoldStore.js";
22
- import { ColliderFlags } from "../ecs/ColliderFlags.js";
23
- import { RigidBodyFlags } from "../ecs/RigidBodyFlags.js";
22
+ import { is_sensor } from "../ecs/is_sensor.js";
24
23
  import { world_inverse_inertia_apply_raw } from "../inertia/world_inverse_inertia.js";
25
24
  import { redetect_pair_geometry } from "../narrowphase/narrowphase_step.js";
26
25
  import { friction_cone_clamp } from "./friction_cone.js";
@@ -66,8 +65,8 @@ import { friction_cone_clamp } from "./friction_cone.js";
66
65
  */
67
66
 
68
67
  /**
69
- * A pair is "sensor-only" when either body OR either body's primary
70
- * collider carries the IsSensor flag. The manifold still exists (so
68
+ * A pair is "sensor-only" when either side {@link is_sensor} (the body OR its
69
+ * primary collider carries the IsSensor flag). The manifold still exists (so
71
70
  * Begin/Stay/End events fire from the manifold-diff pass) but no impulse
72
71
  * is applied.
73
72
  *
@@ -78,11 +77,7 @@ import { friction_cone_clamp } from "./friction_cone.js";
78
77
  * @returns {boolean}
79
78
  */
80
79
  function pair_is_sensor(rbA, colA, rbB, colB) {
81
- const collider_flags_union = colA.flags | colB.flags;
82
- const body_flags_union = rbA.flags | rbB.flags;
83
-
84
- return (body_flags_union & RigidBodyFlags.IsSensor) !== 0
85
- || (collider_flags_union & ColliderFlags.IsSensor) !== 0
80
+ return is_sensor(rbA, colA) || is_sensor(rbB, colB);
86
81
  }
87
82
 
88
83
  /**
@@ -524,6 +519,10 @@ function island_slot_range(system) {
524
519
  */
525
520
  export function prepare_contacts(manifolds, system, dt_sub) {
526
521
  g_contact_count = 0;
522
+ // Reset BEFORE the early returns below: on a step with awake bodies but zero
523
+ // contacts/islands, an early return must not leave a stale count from a prior
524
+ // step that redetect_concave_contacts would then act on against evicted slots.
525
+ g_concave_slot_count = 0;
527
526
 
528
527
  if (dt_sub <= 0) {
529
528
  return 0;
@@ -561,8 +560,6 @@ export function prepare_contacts(manifolds, system, dt_sub) {
561
560
  const pos_jn = scratch_pos_jn;
562
561
  const ss = system.__solver_state.data;
563
562
 
564
- g_concave_slot_count = 0;
565
-
566
563
  let c = 0;
567
564
  for (let i = 0; i < total_slots; i++) {
568
565
  const slot = slot_list[i];
@@ -1 +1 @@
1
- {"version":3,"file":"RaycastVehicle.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/vehicle/RaycastVehicle.js"],"names":[],"mappings":"AAyEA;;;;GAIG;AACH;IAGQ,8DAA8D;IAC9D,eAD8C,YAAY,CAClB;IACxC,8EAA8E;IAC9E,oBAD8D,YAAY,CACnB;IACvD,sEAAsE;IACtE,cADsD,YAAY,CAClB;IAChD,6BAA+B;IAC/B,4BAA8B;IAC9B,0BAA2B;IAC3B,2BAAkC;IAClC,eAAiB;IACjB,iBAAmB;IACnB,iBAAoB;IACpB,gBAAmB;IAGnB,mBAAsB;IACtB,yBAAiD;IACjD,oBAAoB;IACpB,gDAAgD;IAChD,cADgC,YAAY,CACL;IACvC,iDAAiD;IACjD,eADiC,YAAY,CACI;IACjD,qDAAqD;IACrD,sBAAuB;IACvB,gFAAgF;IAChF,iBAAiB;IACjB,kDAAkD;IAClD,iBAAiB;IACjB,iDAAiD;IACjD,qBAAqB;IACrB,yDAAyD;IACzD,wBAAwB;CAE/B;AAED;IACI;;;;OAIG;IACH,wFAoBC;IAnBG,sBAAoB;IACpB,uBAA8B;IAC9B,4BAAwC;IAExC,sBAAsB;IACtB,QADW,KAAK,EAAE,CACF;IAEhB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IAEtB,YAAuB;IACvB,2BAAsC;IAEtC,kDAAmF;IAGnF;;;;MAAmC;IACnC;;;;MAAmC;IAGvC;;;;;;;;;;;;;;;;;OAiBG;IACH;QAb0B,aAAa,EAA5B,MAAM,EAAE;QACQ,kBAAkB,GAAlC,MAAM,EAAE;QACQ,YAAY,GAA5B,MAAM,EAAE;QACM,oBAAoB,GAAlC,MAAM;QACQ,mBAAmB,GAAjC,MAAM;QACQ,iBAAiB,GAA/B,MAAM;QACQ,kBAAkB,GAAhC,MAAM;QACQ,MAAM,GAApB,MAAM;QACQ,QAAQ,GAAtB,MAAM;QACS,OAAO,GAAtB,OAAO;QACQ,MAAM,GAArB,OAAO;QACL,KAAK,CA0BjB;IAED,2DAA2D;IAC3D,8BAIC;IAED,2EAA2E;IAC3E,gCAAmD;IAEnD,uEAAuE;IACvE,2BAA8C;IAE9C;;;;;OAKG;IACH,WAFW,MAAM,QA6HhB;CACJ;qBA5UoB,mCAAmC;oCACpB,mCAAmC"}
1
+ {"version":3,"file":"RaycastVehicle.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/vehicle/RaycastVehicle.js"],"names":[],"mappings":"AAyEA;;;;GAIG;AACH;IAGQ,8DAA8D;IAC9D,eAD8C,YAAY,CAClB;IACxC,8EAA8E;IAC9E,oBAD8D,YAAY,CACnB;IACvD,sEAAsE;IACtE,cADsD,YAAY,CAClB;IAChD,6BAA+B;IAC/B,4BAA8B;IAC9B,0BAA2B;IAC3B,2BAAkC;IAClC,eAAiB;IACjB,iBAAmB;IACnB,iBAAoB;IACpB,gBAAmB;IAGnB,mBAAsB;IACtB,yBAAiD;IACjD,oBAAoB;IACpB,gDAAgD;IAChD,cADgC,YAAY,CACL;IACvC,iDAAiD;IACjD,eADiC,YAAY,CACI;IACjD,qDAAqD;IACrD,sBAAuB;IACvB,gFAAgF;IAChF,iBAAiB;IACjB,kDAAkD;IAClD,iBAAiB;IACjB,iDAAiD;IACjD,qBAAqB;IACrB,yDAAyD;IACzD,wBAAwB;CAE/B;AAED;IACI;;;;OAIG;IACH,wFAoBC;IAnBG,sBAAoB;IACpB,uBAA8B;IAC9B,4BAAwC;IAExC,sBAAsB;IACtB,QADW,KAAK,EAAE,CACF;IAEhB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IAEtB,YAAuB;IACvB,2BAAsC;IAEtC,kDAAmF;IAGnF;;;;MAAmC;IACnC;;;;MAAmC;IAGvC;;;;;;;;;;;;;;;;;OAiBG;IACH;QAb0B,aAAa,EAA5B,MAAM,EAAE;QACQ,kBAAkB,GAAlC,MAAM,EAAE;QACQ,YAAY,GAA5B,MAAM,EAAE;QACM,oBAAoB,GAAlC,MAAM;QACQ,mBAAmB,GAAjC,MAAM;QACQ,iBAAiB,GAA/B,MAAM;QACQ,kBAAkB,GAAhC,MAAM;QACQ,MAAM,GAApB,MAAM;QACQ,QAAQ,GAAtB,MAAM;QACS,OAAO,GAAtB,OAAO;QACQ,MAAM,GAArB,OAAO;QACL,KAAK,CA0BjB;IAED,2DAA2D;IAC3D,8BAIC;IAED,2EAA2E;IAC3E,gCAAmD;IAEnD,uEAAuE;IACvE,2BAA8C;IAE9C;;;;;OAKG;IACH,WAFW,MAAM,QAmIhB;CACJ;qBAlVoB,mCAAmC;oCACpB,mCAAmC"}