@woosh/meep-engine 2.138.19 → 2.139.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 (496) hide show
  1. package/package.json +2 -1
  2. package/src/core/collection/PairUint32Map.d.ts +100 -0
  3. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  4. package/src/core/collection/PairUint32Map.js +321 -0
  5. package/src/core/collection/Uint32Map.d.ts +119 -0
  6. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  7. package/src/core/collection/Uint32Map.js +345 -0
  8. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  9. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  10. package/src/core/collection/array/array_shuffle.js +27 -22
  11. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  12. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  13. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  14. package/src/core/collection/heap/Uint32Heap.js +1 -1
  15. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  16. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  17. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  18. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  19. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  20. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  21. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  22. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  23. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  24. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  25. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  26. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  27. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  28. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  29. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  30. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  31. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  33. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  34. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  36. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  37. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  38. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  39. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  40. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  41. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  42. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  43. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  44. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +673 -0
  45. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  46. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  47. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  48. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  49. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  50. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  51. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  52. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  53. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  54. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  55. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  56. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  57. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  58. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  59. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +365 -0
  60. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -0
  61. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  62. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +112 -0
  63. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -0
  64. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +55 -0
  66. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  67. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  69. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +22 -0
  70. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  71. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +49 -0
  72. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  73. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  74. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  75. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  76. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  77. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  78. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  79. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  80. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  81. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  82. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  83. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  84. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  85. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  86. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  87. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  88. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  89. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  90. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  91. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  92. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  93. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  94. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  95. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  96. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  97. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  98. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  99. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  100. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  101. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  102. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  103. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  104. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  105. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  106. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  108. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  109. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  111. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  112. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  113. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  114. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  115. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  116. package/src/core/graph/csr/CSRGraph.js +319 -0
  117. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  118. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  119. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  120. package/src/core/graph/metis/metis.d.ts +19 -0
  121. package/src/core/graph/metis/metis.d.ts.map +1 -1
  122. package/src/core/graph/metis/metis.js +20 -0
  123. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  124. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  125. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  126. package/src/core/graph/metis/metis_options.d.ts +17 -2
  127. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  128. package/src/core/graph/metis/metis_options.js +17 -2
  129. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  130. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  131. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  132. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  133. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  134. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  135. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  136. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  137. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  138. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  139. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  140. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  141. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  142. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  143. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  144. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  145. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  146. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  147. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  148. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  149. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  150. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  151. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  152. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  153. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  154. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  155. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  156. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  157. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  158. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  159. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  160. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  161. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  162. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  163. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  164. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  165. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  166. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  167. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  168. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  169. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  170. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  171. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  172. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  173. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  174. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  175. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  176. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  177. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  178. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  180. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  181. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  183. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  184. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  186. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  187. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  188. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  189. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  190. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  191. package/src/engine/EngineHarness.d.ts +3 -1
  192. package/src/engine/EngineHarness.d.ts.map +1 -1
  193. package/src/engine/EngineHarness.js +6 -4
  194. package/src/engine/control/first-person/DESIGN.md +30 -6
  195. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  196. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +102 -9
  197. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  198. package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
  199. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
  200. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  201. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
  202. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
  203. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  204. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
  205. package/src/engine/control/first-person/TODO.md +127 -0
  206. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  207. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  208. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  209. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  210. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  211. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  212. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  213. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  214. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  215. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  216. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  217. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  218. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  219. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  220. package/src/engine/control/first-person/abilities/Slide.js +158 -0
  221. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  222. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  223. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  224. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  225. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  226. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  227. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  228. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  229. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  230. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  231. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  232. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  233. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  234. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  235. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  236. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  237. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  238. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  239. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  240. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  241. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  242. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  243. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  244. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  245. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  246. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  247. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  248. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  249. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  250. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  251. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  252. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  253. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  254. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  255. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  256. package/src/engine/control/first-person/math/Spring.js +71 -0
  257. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  258. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  259. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  260. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  261. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  262. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  263. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  264. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  265. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  266. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  267. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  268. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  269. package/src/engine/control/first-person/prototype_first_person_controller.js +550 -119
  270. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  271. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  272. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  273. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  274. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  275. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  276. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  277. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  278. package/src/engine/control/first-person/test/buildTestPlayer.js +28 -0
  279. package/src/engine/ecs/EntityManager.d.ts +2 -2
  280. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  281. package/src/engine/ecs/EntityManager.js +13 -8
  282. package/src/engine/ecs/System.d.ts.map +1 -1
  283. package/src/engine/ecs/System.js +2 -2
  284. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  285. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  286. package/src/engine/graphics/ecs/light/Light.js +27 -0
  287. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  288. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  289. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  290. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  291. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  292. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  293. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  294. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  295. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  296. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  297. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  298. package/src/engine/physics/PLAN.md +236 -0
  299. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  300. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  301. package/src/engine/physics/body/BodyStorage.js +427 -0
  302. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  303. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  304. package/src/engine/physics/broadphase/PairList.js +97 -0
  305. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts +30 -0
  306. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
  307. package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -0
  308. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  309. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  310. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  311. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  312. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  313. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  314. package/src/engine/physics/contact/ManifoldStore.d.ts +226 -0
  315. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  316. package/src/engine/physics/contact/ManifoldStore.js +499 -0
  317. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  318. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  319. package/src/engine/physics/ecs/BodyKind.js +24 -0
  320. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  321. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  322. package/src/engine/physics/ecs/Collider.js +136 -0
  323. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  324. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  325. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  326. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  327. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  328. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  329. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  330. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  331. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  332. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  333. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  334. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  335. package/src/engine/physics/ecs/PhysicsSystem.d.ts +520 -0
  336. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  337. package/src/engine/physics/ecs/PhysicsSystem.js +1159 -0
  338. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  339. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  340. package/src/engine/physics/ecs/RigidBody.js +240 -0
  341. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  342. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  343. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  344. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  345. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  346. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  347. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  348. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  349. package/src/engine/physics/ecs/SleepState.js +12 -0
  350. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  351. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  352. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  353. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  354. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  355. package/src/engine/physics/events/diff_manifolds.js +50 -0
  356. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  357. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  358. package/src/engine/physics/fluid/FluidField.js +510 -66
  359. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  360. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  361. package/src/engine/physics/fluid/FluidSimulator.js +455 -95
  362. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  363. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  364. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  365. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  366. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  367. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  368. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  369. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  370. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  371. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  372. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  373. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  374. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  375. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  376. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  377. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  378. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  379. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  380. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  381. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  382. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  383. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  384. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  385. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  386. package/src/engine/physics/fluid/prototype.js +102 -91
  387. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  388. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  389. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  390. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  391. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  392. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  393. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  394. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  395. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  396. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  397. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  398. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  399. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  400. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  401. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  402. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  403. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  404. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  405. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  406. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  407. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  408. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  409. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  410. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  411. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  412. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  413. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  414. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  415. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  416. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  417. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts +20 -0
  418. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
  419. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
  420. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -0
  421. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  422. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +70 -0
  423. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  424. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
  425. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
  426. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  427. package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
  428. package/src/engine/physics/integration/integrate_position.d.ts +16 -0
  429. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  430. package/src/engine/physics/integration/integrate_position.js +48 -0
  431. package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
  432. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  433. package/src/engine/physics/integration/integrate_velocity.js +79 -0
  434. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  435. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  436. package/src/engine/physics/integration/quat_integrate.js +62 -0
  437. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  438. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  439. package/src/engine/physics/island/IslandBuilder.js +411 -0
  440. package/src/engine/physics/island/union_find.d.ts +51 -0
  441. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  442. package/src/engine/physics/island/union_find.js +76 -0
  443. package/src/engine/physics/narrowphase/PosedShape.d.ts +59 -0
  444. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  445. package/src/engine/physics/narrowphase/PosedShape.js +110 -0
  446. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  447. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  448. package/src/engine/physics/narrowphase/box_box_manifold.js +543 -0
  449. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  450. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  451. package/src/engine/physics/narrowphase/capsule_contacts.js +508 -0
  452. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
  453. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  454. package/src/engine/physics/narrowphase/narrowphase_step.js +382 -0
  455. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  456. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  457. package/src/engine/physics/narrowphase/sphere_box_contact.js +130 -0
  458. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  459. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  460. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  461. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  462. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  463. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  464. package/src/engine/physics/queries/raycast.d.ts +20 -0
  465. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  466. package/src/engine/physics/queries/raycast.js +249 -0
  467. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  468. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  469. package/src/engine/physics/solver/friction_cone.js +37 -0
  470. package/src/engine/physics/solver/solve_contacts.d.ts +36 -0
  471. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  472. package/src/engine/physics/solver/solve_contacts.js +598 -0
  473. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  474. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  475. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  476. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  477. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  478. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  479. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  480. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  481. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  482. package/src/engine/ecs/components/Motion.d.ts +0 -21
  483. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  484. package/src/engine/ecs/components/Motion.js +0 -27
  485. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  486. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  487. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  488. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  489. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  490. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  491. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  492. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  493. package/src/engine/physics/fluid/Fluid.js +0 -221
  494. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  495. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  496. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Compute the world-space axis-aligned bounding box of a local AABB after a
