@woosh/meep-engine 2.138.20 → 2.140.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 (584) hide show
  1. package/package.json +1 -1
  2. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts +3 -3
  3. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts.map +1 -1
  4. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js +4 -4
  5. package/src/core/collection/PairUint32Map.d.ts +100 -0
  6. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  7. package/src/core/collection/PairUint32Map.js +321 -0
  8. package/src/core/collection/Uint32Map.d.ts +119 -0
  9. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  10. package/src/core/collection/Uint32Map.js +345 -0
  11. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  12. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  13. package/src/core/collection/array/array_shuffle.js +27 -22
  14. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  15. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  16. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  17. package/src/core/collection/heap/Uint32Heap.js +1 -1
  18. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  19. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  20. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  21. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +30 -0
  22. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -0
  23. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +93 -0
  24. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  25. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  26. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  27. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +54 -0
  28. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -0
  29. package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +69 -0
  30. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +24 -2
  31. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/AbstractShape3D.js +24 -1
  33. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  34. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  36. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  37. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  38. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  39. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +148 -0
  40. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -0
  41. package/src/core/geom/3d/shape/HeightMapShape3D.js +451 -0
  42. package/src/core/geom/3d/shape/MeshShape3D.d.ts +210 -0
  43. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -0
  44. package/src/core/geom/3d/shape/MeshShape3D.js +593 -0
  45. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  46. package/src/core/geom/3d/shape/TransformedShape3D.js +46 -2
  47. package/src/core/geom/3d/shape/Triangle3D.d.ts +95 -0
  48. package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -0
  49. package/src/core/geom/3d/shape/Triangle3D.js +318 -0
  50. package/src/core/geom/3d/shape/UnionShape3D.js +13 -0
  51. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  52. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  53. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  54. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  55. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  56. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  57. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts +30 -0
  58. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts.map +1 -0
  59. package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +64 -0
  60. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  61. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  62. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  63. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  64. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  66. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  67. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  69. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  70. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  71. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +671 -0
  72. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts +28 -0
  73. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts.map +1 -0
  74. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.js +48 -0
  75. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  76. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  77. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  78. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  79. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  80. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  81. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  82. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  83. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  84. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  85. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  86. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  87. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  88. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  89. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +387 -0
  90. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +35 -0
  91. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  92. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +140 -0
  93. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +31 -0
  94. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  95. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +97 -0
  96. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  97. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  98. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  99. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +41 -0
  100. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  101. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +124 -13
  102. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  103. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  104. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  105. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  106. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  108. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  109. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  111. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  112. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  113. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  114. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  115. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  116. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  117. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  118. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  119. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  120. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  121. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  122. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  123. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  124. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  125. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  126. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  127. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  128. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  129. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  130. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  131. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  132. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  133. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  134. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  135. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  136. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  137. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  138. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  139. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  140. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  141. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  142. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  143. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  144. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts +2 -2
  145. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts.map +1 -1
  146. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +1 -1
  147. package/src/core/geom/vec3/v3_dot_array_array.d.ts +3 -3
  148. package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +1 -1
  149. package/src/core/geom/vec3/v3_dot_array_array.js +2 -2
  150. package/src/core/geom/vec3/v3_negate_array.d.ts +3 -3
  151. package/src/core/geom/vec3/v3_negate_array.d.ts.map +1 -1
  152. package/src/core/geom/vec3/v3_negate_array.js +2 -2
  153. package/src/core/geom/vec3/v3_quat3_apply.d.ts +29 -0
  154. package/src/core/geom/vec3/v3_quat3_apply.d.ts.map +1 -0
  155. package/src/core/geom/vec3/v3_quat3_apply.js +39 -0
  156. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +30 -0
  157. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts.map +1 -0
  158. package/src/core/geom/vec3/v3_quat3_apply_inverse.js +41 -0
  159. package/src/core/geom/vec3/v3_triple_cross_product.d.ts +32 -0
  160. package/src/core/geom/vec3/v3_triple_cross_product.d.ts.map +1 -0
  161. package/src/core/geom/vec3/v3_triple_cross_product.js +45 -0
  162. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  163. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  164. package/src/core/graph/csr/CSRGraph.js +319 -0
  165. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  166. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  167. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  168. package/src/core/graph/metis/metis.d.ts +19 -0
  169. package/src/core/graph/metis/metis.d.ts.map +1 -1
  170. package/src/core/graph/metis/metis.js +20 -0
  171. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  172. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  173. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  174. package/src/core/graph/metis/metis_options.d.ts +17 -2
  175. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  176. package/src/core/graph/metis/metis_options.js +17 -2
  177. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  178. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  180. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  181. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  183. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  184. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  186. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  187. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  188. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  189. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  190. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  191. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  192. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  193. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  194. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  195. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  196. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  197. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  198. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  199. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  200. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  201. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  202. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  203. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  204. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  205. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  206. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  207. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  208. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  209. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  210. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  211. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  212. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  213. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  214. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  215. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  216. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  217. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  218. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  219. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  220. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  221. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  222. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  223. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  224. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  225. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  226. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  227. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  228. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  229. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  230. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  231. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  232. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  233. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  234. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  235. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  236. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  237. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  238. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  239. package/src/engine/EngineHarness.d.ts +3 -1
  240. package/src/engine/EngineHarness.d.ts.map +1 -1
  241. package/src/engine/EngineHarness.js +3 -0
  242. package/src/engine/control/first-person/DESIGN.md +30 -6
  243. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  244. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +115 -9
  245. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  246. package/src/engine/control/first-person/FirstPersonPlayerController.js +211 -176
  247. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +601 -8
  248. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  249. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +349 -8
  250. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +319 -23
  251. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  252. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +1789 -799
  253. package/src/engine/control/first-person/TODO.md +173 -0
  254. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  255. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  256. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  257. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  258. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  259. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  260. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  261. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  262. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  263. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  264. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  265. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  266. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  267. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  268. package/src/engine/control/first-person/abilities/Slide.js +166 -0
  269. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  270. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  271. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  272. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  273. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  274. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  275. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  276. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  277. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  278. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  279. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  280. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  281. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  282. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  283. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  284. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  285. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  286. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  287. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  288. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  289. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  290. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  291. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  292. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  293. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  294. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  295. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  296. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  297. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  298. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  299. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  300. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  301. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  302. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  303. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  304. package/src/engine/control/first-person/math/Spring.js +71 -0
  305. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  306. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  307. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  308. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  309. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  310. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  311. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  312. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  313. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  314. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  315. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  316. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  317. package/src/engine/control/first-person/prototype_first_person_controller.js +637 -120
  318. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  319. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  320. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  321. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  322. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  323. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  324. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  325. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  326. package/src/engine/control/first-person/test/buildTestPlayer.js +36 -0
  327. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  328. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  329. package/src/engine/graphics/ecs/light/Light.js +27 -0
  330. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  331. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  332. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  333. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  334. package/src/engine/graphics/geometry/CapsuleGeometry.d.ts +42 -0
  335. package/src/engine/graphics/geometry/CapsuleGeometry.d.ts.map +1 -0
  336. package/src/engine/graphics/geometry/CapsuleGeometry.js +171 -0
  337. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  338. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  339. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  340. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  341. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  342. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  343. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  344. package/src/engine/physics/BULLET_REVIEW.md +945 -0
  345. package/src/engine/physics/CANNON_REVIEW.md +1300 -0
  346. package/src/engine/physics/JOLT_REVIEW.md +913 -0
  347. package/src/engine/physics/PLAN.md +461 -0
  348. package/src/engine/physics/RAPIER_REVIEW.md +934 -0
  349. package/src/engine/physics/REVIEW_001_ACTION_PLAN.md +642 -0
  350. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  351. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  352. package/src/engine/physics/body/BodyStorage.js +427 -0
  353. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  354. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  355. package/src/engine/physics/broadphase/PairList.js +97 -0
  356. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  357. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  358. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  359. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  360. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  361. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  362. package/src/engine/physics/contact/ManifoldStore.d.ts +299 -0
  363. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  364. package/src/engine/physics/contact/ManifoldStore.js +608 -0
  365. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  366. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  367. package/src/engine/physics/ecs/BodyKind.js +24 -0
  368. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  369. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  370. package/src/engine/physics/ecs/Collider.js +136 -0
  371. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  372. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  373. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  374. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  375. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  376. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  377. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  378. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  379. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  380. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  381. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  382. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  383. package/src/engine/physics/ecs/PhysicsSystem.d.ts +628 -0
  384. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  385. package/src/engine/physics/ecs/PhysicsSystem.js +1301 -0
  386. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  387. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  388. package/src/engine/physics/ecs/RigidBody.js +240 -0
  389. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  390. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  391. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  392. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  393. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  394. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  395. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  396. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  397. package/src/engine/physics/ecs/SleepState.js +12 -0
  398. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  399. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  400. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  401. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  402. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  403. package/src/engine/physics/events/diff_manifolds.js +50 -0
  404. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  405. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  406. package/src/engine/physics/fluid/FluidField.js +510 -66
  407. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  408. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  409. package/src/engine/physics/fluid/FluidSimulator.js +456 -95
  410. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  411. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  412. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  413. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  414. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  415. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  416. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  417. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  418. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  419. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  420. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  421. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  422. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  423. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  424. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  425. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  426. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  427. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  428. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  429. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  430. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  431. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  432. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  433. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  434. package/src/engine/physics/fluid/prototype.js +102 -91
  435. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  436. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  437. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  438. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  439. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  440. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  441. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  442. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  443. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  444. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  445. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  446. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  447. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  448. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  449. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  450. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  451. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  452. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  453. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  454. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  455. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  456. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  457. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  458. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  459. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  460. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  461. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  462. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  463. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  464. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  465. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +48 -0
  466. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  467. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +92 -0
  468. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +6 -6
  469. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  470. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +76 -32
  471. package/src/engine/physics/gjk/gjk.d.ts +28 -2
  472. package/src/engine/physics/gjk/gjk.d.ts.map +1 -1
  473. package/src/engine/physics/gjk/gjk.js +421 -378
  474. package/src/engine/physics/gjk/minkowski_support.d.ts +37 -0
  475. package/src/engine/physics/gjk/minkowski_support.d.ts.map +1 -0
  476. package/src/engine/physics/gjk/minkowski_support.js +75 -0
  477. package/src/engine/physics/gjk/mpr.d.ts +56 -0
  478. package/src/engine/physics/gjk/mpr.d.ts.map +1 -0
  479. package/src/engine/physics/gjk/mpr.js +344 -0
  480. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +44 -0
  481. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  482. package/src/engine/physics/inertia/world_inverse_inertia.js +77 -0
  483. package/src/engine/physics/integration/integrate_position.d.ts +34 -0
  484. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  485. package/src/engine/physics/integration/integrate_position.js +79 -0
  486. package/src/engine/physics/integration/integrate_velocity.d.ts +55 -0
  487. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  488. package/src/engine/physics/integration/integrate_velocity.js +160 -0
  489. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  490. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  491. package/src/engine/physics/integration/quat_integrate.js +62 -0
  492. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  493. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  494. package/src/engine/physics/island/IslandBuilder.js +411 -0
  495. package/src/engine/physics/island/union_find.d.ts +51 -0
  496. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  497. package/src/engine/physics/island/union_find.js +76 -0
  498. package/src/engine/physics/narrowphase/PosedShape.d.ts +51 -0
  499. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  500. package/src/engine/physics/narrowphase/PosedShape.js +108 -0
  501. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  502. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  503. package/src/engine/physics/narrowphase/box_box_manifold.js +639 -0
  504. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +30 -0
  505. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -0
  506. package/src/engine/physics/narrowphase/box_triangle_contact.js +811 -0
  507. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  508. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  509. package/src/engine/physics/narrowphase/capsule_contacts.js +462 -0
  510. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +71 -0
  511. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -0
  512. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +375 -0
  513. package/src/engine/physics/narrowphase/compute_penetration.d.ts +91 -0
  514. package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -0
  515. package/src/engine/physics/narrowphase/compute_penetration.js +396 -0
  516. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts +35 -0
  517. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +1 -0
  518. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.js +80 -0
  519. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +31 -0
  520. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -0
  521. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +55 -0
  522. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +42 -0
  523. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -0
  524. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +204 -0
  525. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +42 -0
  526. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -0
  527. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +94 -0
  528. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +37 -0
  529. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -0
  530. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +37 -0
  531. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +17 -0
  532. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  533. package/src/engine/physics/narrowphase/narrowphase_step.js +1422 -0
  534. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  535. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  536. package/src/engine/physics/narrowphase/sphere_box_contact.js +123 -0
  537. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  538. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  539. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  540. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +48 -0
  541. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -0
  542. package/src/engine/physics/narrowphase/sphere_triangle_contact.js +143 -0
  543. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  544. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  545. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  546. package/src/engine/physics/queries/overlap_shape.d.ts +51 -0
  547. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -0
  548. package/src/engine/physics/queries/overlap_shape.js +183 -0
  549. package/src/engine/physics/queries/raycast.d.ts +20 -0
  550. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  551. package/src/engine/physics/queries/raycast.js +249 -0
  552. package/src/engine/physics/queries/shape_cast.d.ts +56 -0
  553. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -0
  554. package/src/engine/physics/queries/shape_cast.js +387 -0
  555. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  556. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  557. package/src/engine/physics/solver/friction_cone.js +37 -0
  558. package/src/engine/physics/solver/solve_contacts.d.ts +122 -0
  559. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  560. package/src/engine/physics/solver/solve_contacts.js +1016 -0
  561. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  562. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  563. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  564. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  565. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  566. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  567. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  568. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  569. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  570. package/src/engine/ecs/components/Motion.d.ts +0 -21
  571. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  572. package/src/engine/ecs/components/Motion.js +0 -27
  573. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  574. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  575. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  576. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  577. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  578. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  579. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  580. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  581. package/src/engine/physics/fluid/Fluid.js +0 -221
  582. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  583. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  584. 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 aabb3_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,27 @@
1
+ /**
2
+ * Closest-point pair on two 3D line segments. Writes parameters `s` and `t`
3
+ * (each in `[0, 1]`) into `out[0]` and `out[1]` such that:
4
+ *
5
+ * closest_point_on_S1 = P1 + s * (Q1 - P1)
6
+ * closest_point_on_S2 = P2 + t * (Q2 - P2)
7
+ *
8
+ * Source: Ericson, *Real-Time Collision Detection*, §5.1.9. Robust to
9
+ * degenerate inputs (point-like segments, parallel segments) — both
10
+ * cases fall back to the clamped point-on-line projection.
11
+ *
12
+ * @param {number[]|Float64Array} out length >= 2; receives [s, t]
13
+ * @param {number} p1x segment-A start x
14
+ * @param {number} p1y
15
+ * @param {number} p1z
16
+ * @param {number} q1x segment-A end x
17
+ * @param {number} q1y
18
+ * @param {number} q1z
19
+ * @param {number} p2x segment-B start x
20
+ * @param {number} p2y
21
+ * @param {number} p2z
22
+ * @param {number} q2x segment-B end x
23
+ * @param {number} q2y
24
+ * @param {number} q2z
25
+ */
26
+ export function line3_closest_points_segment_segment(out: number[] | Float64Array, p1x: number, p1y: number, p1z: number, q1x: number, q1y: number, q1z: number, p2x: number, p2y: number, p2z: number, q2x: number, q2y: number, q2z: number): void;
27
+ //# sourceMappingURL=line3_closest_points_segment_segment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line3_closest_points_segment_segment.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_closest_points_segment_segment.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,0DAdW,MAAM,EAAE,GAAC,YAAY,OACrB,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,QAuDhB"}
@@ -0,0 +1,88 @@
1
+ import { clamp01 } from "../../../math/clamp01.js";
2
+
3
+ /**
4
+ * Lengths-squared below this threshold are treated as "this segment is a
5
+ * point" so the algorithm degrades gracefully to point-segment closest.
6
+ * @type {number}
7
+ */
8
+ const SEGMENT_EPS = 1e-12;
9
+
10
+ /**
11
+ * Closest-point pair on two 3D line segments. Writes parameters `s` and `t`
12
+ * (each in `[0, 1]`) into `out[0]` and `out[1]` such that:
13
+ *
14
+ * closest_point_on_S1 = P1 + s * (Q1 - P1)
15
+ * closest_point_on_S2 = P2 + t * (Q2 - P2)
16
+ *
17
+ * Source: Ericson, *Real-Time Collision Detection*, §5.1.9. Robust to
18
+ * degenerate inputs (point-like segments, parallel segments) — both
19
+ * cases fall back to the clamped point-on-line projection.
20
+ *
21
+ * @param {number[]|Float64Array} out length >= 2; receives [s, t]
22
+ * @param {number} p1x segment-A start x
23
+ * @param {number} p1y
24
+ * @param {number} p1z
25
+ * @param {number} q1x segment-A end x
26
+ * @param {number} q1y
27
+ * @param {number} q1z
28
+ * @param {number} p2x segment-B start x
29
+ * @param {number} p2y
30
+ * @param {number} p2z
31
+ * @param {number} q2x segment-B end x
32
+ * @param {number} q2y
33
+ * @param {number} q2z
34
+ */
35
+ export function line3_closest_points_segment_segment(
36
+ out,
37
+ p1x, p1y, p1z, q1x, q1y, q1z,
38
+ p2x, p2y, p2z, q2x, q2y, q2z
39
+ ) {
40
+ const d1x = q1x - p1x, d1y = q1y - p1y, d1z = q1z - p1z;
41
+ const d2x = q2x - p2x, d2y = q2y - p2y, d2z = q2z - p2z;
42
+ const rx = p1x - p2x, ry = p1y - p2y, rz = p1z - p2z;
43
+
44
+ const a = d1x * d1x + d1y * d1y + d1z * d1z; // |d1|²
45
+ const e = d2x * d2x + d2y * d2y + d2z * d2z; // |d2|²
46
+ const f = d2x * rx + d2y * ry + d2z * rz; // d2·r
47
+
48
+ let s, t;
49
+
50
+ if (a <= SEGMENT_EPS && e <= SEGMENT_EPS) {
51
+ // Both degenerate to points.
52
+ s = 0; t = 0;
53
+ } else if (a <= SEGMENT_EPS) {
54
+ // S1 is a point.
55
+ s = 0;
56
+ t = clamp01(f / e);
57
+ } else {
58
+ const c = d1x * rx + d1y * ry + d1z * rz; // d1·r
59
+ if (e <= SEGMENT_EPS) {
60
+ // S2 is a point.
61
+ t = 0;
62
+ s = clamp01(-c / a);
63
+ } else {
64
+ const b = d1x * d2x + d1y * d2y + d1z * d2z; // d1·d2
65
+ const denom = a * e - b * b; // always >= 0
66
+
67
+ if (denom !== 0) {
68
+ s = clamp01((b * f - c * e) / denom);
69
+ } else {
70
+ // Segments are parallel — any s is fine; pick 0.
71
+ s = 0;
72
+ }
73
+
74
+ t = (b * s + f) / e;
75
+
76
+ if (t < 0) {
77
+ t = 0;
78
+ s = clamp01(-c / a);
79
+ } else if (t > 1) {
80
+ t = 1;
81
+ s = clamp01((b - c) / a);
82
+ }
83
+ }
84
+ }
85
+
86
+ out[0] = s;
87
+ out[1] = t;
88
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Convert a unit quaternion to a 3×3 matrix laid out as
3
+ * "rows-are-world-coords-of-the-local-axes".
4
+ *
5
+ * Writes 9 floats starting at `out[out_offset]`:
6
+ *
7
+ * row 0 (offsets 0..2) — image of body-local +X in world space
8
+ * row 1 (offsets 3..5) — image of body-local +Y in world space
9
+ * row 2 (offsets 6..8) — image of body-local +Z in world space
10
+ *
11
+ * This is the **transpose** of the standard linear-algebra rotation
12
+ * matrix `R(q)` (which is "columns-are-world-coords-of-local-axes" or
13
+ * equivalently rows-are-local-coords-of-world-axes). The layout here
14
+ * matches the existing `quat_to_axes` helpers in
15
+ * `box_box_manifold.js` / `box_triangle_contact.js` — for SAT
16
+ * projection a row dot product against a candidate axis directly
17
+ * yields "extent of the box's local axis i along that direction":
18
+ *
19
+ * project_onto(v) = out[off+0..2] · v // ← local-X extent
20
+ *
21
+ * Computing M(q) once and reusing across many vectors is cheaper
22
+ * than calling {@link v3_quat3_apply} per vector when the same
23
+ * orientation rotates ≥ 4 vectors (box-vs-box SAT projects 8
24
+ * corners; box-vs-triangle clips an incident face). For one-shot
25
+ * rotation use {@link v3_quat3_apply} directly.
26
+ *
27
+ * To rotate a world-space vector `v` into the local frame via the
28
+ * matrix form, the standard `R · v` (rotate local → world) requires
29
+ * a **column-major** read of this storage:
30
+ *
31
+ * (R · v)[i] = out[off + 0 + i] * v[0]
32
+ * + out[off + 3 + i] * v[1]
33
+ * + out[off + 6 + i] * v[2]
34
+ *
35
+ * — equivalent to {@link v3_quat3_apply}(v, q).
36
+ *
37
+ * Sign convention: `(qx, qy, qz, qw)` — `w` last, matching
38
+ * {@link Quaternion} and the rest of the `core/geom/3d/quaternion/`
39
+ * family.
40
+ *
41
+ * Formula (yields R^T of the standard linear-algebra rotation matrix):
42
+ * out[0]=1-2(yy+zz) out[1]=2(xy+wz) out[2]=2(xz-wy)
43
+ * out[3]=2(xy-wz) out[4]=1-2(xx+zz) out[5]=2(yz+wx)
44
+ * out[6]=2(xz+wy) out[7]=2(yz-wx) out[8]=1-2(xx+yy)
45
+ *
46
+ * @param {number[]|Float32Array|Float64Array} out
47
+ * @param {number} out_offset offset into `out`; receives 9 floats
48
+ * @param {number} qx unit quaternion x
49
+ * @param {number} qy
50
+ * @param {number} qz
51
+ * @param {number} qw unit quaternion w (last)
52
+ */
53
+ export function quat3_to_matrix3(out: number[] | Float32Array | Float64Array, out_offset: number, qx: number, qy: number, qz: number, qw: number): void;
54
+ //# sourceMappingURL=quat3_to_matrix3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quat3_to_matrix3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/quat3_to_matrix3.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,sCAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAkBhB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Convert a unit quaternion to a 3×3 matrix laid out as
3
+ * "rows-are-world-coords-of-the-local-axes".
4
+ *
5
+ * Writes 9 floats starting at `out[out_offset]`:
6
+ *
7
+ * row 0 (offsets 0..2) — image of body-local +X in world space
8
+ * row 1 (offsets 3..5) — image of body-local +Y in world space
9
+ * row 2 (offsets 6..8) — image of body-local +Z in world space
10
+ *
11
+ * This is the **transpose** of the standard linear-algebra rotation
12
+ * matrix `R(q)` (which is "columns-are-world-coords-of-local-axes" or
13
+ * equivalently rows-are-local-coords-of-world-axes). The layout here
14
+ * matches the existing `quat_to_axes` helpers in
15
+ * `box_box_manifold.js` / `box_triangle_contact.js` — for SAT
16
+ * projection a row dot product against a candidate axis directly
17
+ * yields "extent of the box's local axis i along that direction":
18
+ *
19
+ * project_onto(v) = out[off+0..2] · v // ← local-X extent
20
+ *
21
+ * Computing M(q) once and reusing across many vectors is cheaper
22
+ * than calling {@link v3_quat3_apply} per vector when the same
23
+ * orientation rotates ≥ 4 vectors (box-vs-box SAT projects 8
24
+ * corners; box-vs-triangle clips an incident face). For one-shot
25
+ * rotation use {@link v3_quat3_apply} directly.
26
+ *
27
+ * To rotate a world-space vector `v` into the local frame via the
28
+ * matrix form, the standard `R · v` (rotate local → world) requires
29
+ * a **column-major** read of this storage:
30
+ *
31
+ * (R · v)[i] = out[off + 0 + i] * v[0]
32
+ * + out[off + 3 + i] * v[1]
33
+ * + out[off + 6 + i] * v[2]
34
+ *
35
+ * — equivalent to {@link v3_quat3_apply}(v, q).
36
+ *
37
+ * Sign convention: `(qx, qy, qz, qw)` — `w` last, matching
38
+ * {@link Quaternion} and the rest of the `core/geom/3d/quaternion/`
39
+ * family.
40
+ *
41
+ * Formula (yields R^T of the standard linear-algebra rotation matrix):
42
+ * out[0]=1-2(yy+zz) out[1]=2(xy+wz) out[2]=2(xz-wy)
43
+ * out[3]=2(xy-wz) out[4]=1-2(xx+zz) out[5]=2(yz+wx)
44
+ * out[6]=2(xz+wy) out[7]=2(yz-wx) out[8]=1-2(xx+yy)
45
+ *
46
+ * @param {number[]|Float32Array|Float64Array} out
47
+ * @param {number} out_offset offset into `out`; receives 9 floats
48
+ * @param {number} qx unit quaternion x
49
+ * @param {number} qy
50
+ * @param {number} qz
51
+ * @param {number} qw unit quaternion w (last)
52
+ */
53
+ export function quat3_to_matrix3(out, out_offset, qx, qy, qz, qw) {
54
+ const xx = qx * qx, yy = qy * qy, zz = qz * qz;
55
+ const xy = qx * qy, xz = qx * qz, yz = qy * qz;
56
+ const wx = qw * qx, wy = qw * qy, wz = qw * qz;
57
+
58
+ out[out_offset] = 1 - 2 * (yy + zz);
59
+ out[out_offset + 1] = 2 * (xy + wz);
60
+ out[out_offset + 2] = 2 * (xz - wy);
61
+
62
+ out[out_offset + 3] = 2 * (xy - wz);
63
+ out[out_offset + 4] = 1 - 2 * (xx + zz);
64
+ out[out_offset + 5] = 2 * (yz + wx);
65
+
66
+ out[out_offset + 6] = 2 * (xz + wy);
67
+ out[out_offset + 7] = 2 * (yz - wx);
68
+ out[out_offset + 8] = 1 - 2 * (xx + yy);
69
+ }
@@ -51,14 +51,14 @@ export class AbstractShape3D {
51
51
  /**
52
52
  * Support function, given a direction vector, return point on the shape that's furthest in that direction
53
53
  * Assumes direction is a unit vector
54
- * @param {number[]|Float32Array} result
54
+ * @param {number[]|Float32Array|Float64Array} result
55
55
  * @param {number} result_offset
56
56
  * @param {number} direction_x
57
57
  * @param {number} direction_y
58
58
  * @param {number} direction_z
59
59
  * @returns {void}
60
60
  */
61
- support(result: number[] | Float32Array, result_offset: number, direction_x: number, direction_y: number, direction_z: number): void;
61
+ support(result: number[] | Float32Array | Float64Array, result_offset: number, direction_x: number, direction_y: number, direction_z: number): void;
62
62
  /**
63
63
  * @template {AbstractShape3D} T
64
64
  * @param {T} other
@@ -70,5 +70,27 @@ export class AbstractShape3D {
70
70
  * @returns {number}
71
71
  */
72
72
  hash(): number;
73
+ /**
74
+ * Whether this shape is convex.
75
+ *
76
+ * Convex shapes can be fed directly into GJK/EPA via their {@link support}
77
+ * function — the Minkowski difference of two convex sets is itself convex,
78
+ * which is the precondition GJK relies on. Non-convex shapes (heightmaps,
79
+ * arbitrary meshes, unions of convex shapes) violate that precondition: the
80
+ * support operator is still definable as `argmax (p · d)`, but feeding it to
81
+ * GJK will produce false negatives where the algorithm walks into a
82
+ * concavity and reports "no overlap" between intersecting bodies.
83
+ *
84
+ * The narrowphase reads this flag to gate Minkowski-based pair dispatch.
85
+ * When `false`, a dedicated path is required (grid traversal for heightmaps,
86
+ * per-triangle GJK for meshes, per-child decomposition for unions).
87
+ *
88
+ * Default is `true` — convex is the common case across primitives. Each
89
+ * non-convex subclass overrides this on its own prototype.
90
+ *
91
+ * @readonly
92
+ * @type {boolean}
93
+ */
94
+ readonly is_convex: boolean;
73
95
  }
74
96
  //# sourceMappingURL=AbstractShape3D.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/AbstractShape3D.js"],"names":[],"mappings":"AAAA;IACI;;;;OAIG;IACH,gCAHW,MAAM,EAAE,GACN,MAAM,CAIlB;IAED;;;;;OAKG;IACH,0CAJW,MAAM,EAAE,SACR,MAAM,EAAE,GACN,MAAM,CAIlB;IAED;;;;;OAKG;IACH,iCAJW,MAAM,EAAE,aACR,MAAM,EAAE,GACN,IAAI,CAIhB;IAED;;;;;;OAMG;IACH,sCALW,MAAM,EAAE,iBACR,MAAM,qBAEJ,IAAI,CAIhB;IAED;;;;OAIG;IACH,sBAHW,MAAM,EAAE,GACN,OAAO,CAInB;IAED;;;OAGG;IACH,qBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;OAIG;IACH,6BAHW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,GAAC,YAAY,GAClD,IAAI,CAIhB;IAED;;;;;;;;;OASG;IACH,gBAPW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,GACJ,IAAI,CAIhB;IAED;;;;OAIG;IACH,6CAFa,OAAO,CAInB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;CACJ"}
1
+ {"version":3,"file":"AbstractShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/AbstractShape3D.js"],"names":[],"mappings":"AAAA;IACI;;;;OAIG;IACH,gCAHW,MAAM,EAAE,GACN,MAAM,CAIlB;IAED;;;;;OAKG;IACH,0CAJW,MAAM,EAAE,SACR,MAAM,EAAE,GACN,MAAM,CAIlB;IAED;;;;;OAKG;IACH,iCAJW,MAAM,EAAE,aACR,MAAM,EAAE,GACN,IAAI,CAIhB;IAED;;;;;;OAMG;IACH,sCALW,MAAM,EAAE,iBACR,MAAM,qBAEJ,IAAI,CAIhB;IAED;;;;OAIG;IACH,sBAHW,MAAM,EAAE,GACN,OAAO,CAInB;IAED;;;OAGG;IACH,qBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;OAIG;IACH,6BAHW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,GAAC,YAAY,GAClD,IAAI,CAIhB;IAED;;;;;;;;;OASG;IACH,gBAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,GACJ,IAAI,CAIhB;IAED;;;;OAIG;IACH,6CAFa,OAAO,CAInB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IAGL;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,oBAFU,OAAO,CAEkB;CAvBlC"}
@@ -75,7 +75,7 @@ export class AbstractShape3D {
75
75
  /**
76
76
  * Support function, given a direction vector, return point on the shape that's furthest in that direction
77
77
  * Assumes direction is a unit vector
78
- * @param {number[]|Float32Array} result
78
+ * @param {number[]|Float32Array|Float64Array} result
79
79
  * @param {number} result_offset
80
80
  * @param {number} direction_x
81
81
  * @param {number} direction_y
@@ -103,3 +103,26 @@ export class AbstractShape3D {
103
103
  return 0;
104
104
  }
105
105
  }
106
+
107
+ /**
108
+ * Whether this shape is convex.
109
+ *
110
+ * Convex shapes can be fed directly into GJK/EPA via their {@link support}
111
+ * function — the Minkowski difference of two convex sets is itself convex,
112
+ * which is the precondition GJK relies on. Non-convex shapes (heightmaps,
113
+ * arbitrary meshes, unions of convex shapes) violate that precondition: the
114
+ * support operator is still definable as `argmax (p · d)`, but feeding it to
115
+ * GJK will produce false negatives where the algorithm walks into a
116
+ * concavity and reports "no overlap" between intersecting bodies.
117
+ *
118
+ * The narrowphase reads this flag to gate Minkowski-based pair dispatch.
119
+ * When `false`, a dedicated path is required (grid traversal for heightmaps,
120
+ * per-triangle GJK for meshes, per-child decomposition for unions).
121
+ *
122
+ * Default is `true` — convex is the common case across primitives. Each
123
+ * non-convex subclass overrides this on its own prototype.
124
+ *
125
+ * @readonly
126
+ * @type {boolean}
127
+ */
128
+ AbstractShape3D.prototype.is_convex = true;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Axis-aligned box of arbitrary half-extents, expressed in the body's local
3
+ * frame. The shape spans `[-half_extents.x, +half_extents.x]` along X and
4
+ * symmetrically on Y / Z.
5
+ *
6
+ * This is the generalisation of {@link UnitCubeShape3D} (which is fixed to
7
+ * `0.5` per axis). The physics narrowphase recognises both via the shared
8
+ * `isBoxShape3D` prototype marker and reads `half_extents.x / y / z` to feed
9
+ * the closed-form sphere-box and box-box paths.
10
+ *
11
+ * @author Alex Goldring
12
+ * @copyright Company Named Limited (c) 2026
13
+ */
14
+ export class BoxShape3D extends AbstractShape3D {
15
+ /**
16
+ * Convenience constructor.
17
+ * @param {number} hx
18
+ * @param {number} hy
19
+ * @param {number} hz
20
+ * @returns {BoxShape3D}
21
+ */
22
+ static from(hx: number, hy: number, hz: number): BoxShape3D;
23
+ /**
24
+ * Convenience constructor for boxes specified by full side lengths
25
+ * rather than half-extents.
26
+ * @param {number} width
27
+ * @param {number} height
28
+ * @param {number} depth
29
+ * @returns {BoxShape3D}
30
+ */
31
+ static from_size(width: number, height: number, depth: number): BoxShape3D;
32
+ /**
33
+ * Half-width / half-height / half-depth in the body's local frame.
34
+ * @readonly
35
+ * @type {Vector3}
36
+ */
37
+ readonly half_extents: Vector3;
38
+ compute_bounding_box(result: any): void;
39
+ nearest_point_on_surface(result: any, reference: any): void;
40
+ support(result: any, result_offset: any, direction_x: any, direction_y: any, direction_z: any): void;
41
+ signed_distance_gradient_at_point(result: any, point: any): number;
42
+ signed_distance_at_point(point: any): number;
43
+ contains_point(point: any): boolean;
44
+ sample_random_point_in_volume(result: any, result_offset: any, random: any): void;
45
+ /**
46
+ * @param {BoxShape3D} other
47
+ * @returns {boolean}
48
+ */
49
+ equals(other: BoxShape3D): boolean;
50
+ /**
51
+ * Fast type-check marker. Lets the physics narrowphase dispatch sphere-box
52
+ * and box-box pairs against arbitrary-half-extent boxes without an instanceof
53
+ * import or chain check. Read together with `shape.half_extents.x/y/z`.
54
+ * @readonly
55
+ * @type {boolean}
56
+ */
57
+ readonly isBoxShape3D: boolean;
58
+ }
59
+ import { AbstractShape3D } from "./AbstractShape3D.js";
60
+ import Vector3 from "../../Vector3.js";
61
+ //# sourceMappingURL=BoxShape3D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/BoxShape3D.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;GAYG;AACH;IAYI;;;;;;OAMG;IACH,gBALW,MAAM,MACN,MAAM,MACN,MAAM,GACJ,UAAU,CAMtB;IAED;;;;;;;OAOG;IACH,wBALW,MAAM,UACN,MAAM,SACN,MAAM,GACJ,UAAU,CAItB;IA/BG;;;;OAIG;IACH,uBAFU,OAAO,CAE6B;IAsClD,wCAIC;IAED,4DAQC;IAED,qGAKC;IAED,mEAEC;IAED,6CAaC;IAED,oCAQC;IAED,kFAOC;IAED;;;OAGG;IACH,cAHW,UAAU,GACR,OAAO,CAInB;IAWL;;;;;;OAMG;IACH,uBAFU,OAAO,CAEgB;CAThC;gCA3I+B,sBAAsB;oBATlC,kBAAkB"}
@@ -0,0 +1,158 @@
1
+ import Vector3 from "../../Vector3.js";
2
+ import { max2 } from "../../../math/max2.js";
3
+ import { max3 } from "../../../math/max3.js";
4
+ import { min2 } from "../../../math/min2.js";
5
+ import { sign_not_zero } from "../../../math/sign_not_zero.js";
6
+ import { computeHashFloat } from "../../../primitives/numbers/computeHashFloat.js";
7
+ import { randomPointInBox } from "../../random/randomPointInBox.js";
8
+ import { v3_length } from "../../vec3/v3_length.js";
9
+ import { aabb3_nearest_point_on_surface } from "../aabb/aabb3_nearest_point_on_surface.js";
10
+ import { AbstractShape3D } from "./AbstractShape3D.js";
11
+ import { compute_signed_distance_gradient_by_sampling } from "./util/compute_signed_distance_gradient_by_sampling.js";
12
+
13
+ /**
14
+ * Axis-aligned box of arbitrary half-extents, expressed in the body's local
15
+ * frame. The shape spans `[-half_extents.x, +half_extents.x]` along X and
16
+ * symmetrically on Y / Z.
17
+ *
18
+ * This is the generalisation of {@link UnitCubeShape3D} (which is fixed to
19
+ * `0.5` per axis). The physics narrowphase recognises both via the shared
20
+ * `isBoxShape3D` prototype marker and reads `half_extents.x / y / z` to feed
21
+ * the closed-form sphere-box and box-box paths.
22
+ *
23
+ * @author Alex Goldring
24
+ * @copyright Company Named Limited (c) 2026
25
+ */
26
+ export class BoxShape3D extends AbstractShape3D {
27
+ constructor() {
28
+ super();
29
+
30
+ /**
31
+ * Half-width / half-height / half-depth in the body's local frame.
32
+ * @readonly
33
+ * @type {Vector3}
34
+ */
35
+ this.half_extents = new Vector3(0.5, 0.5, 0.5);
36
+ }
37
+
38
+ /**
39
+ * Convenience constructor.
40
+ * @param {number} hx
41
+ * @param {number} hy
42
+ * @param {number} hz
43
+ * @returns {BoxShape3D}
44
+ */
45
+ static from(hx, hy, hz) {
46
+ const b = new BoxShape3D();
47
+ b.half_extents.set(hx, hy, hz);
48
+ return b;
49
+ }
50
+
51
+ /**
52
+ * Convenience constructor for boxes specified by full side lengths
53
+ * rather than half-extents.
54
+ * @param {number} width
55
+ * @param {number} height
56
+ * @param {number} depth
57
+ * @returns {BoxShape3D}
58
+ */
59
+ static from_size(width, height, depth) {
60
+ return BoxShape3D.from(width * 0.5, height * 0.5, depth * 0.5);
61
+ }
62
+
63
+ get volume() {
64
+ const h = this.half_extents;
65
+ return 8 * h.x * h.y * h.z;
66
+ }
67
+
68
+ get surface_area() {
69
+ const h = this.half_extents;
70
+ return 8 * (h.x * h.y + h.y * h.z + h.z * h.x);
71
+ }
72
+
73
+ compute_bounding_box(result) {
74
+ const h = this.half_extents;
75
+ result[0] = -h.x; result[1] = -h.y; result[2] = -h.z;
76
+ result[3] = h.x; result[4] = h.y; result[5] = h.z;
77
+ }
78
+
79
+ nearest_point_on_surface(result, reference) {
80
+ const h = this.half_extents;
81
+ aabb3_nearest_point_on_surface(
82
+ result,
83
+ -h.x, -h.y, -h.z,
84
+ h.x, h.y, h.z,
85
+ reference[0], reference[1], reference[2]
86
+ );
87
+ }
88
+
89
+ support(result, result_offset, direction_x, direction_y, direction_z) {
90
+ const h = this.half_extents;
91
+ result[result_offset] = sign_not_zero(direction_x) * h.x;
92
+ result[result_offset + 1] = sign_not_zero(direction_y) * h.y;
93
+ result[result_offset + 2] = sign_not_zero(direction_z) * h.z;
94
+ }
95
+
96
+ signed_distance_gradient_at_point(result, point) {
97
+ return compute_signed_distance_gradient_by_sampling(result, this, point);
98
+ }
99
+
100
+ signed_distance_at_point(point) {
101
+ // SDF of an axis-aligned box centred at origin. Same closed form as
102
+ // UnitCubeShape3D but parametrised by half_extents.
103
+ const h = this.half_extents;
104
+ const q_x = Math.abs(point[0]) - h.x;
105
+ const q_y = Math.abs(point[1]) - h.y;
106
+ const q_z = Math.abs(point[2]) - h.z;
107
+
108
+ return v3_length(
109
+ max2(q_x, 0),
110
+ max2(q_y, 0),
111
+ max2(q_z, 0)
112
+ ) + min2(max3(q_x, q_y, q_z), 0);
113
+ }
114
+
115
+ contains_point(point) {
116
+ const h = this.half_extents;
117
+ const x = point[0];
118
+ const y = point[1];
119
+ const z = point[2];
120
+ return x > -h.x && x < h.x
121
+ && y > -h.y && y < h.y
122
+ && z > -h.z && z < h.z;
123
+ }
124
+
125
+ sample_random_point_in_volume(result, result_offset, random) {
126
+ randomPointInBox(random, result, result_offset);
127
+ const h = this.half_extents;
128
+ // randomPointInBox samples a unit cube — rescale to our half-extents.
129
+ result[result_offset] *= h.x * 2;
130
+ result[result_offset + 1] *= h.y * 2;
131
+ result[result_offset + 2] *= h.z * 2;
132
+ }
133
+
134
+ /**
135
+ * @param {BoxShape3D} other
136
+ * @returns {boolean}
137
+ */
138
+ equals(other) {
139
+ return super.equals(other) && this.half_extents.equals(other.half_extents);
140
+ }
141
+
142
+ hash() {
143
+ const h = this.half_extents;
144
+ const a = computeHashFloat(h.x);
145
+ const b = computeHashFloat(h.y);
146
+ const c = computeHashFloat(h.z);
147
+ return ((a * 31 + b) * 31 + c) | 0;
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Fast type-check marker. Lets the physics narrowphase dispatch sphere-box
153
+ * and box-box pairs against arbitrary-half-extent boxes without an instanceof
154
+ * import or chain check. Read together with `shape.half_extents.x/y/z`.
155
+ * @readonly
156
+ * @type {boolean}
157
+ */
158
+ BoxShape3D.prototype.isBoxShape3D = true;
@@ -32,6 +32,17 @@ export class CapsuleShape3D extends AbstractShape3D {
32
32
  * @returns {boolean}
33
33
  */
34
34
  equals(other: CapsuleShape3D): boolean;
35
+ /**
36
+ * Fast type-check marker, mirroring `UnitSphereShape3D.prototype.isUnitSphereShape3D`
37
+ * and `BoxShape3D.prototype.isBoxShape3D`. Lets the physics narrowphase
38
+ * dispatch capsule-sphere / capsule-capsule / capsule-box pairs to
39
+ * closed-form helpers (capsule = Minkowski sum of segment + sphere; all
40
+ * three reduce to point-or-segment distance queries that GJK+EPA struggles
41
+ * with on a smooth surface).
42
+ * @readonly
43
+ * @type {boolean}
44
+ */
45
+ readonly isCapsuleShape3D: boolean;
35
46
  }
36
47
  import { AbstractShape3D } from "./AbstractShape3D.js";
37
48
  //# sourceMappingURL=CapsuleShape3D.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CapsuleShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/CapsuleShape3D.js"],"names":[],"mappings":"AAYA;;;;GAIG;AACH;IAiBI;;;;OAIG;IACH,oBAJW,MAAM,UACN,MAAM,GACJ,cAAc,CAa1B;IA7BG;;;OAGG;IACH,QAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,QAFU,MAAM,CAED;IAqCnB,wCAUC;IAED,6CAaC;IAED,mEAEC;IAED,oCAcC;IAED,4DA+BC;IAED,qGAUC;IAED,kFA+BC;IAED;;;OAGG;IACH,cAHW,cAAc,GACZ,OAAO,CAMnB;CAQJ;gCA1M+B,sBAAsB"}
1
+ {"version":3,"file":"CapsuleShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/CapsuleShape3D.js"],"names":[],"mappings":"AAYA;;;;GAIG;AACH;IAiBI;;;;OAIG;IACH,oBAJW,MAAM,UACN,MAAM,GACJ,cAAc,CAa1B;IA7BG;;;OAGG;IACH,QAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,QAFU,MAAM,CAED;IAqCnB,wCAUC;IAED,6CAaC;IAED,mEAEC;IAED,oCAcC;IAED,4DA+BC;IAED,qGAUC;IAED,kFA+BC;IAED;;;OAGG;IACH,cAHW,cAAc,GACZ,OAAO,CAMnB;IAUL;;;;;;;;;OASG;IACH,2BAFU,OAAO,CAEwB;CAZxC;gCA1M+B,sBAAsB"}