3
+ * rigid transform (position + orientation).
4
+ *
5
+ * Math: an AABB transformed by a rotation `R` is bounded by another AABB whose
6
+ * centre is `R · c_local + t` and whose half-extent along each world axis `i`
7
+ * is `Σ_j |R_ij| · half_extent_local_j`. The element-wise-abs trick avoids
8
+ * rotating all 8 corners and projecting.
9
+ *
10
+ * Output layout matches existing AABB conventions: `[x0, y0, z0, x1, y1, z1]`
11
+ * with `(x0,y0,z0)` as the min corner.
12
+ *
13
+ * @param {number[]|Float32Array|Float64Array} result
14
+ * @param {number} result_offset
15
+ * @param {number} lx0 local min x
16
+ * @param {number} ly0 local min y
17
+ * @param {number} lz0 local min z
18
+ * @param {number} lx1 local max x
19
+ * @param {number} ly1 local max y
20
+ * @param {number} lz1 local max z
21
+ * @param {number} px translation x
22
+ * @param {number} py translation y
23
+ * @param {number} pz translation z
24
+ * @param {number} qx quaternion x (unit)
25
+ * @param {number} qy quaternion y
26
+ * @param {number} qz quaternion z
27
+ * @param {number} qw quaternion w
28
+ */
29
+ export function aabb_transform_oriented(
30
+ result, result_offset,
31
+ lx0, ly0, lz0, lx1, ly1, lz1,
32
+ px, py, pz,
33
+ qx, qy, qz, qw
34
+ ) {
35
+ // local centre and half-extent
36
+ const cx = (lx0 + lx1) * 0.5;
37
+ const cy = (ly0 + ly1) * 0.5;
38
+ const cz = (lz0 + lz1) * 0.5;
39
+
40
+ const ex = (lx1 - lx0) * 0.5;
41
+ const ey = (ly1 - ly0) * 0.5;
42
+ const ez = (lz1 - lz0) * 0.5;
43
+
44
+ // Rotation matrix from unit quaternion.
45
+ const xx = qx * qx;
46
+ const yy = qy * qy;
47
+ const zz = qz * qz;
48
+ const xy = qx * qy;
49
+ const xz = qx * qz;
50
+ const yz = qy * qz;
51
+ const wx = qw * qx;
52
+ const wy = qw * qy;
53
+ const wz = qw * qz;
54
+
55
+ const r00 = 1 - 2 * (yy + zz);
56
+ const r01 = 2 * (xy - wz);
57
+ const r02 = 2 * (xz + wy);
58
+
59
+ const r10 = 2 * (xy + wz);
60
+ const r11 = 1 - 2 * (xx + zz);
61
+ const r12 = 2 * (yz - wx);
62
+
63
+ const r20 = 2 * (xz - wy);
64
+ const r21 = 2 * (yz + wx);
65
+ const r22 = 1 - 2 * (xx + yy);
66
+
67
+ // World centre = R · c + t
68
+ const wcx = r00 * cx + r01 * cy + r02 * cz + px;
69
+ const wcy = r10 * cx + r11 * cy + r12 * cz + py;
70
+ const wcz = r20 * cx + r21 * cy + r22 * cz + pz;
71
+
72
+ // World half-extent = |R| · e
73
+ const ar00 = r00 < 0 ? -r00 : r00;
74
+ const ar01 = r01 < 0 ? -r01 : r01;
75
+ const ar02 = r02 < 0 ? -r02 : r02;
76
+ const ar10 = r10 < 0 ? -r10 : r10;
77
+ const ar11 = r11 < 0 ? -r11 : r11;
78
+ const ar12 = r12 < 0 ? -r12 : r12;
79
+ const ar20 = r20 < 0 ? -r20 : r20;
80
+ const ar21 = r21 < 0 ? -r21 : r21;
81
+ const ar22 = r22 < 0 ? -r22 : r22;
82
+
83
+ const wex = ar00 * ex + ar01 * ey + ar02 * ez;
84
+ const wey = ar10 * ex + ar11 * ey + ar12 * ez;
85
+ const wez = ar20 * ex + ar21 * ey + ar22 * ez;
86
+
87
+ result[result_offset] = wcx - wex;
88
+ result[result_offset + 1] = wcy - wey;
89
+ result[result_offset + 2] = wcz - wez;
90
+ result[result_offset + 3] = wcx + wex;
91
+ result[result_offset + 4] = wcy + wey;
92
+ result[result_offset + 5] = wcz + wez;
93
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Compute the inflated world AABB of a shape under a pose, padded by both a
3
+ * constant slack and a velocity-proportional swept extent. The output is the
4
+ * thing to hand to `BVH#node_move_aabb`.
5
+ *
6
+ * @param {number[]|Float32Array|Float64Array} result
7
+ * @param {number} result_offset
8
+ * @param {AbstractShape3D} shape
9
+ * @param {Transform} transform
10
+ * @param {number} vx world linear velocity x
11
+ * @param {number} vy world linear velocity y
12
+ * @param {number} vz world linear velocity z
13
+ * @param {number} dt step size
14
+ */
15
+ export function compute_fat_world_aabb(result: number[] | Float32Array | Float64Array, result_offset: number, shape: AbstractShape3D, transform: Transform, vx: number, vy: number, vz: number, dt: number): void;
16
+ //# sourceMappingURL=compute_fat_world_aabb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute_fat_world_aabb.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/broadphase/compute_fat_world_aabb.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;GAaG;AACH,+CATW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,oDAGN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QA6BhB"}
@@ -0,0 +1,61 @@
1
+ import { aabb_transform_oriented } from "./aabb_transform_oriented.js";
2
+
3
+ const scratch_local = new Float64Array(6);
4
+
5
+ /**
6
+ * Constant inflation applied to a world AABB so a small motion doesn't churn
7
+ * the broadphase. Tuned to Box2D / Bullet conventions.
8
+ * @type {number}
9
+ */
10
+ const FAT_LINEAR = 0.05;
11
+
12
+ /**
13
+ * Per-second-of-velocity inflation. Two seconds of motion is a generous look-ahead
14
+ * — `node_move_aabb` only re-inserts when the inflated AABB no longer encloses
15
+ * the actual one, so this is a hint, not an upper bound.
16
+ * @type {number}
17
+ */
18
+ const FAT_VELOCITY_MULTIPLIER = 2;
19
+
20
+ /**
21
+ * Compute the inflated world AABB of a shape under a pose, padded by both a
22
+ * constant slack and a velocity-proportional swept extent. The output is the
23
+ * thing to hand to `BVH#node_move_aabb`.
24
+ *
25
+ * @param {number[]|Float32Array|Float64Array} result
26
+ * @param {number} result_offset
27
+ * @param {AbstractShape3D} shape
28
+ * @param {Transform} transform
29
+ * @param {number} vx world linear velocity x
30
+ * @param {number} vy world linear velocity y
31
+ * @param {number} vz world linear velocity z
32
+ * @param {number} dt step size
33
+ */
34
+ export function compute_fat_world_aabb(
35
+ result, result_offset,
36
+ shape, transform,
37
+ vx, vy, vz, dt
38
+ ) {
39
+ shape.compute_bounding_box(scratch_local);
40
+
41
+ const p = transform.position;
42
+ const q = transform.rotation;
43
+
44
+ aabb_transform_oriented(
45
+ result, result_offset,
46
+ scratch_local[0], scratch_local[1], scratch_local[2],
47
+ scratch_local[3], scratch_local[4], scratch_local[5],
48
+ p.x, p.y, p.z,
49
+ q.x, q.y, q.z, q.w
50
+ );
51
+
52
+ const speed = Math.sqrt(vx * vx + vy * vy + vz * vz);
53
+ const pad = FAT_LINEAR + FAT_VELOCITY_MULTIPLIER * speed * dt;
54
+
55
+ result[result_offset] -= pad;
56
+ result[result_offset + 1] -= pad;
57
+ result[result_offset + 2] -= pad;
58
+ result[result_offset + 3] += pad;
59
+ result[result_offset + 4] += pad;
60
+ result[result_offset + 5] += pad;
61
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Iterate every awake body, query both BVHs from each of its attached
3
+ * collider leaves, dedupe via the {@link ManifoldStore}, optionally gate
4
+ * each candidate through a user-supplied filter, and append each surviving
5
+ * body-pair to `pair_list_out`.
6
+ *
7
+ * Compound-body aware: a body with multiple colliders has multiple BVH
8
+ * leaves (one per collider). Each leaf's AABB query may turn up the same
9
+ * other-body multiple times (across the multiple leaves on either side)
10
+ * but the per-slot touched flag collapses those into one entry in the
11
+ * canonical `(min, max)` pair list — narrowphase then resolves the
12
+ * collider-cross-product internally.
13
+ *
14
+ * Determinism: pair encounter order is fully determined by the awake-list
15
+ * order × per-body collider-list order × BVH leaf traversal order. All
16
+ * three are deterministic functions of the link/unlink sequence and the
17
+ * BVH state, so two worlds with the same scene history produce identical
18
+ * pair lists.
19
+ *
20
+ * @param {BodyStorage} storage
21
+ * @param {BVH} dynamic_bvh
22
+ * @param {BVH} static_bvh
23
+ * @param {ManifoldStore} manifolds
24
+ * @param {Array<Array<{collider: Collider, transform: Transform, entity: number, bvhNode: number}>>} body_collider_lists
25
+ * @param {PairList} pair_list_out cleared and filled
26
+ * @param {((idA: number, idB: number) => boolean) | null} pair_filter optional
27
+ * gate. Returning `false` rejects the pair entirely — no manifold
28
+ * slot, no narrowphase, no contact events. Existing cached
29
+ * manifolds for a rejected pair time out naturally via the
30
+ * manifold-store grace counter.
31
+ */
32
+ export function generate_pairs(storage: BodyStorage, dynamic_bvh: BVH, static_bvh: BVH, manifolds: ManifoldStore, body_collider_lists: Array<Array<{
33
+ collider: Collider;
34
+ transform: Transform;
35
+ entity: number;
36
+ bvhNode: number;
37
+ }>>, pair_list_out: PairList, pair_filter?: (idA: number, idB: number) => boolean): void;
38
+ //# sourceMappingURL=generate_pairs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate_pairs.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/broadphase/generate_pairs.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,uIARW,MAAM,MAAM;IAAC,QAAQ,WAAW;IAAC,SAAS,YAAY;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC,+CAElF,MAAM,OAAO,MAAM,KAAK,OAAO,QAsEhD"}
@@ -0,0 +1,101 @@
1
+ import { bvh_query_user_data_overlaps_aabb } from "../../../core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js";
2
+
3
+ const scratch_aabb = new Float64Array(6);
4
+ const candidates = new Uint32Array(1024);
5
+
6
+ /**
7
+ * Iterate every awake body, query both BVHs from each of its attached
8
+ * collider leaves, dedupe via the {@link ManifoldStore}, optionally gate
9
+ * each candidate through a user-supplied filter, and append each surviving
10
+ * body-pair to `pair_list_out`.
11
+ *
12
+ * Compound-body aware: a body with multiple colliders has multiple BVH
13
+ * leaves (one per collider). Each leaf's AABB query may turn up the same
14
+ * other-body multiple times (across the multiple leaves on either side)
15
+ * but the per-slot touched flag collapses those into one entry in the
16
+ * canonical `(min, max)` pair list — narrowphase then resolves the
17
+ * collider-cross-product internally.
18
+ *
19
+ * Determinism: pair encounter order is fully determined by the awake-list
20
+ * order × per-body collider-list order × BVH leaf traversal order. All
21
+ * three are deterministic functions of the link/unlink sequence and the
22
+ * BVH state, so two worlds with the same scene history produce identical
23
+ * pair lists.
24
+ *
25
+ * @param {BodyStorage} storage
26
+ * @param {BVH} dynamic_bvh
27
+ * @param {BVH} static_bvh
28
+ * @param {ManifoldStore} manifolds
29
+ * @param {Array<Array<{collider: Collider, transform: Transform, entity: number, bvhNode: number}>>} body_collider_lists
30
+ * @param {PairList} pair_list_out cleared and filled
31
+ * @param {((idA: number, idB: number) => boolean) | null} pair_filter optional
32
+ * gate. Returning `false` rejects the pair entirely — no manifold
33
+ * slot, no narrowphase, no contact events. Existing cached
34
+ * manifolds for a rejected pair time out naturally via the
35
+ * manifold-store grace counter.
36
+ */
37
+ export function generate_pairs(
38
+ storage,
39
+ dynamic_bvh,
40
+ static_bvh,
41
+ manifolds,
42
+ body_collider_lists,
43
+ pair_list_out,
44
+ pair_filter = null
45
+ ) {
46
+ pair_list_out.clear();
47
+
48
+ const awake_count = storage.awake_count;
49
+
50
+ for (let i = 0; i < awake_count; i++) {
51
+ const body_idx = storage.awake_at(i);
52
+ const list = body_collider_lists[body_idx];
53
+ if (list === undefined || list.length === 0) continue;
54
+
55
+ const gen = storage.generation_at(body_idx);
56
+ const my_packed = (body_idx << 8) | gen;
57
+
58
+ for (let k = 0; k < list.length; k++) {
59
+ const node = list[k].bvhNode;
60
+ dynamic_bvh.node_get_aabb(node, scratch_aabb);
61
+
62
+ // Dynamic ↔ Dynamic.
63
+ let n = bvh_query_user_data_overlaps_aabb(
64
+ candidates, 0,
65
+ dynamic_bvh,
66
+ scratch_aabb
67
+ );
68
+ for (let c = 0; c < n; c++) {
69
+ const other = candidates[c];
70
+ if (other === my_packed) continue;
71
+
72
+ const idA = my_packed < other ? my_packed : other;
73
+ const idB = my_packed < other ? other : my_packed;
74
+
75
+ const existing = manifolds.find(idA, idB);
76
+ if (existing !== -1 && manifolds.is_touched(existing)) continue;
77
+ if (pair_filter !== null && !pair_filter(idA, idB)) continue;
78
+ manifolds.acquire(idA, idB);
79
+ pair_list_out.push(idA, idB);
80
+ }
81
+
82
+ // Dynamic ↔ Static.
83
+ n = bvh_query_user_data_overlaps_aabb(
84
+ candidates, 0,
85
+ static_bvh,
86
+ scratch_aabb
87
+ );
88
+ for (let c = 0; c < n; c++) {
89
+ const other = candidates[c];
90
+ const idA = my_packed < other ? my_packed : other;
91
+ const idB = my_packed < other ? other : my_packed;
92
+
93
+ const existing = manifolds.find(idA, idB);
94
+ if (existing !== -1 && manifolds.is_touched(existing)) continue;
95
+ if (pair_filter !== null && !pair_filter(idA, idB)) continue;
96
+ manifolds.acquire(idA, idB);
97
+ pair_list_out.push(idA, idB);
98
+ }
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Maximum contact points per manifold. Four is the universal industry choice
3
+ * (Bullet's btPersistentManifold, Box2D, Jolt) — enough to express stable
4
+ * face-on-face contact, small enough to fit inertia-driven solver passes.
5
+ * @type {number}
6
+ */
7
+ export const MAX_CONTACTS_PER_MANIFOLD: number;
8
+ /**
9
+ * Per-contact field stride in the data Float64Array.
10
+ *
11
+ * Layout per contact (all world-space):
12
+ * 0..2 : world_a (contact point on body A's surface)
13
+ * 3..5 : world_b (contact point on body B's surface)
14
+ * 6..8 : normal_w (from B toward A)
15
+ * 9 : depth (positive = penetration, negative = speculative gap)
16
+ * 10 : j_n (accumulated normal impulse, warm-start)
17
+ * 11 : j_t1 (accumulated tangent impulse, axis 1)
18
+ * 12 : j_t2 (accumulated tangent impulse, axis 2)
19
+ *
20
+ * Solver uses `(world_a + world_b) * 0.5` as the application point; storing
21
+ * both surface points keeps the door open for richer warm-start matching
22
+ * across frames in a follow-up slice.
23
+ *
24
+ * @type {number}
25
+ */
26
+ export const CONTACT_STRIDE: number;
27
+ /**
28
+ * Per-slot Float64 stride: room for {@link MAX_CONTACTS_PER_MANIFOLD} contacts.
29
+ * @type {number}
30
+ */
31
+ export const SLOT_DATA_STRIDE: number;
32
+ /**
33
+ * Sentinel for "no slot".
34
+ * @type {number}
35
+ */
36
+ export const MANIFOLD_SLOT_ABSENT: number;
37
+ /**
38
+ * Persistent contact-manifold cache keyed by canonical body-id pairs.
39
+ *
40
+ * Owns:
41
+ * - the SoA `Float64Array` of contact points (per-slot stride 52),
42
+ * - the small meta `Uint32Array` (bodyA, bodyB, packed flags + count),
43
+ * - a {@link PairUint32Map} from `(idA, idB)` to slot id,
44
+ * - a dense `__live_slots` array of currently-allocated slot ids,
45
+ * - a min-heap-free-stack of released slot ids so reuse is deterministic.
46
+ *
47
+ * Lifecycle per simulation step:
48
+ * 1. Broadphase calls {@link acquire} for every encountered pair, which marks
49
+ * each touched slot as "fresh this frame".
50
+ * 2. Narrowphase fills in contact points via {@link set_contact} /
51
+ * {@link clear_contacts}.
52
+ * 3. End-of-step calls {@link advance_frame} to roll touched → prev_touched
53
+ * and evict slots that have been untouched for {@link DEFAULT_GRACE}
54
+ * consecutive frames.
55
+ *
56
+ * @author Alex Goldring
57
+ * @copyright Company Named Limited (c) 2026
58
+ */
59
+ export class ManifoldStore {
60
+ /**
61
+ * @param {number} [initial_capacity] slots
62
+ */
63
+ constructor(initial_capacity?: number);
64
+ __capacity: number;
65
+ __high_water: number;
66
+ __data: Float64Array;
67
+ __meta: Uint32Array;
68
+ __pair_index: PairUint32Map;
69
+ __live_slots: Uint32Array;
70
+ __live_pos: Int32Array;
71
+ __live_count: number;
72
+ __free_heap: Uint32Array;
73
+ __free_count: number;
74
+ /**
75
+ * @returns {number} number of currently-live slots
76
+ */
77
+ get count(): number;
78
+ /**
79
+ * @returns {number} total allocated slot capacity
80
+ */
81
+ get capacity(): number;
82
+ /**
83
+ * Look up a slot by canonical pair. Caller is responsible for ordering
84
+ * `(idA, idB)` such that the same pair always hashes the same way.
85
+ *
86
+ * @param {number} idA
87
+ * @param {number} idB
88
+ * @returns {number} slot id or {@link MANIFOLD_SLOT_ABSENT}
89
+ */
90
+ find(idA: number, idB: number): number;
91
+ /**
92
+ * Acquire a slot for the pair, creating one if absent, and mark it
93
+ * "touched this frame". Returns the slot id. Calling `acquire` twice in
94
+ * the same step on the same pair is a no-op for the second call.
95
+ *
96
+ * @param {number} idA
97
+ * @param {number} idB
98
+ * @returns {number} slot id
99
+ */
100
+ acquire(idA: number, idB: number): number;
101
+ /**
102
+ * @param {number} slot
103
+ * @returns {number} body A id stored at this slot
104
+ */
105
+ bodyA(slot: number): number;
106
+ /**
107
+ * @param {number} slot
108
+ * @returns {number}
109
+ */
110
+ bodyB(slot: number): number;
111
+ /**
112
+ * @param {number} slot
113
+ * @returns {number} 0..MAX_CONTACTS_PER_MANIFOLD
114
+ */
115
+ contact_count(slot: number): number;
116
+ /**
117
+ * @param {number} slot
118
+ * @returns {boolean}
119
+ */
120
+ is_touched(slot: number): boolean;
121
+ /**
122
+ * @param {number} slot
123
+ * @returns {boolean}
124
+ */
125
+ was_touched_prev(slot: number): boolean;
126
+ /**
127
+ * Iterate the dense list of currently-live slots without going through
128
+ * the pair map. `i` ranges `[0, count)`.
129
+ * @param {number} i
130
+ * @returns {number}
131
+ */
132
+ live_at(i: number): number;
133
+ /**
134
+ * Clear the contact list for a slot (counts go to zero, warm-start
135
+ * impulses also reset). Used when narrowphase determines the pair is
136
+ * separated this frame.
137
+ * @param {number} slot
138
+ */
139
+ clear_contacts(slot: number): void;
140
+ /**
141
+ * Write a contact point into a slot. Increments contact_count if `idx`
142
+ * exceeds the current count.
143
+ *
144
+ * @param {number} slot
145
+ * @param {number} idx contact index in `[0, MAX_CONTACTS_PER_MANIFOLD)`
146
+ * @param {number} lax
147
+ * @param {number} lay
148
+ * @param {number} laz
149
+ * @param {number} lbx
150
+ * @param {number} lby
151
+ * @param {number} lbz
152
+ * @param {number} nx normal world x (B toward A)
153
+ * @param {number} ny
154
+ * @param {number} nz
155
+ * @param {number} depth
156
+ */
157
+ set_contact(slot: number, idx: number, lax: number, lay: number, laz: number, lbx: number, lby: number, lbz: number, nx: number, ny: number, nz: number, depth: number): void;
158
+ /**
159
+ * Read a contact point. Writes 10 floats: lax, lay, laz, lbx, lby, lbz, nx, ny, nz, depth.
160
+ * @param {number} slot
161
+ * @param {number} idx
162
+ * @param {number[]|Float64Array} out
163
+ * @param {number} out_offset
164
+ */
165
+ get_contact(slot: number, idx: number, out: number[] | Float64Array, out_offset: number): void;
166
+ /**
167
+ * Get the contact-normal world x component for a given contact.
168
+ * Provided for testability without exposing the raw Float64Array view.
169
+ * @param {number} slot
170
+ * @param {number} idx
171
+ * @returns {number}
172
+ */
173
+ contact_normal_x(slot: number, idx: number): number;
174
+ /** @param {number} slot @param {number} idx @returns {number} */
175
+ contact_normal_y(slot: number, idx: number): number;
176
+ /** @param {number} slot @param {number} idx @returns {number} */
177
+ contact_normal_z(slot: number, idx: number): number;
178
+ /** @param {number} slot @param {number} idx @returns {number} */
179
+ contact_depth(slot: number, idx: number): number;
180
+ /**
181
+ * Raw contact-point buffer. Hot-path solver code dereferences this
182
+ * directly via {@link slot_data_offset} + {@link CONTACT_STRIDE} to avoid
183
+ * per-field accessor overhead. Buffer identity is stable until grow.
184
+ * @returns {Float64Array}
185
+ */
186
+ get data_buffer(): Float64Array;
187
+ /**
188
+ * Word offset into {@link data_buffer} where the first contact of `slot`
189
+ * begins. Subsequent contacts within the slot are at
190
+ * `offset + c * CONTACT_STRIDE`.
191
+ * @param {number} slot
192
+ * @returns {number}
193
+ */
194
+ slot_data_offset(slot: number): number;
195
+ /**
196
+ * Advance touched flags by one frame and evict slots that have been
197
+ * untouched for {@link DEFAULT_GRACE} consecutive frames.
198
+ */
199
+ advance_frame(): void;
200
+ /**
201
+ * @private
202
+ * @returns {number} newly-allocated slot id
203
+ */
204
+ private __allocate_slot;
205
+ /**
206
+ * @private
207
+ * @param {number} slot
208
+ */
209
+ private __release_slot;
210
+ /**
211
+ * @private
212
+ */
213
+ private __grow;
214
+ /**
215
+ * @private
216
+ * @param {number} v
217
+ */
218
+ private __heap_push;
219
+ /**
220
+ * @private
221
+ * @returns {number}
222
+ */
223
+ private __heap_pop;
224
+ }
225
+ import { PairUint32Map } from "../../../core/collection/PairUint32Map.js";
226
+ //# sourceMappingURL=ManifoldStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManifoldStore.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/contact/ManifoldStore.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wCAFU,MAAM,CAE2B;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,6BAFU,MAAM,CAEiB;AAEjC;;;GAGG;AACH,+BAFU,MAAM,CAE2D;AAyB3E;;;GAGG;AACH,mCAFU,MAAM,CAEuB;AAIvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAEI;;OAEG;IACH,+BAFW,MAAM,EAqBhB;IAjBG,mBAA+C;IAC/C,qBAAqB;IAErB,qBAAkE;IAClE,oBAAiE;IAEjE,4BAA0D;IAG1D,0BAAoD;IACpD,uBAAiD;IAEjD,qBAAqB;IAGrB,yBAAmD;IACnD,qBAAqB;IAGzB;;OAEG;IACH,oBAEC;IAED;;OAEG;IACH,uBAEC;IAED;;;;;;;OAOG;IACH,UAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;;;;OAQG;IACH,aAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAwBlB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,oBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,uBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;OAKG;IACH,WAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,qBAFW,MAAM,QAQhB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,kBAbW,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,SACN,MAAM,QAqBhB;IAED;;;;;;OAMG;IACH,kBALW,MAAM,OACN,MAAM,OACN,MAAM,EAAE,GAAC,YAAY,cACrB,MAAM,QAOhB;IAED;;;;;;OAMG;IACH,uBAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAIlB;IAED,iEAAiE;IACjE,uBADY,MAAM,OAAe,MAAM,GAAgB,MAAM,CAG5D;IAED,iEAAiE;IACjE,uBADY,MAAM,OAAe,MAAM,GAAgB,MAAM,CAG5D;IAED,iEAAiE;IACjE,oBADY,MAAM,OAAe,MAAM,GAAgB,MAAM,CAG5D;IAED;;;;;OAKG;IACH,gCAEC;IAED;;;;;;OAMG;IACH,uBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,sBA6BC;IAED;;;OAGG;IACH,wBAcC;IAED;;;OAGG;IACH,uBAkBC;IAED;;OAEG;IACH,eA8BC;IAED;;;OAGG;IACH,oBAaC;IAED;;;OAGG;IACH,mBAqBC;CACJ;8BAjfqD,2CAA2C"}