@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
@@ -51,6 +51,20 @@ export class BinaryTopology {
51
51
  * l: uint32 // The list of loops around the edge points at a Loop
52
52
  * v1_disk_link: uint32[2] // Disk Cycle Pointers edge around vertex v1 and d2 does the same for v2.
53
53
  * v2_disk_link: uint32[2] // see above
54
+ *
55
+ * Disk cycle convention:
56
+ * For every vertex v with at least one incident edge, the edges incident
57
+ * to v form a doubly-linked cycle threaded through their disk_link slots.
58
+ * Each non-self-loop edge e uses exactly ONE slot in v's cycle: the v1
59
+ * slot if `vertex1(e) === v`, otherwise the v2 slot. Callers select the
60
+ * side with `is_v1 = edge_read_vertex1(e) === v`.
61
+ *
62
+ * Self-loops (vertex1(e) === vertex2(e) === v) are represented with ONE
63
+ * slot too, by convention the v1 slot. The v2_disk_link of a self-loop is
64
+ * UNSPECIFIED -- readers must not follow it, writers must not assume any
65
+ * prior value. Insertion/removal helpers must be called exactly once per
66
+ * self-loop (not once per "endpoint"), otherwise the v1 slot is scribbled
67
+ * on a second time and the cycle is corrupted.
54
68
  * @type {BinaryElementPool}
55
69
  * @private
56
70
  */
@@ -80,17 +94,52 @@ export class BinaryTopology {
80
94
  */
81
95
  __face_pool = new BinaryElementPool(UINT_32_SIZE + FLOAT_32_SIZE * 3);
82
96
 
97
+ /**
98
+ * Optional opaque per-vertex data pool. Item IDs map 1:1 with vertex IDs.
99
+ * Null until {@link create_vertex_data} is called.
100
+ * @type {BinaryElementPool|null}
101
+ * @private
102
+ */
103
+ __vertex_data_pool = null;
104
+
105
+ /**
106
+ * Optional opaque per-edge data pool. Item IDs map 1:1 with edge IDs.
107
+ * @type {BinaryElementPool|null}
108
+ * @private
109
+ */
110
+ __edge_data_pool = null;
111
+
112
+ /**
113
+ * Optional opaque per-loop data pool. Item IDs map 1:1 with loop IDs.
114
+ * @type {BinaryElementPool|null}
115
+ * @private
116
+ */
117
+ __loop_data_pool = null;
118
+
119
+ /**
120
+ * Optional opaque per-face data pool. Item IDs map 1:1 with face IDs.
121
+ * @type {BinaryElementPool|null}
122
+ * @private
123
+ */
124
+ __face_data_pool = null;
125
+
83
126
 
84
127
  /**
85
128
  * Total (approximate) size of this structure in memory, in bytes
86
129
  * @return {number}
87
130
  */
88
131
  get byteSize() {
89
- return this.__loop_pool.byteSize
132
+ let total = this.__loop_pool.byteSize
90
133
  + this.__vertex_pool.byteSize
91
134
  + this.__edge_pool.byteSize
92
- + this.__face_pool.byteSize
93
- ;
135
+ + this.__face_pool.byteSize;
136
+
137
+ if (this.__vertex_data_pool !== null) total += this.__vertex_data_pool.byteSize;
138
+ if (this.__edge_data_pool !== null) total += this.__edge_data_pool.byteSize;
139
+ if (this.__loop_data_pool !== null) total += this.__loop_data_pool.byteSize;
140
+ if (this.__face_data_pool !== null) total += this.__face_data_pool.byteSize;
141
+
142
+ return total;
94
143
  }
95
144
 
96
145
  /**
@@ -102,6 +151,11 @@ export class BinaryTopology {
102
151
  this.__vertex_pool.trim();
103
152
  this.__edge_pool.trim();
104
153
  this.__face_pool.trim();
154
+
155
+ if (this.__vertex_data_pool !== null) this.__vertex_data_pool.trim();
156
+ if (this.__edge_data_pool !== null) this.__edge_data_pool.trim();
157
+ if (this.__loop_data_pool !== null) this.__loop_data_pool.trim();
158
+ if (this.__face_data_pool !== null) this.__face_data_pool.trim();
105
159
  }
106
160
 
107
161
  /**
@@ -136,6 +190,147 @@ export class BinaryTopology {
136
190
  return this.__face_pool;
137
191
  }
138
192
 
193
+ /**
194
+ * Opaque per-vertex data. The user is responsible for encoding/decoding the bytes,
195
+ * and for keeping the pool's allocation in sync with {@link vertices} — typically
196
+ * by calling `vertex_data.allocate()` whenever a vertex is allocated.
197
+ * Slot at vertex ID X holds that vertex's data.
198
+ * @returns {BinaryElementPool|null} null when no data pool has been created
199
+ */
200
+ get vertex_data() {
201
+ return this.__vertex_data_pool;
202
+ }
203
+
204
+ /**
205
+ * Opaque per-edge data. See {@link vertex_data}.
206
+ * @returns {BinaryElementPool|null} null when no data pool has been created
207
+ */
208
+ get edge_data() {
209
+ return this.__edge_data_pool;
210
+ }
211
+
212
+ /**
213
+ * Opaque per-loop data. See {@link vertex_data}.
214
+ * @returns {BinaryElementPool|null} null when no data pool has been created
215
+ */
216
+ get loop_data() {
217
+ return this.__loop_data_pool;
218
+ }
219
+
220
+ /**
221
+ * Opaque per-face data. See {@link vertex_data}.
222
+ * @returns {BinaryElementPool|null} null when no data pool has been created
223
+ */
224
+ get face_data() {
225
+ return this.__face_data_pool;
226
+ }
227
+
228
+ /**
229
+ * Create an opaque per-vertex data pool. If vertices already exist, the pool is
230
+ * sized to match (bytes zero-initialized).
231
+ *
232
+ * After this returns, it is the caller's responsibility to keep the data pool's
233
+ * allocation in sync with {@link vertices} (call `vertex_data.allocate()` /
234
+ * `vertex_data.allocate_continuous(n)` / `vertex_data.release(id)` /
235
+ * `vertex_data.clear()` alongside the matching base pool calls).
236
+ *
237
+ * @param {number} item_size_bytes
238
+ */
239
+ create_vertex_data(item_size_bytes) {
240
+ assert.isNull(this.__vertex_data_pool, '__vertex_data_pool');
241
+ this.__vertex_data_pool = this.__create_data_pool(this.__vertex_pool, item_size_bytes);
242
+ }
243
+
244
+ /**
245
+ * Create an opaque per-edge data pool. See {@link create_vertex_data}.
246
+ * @param {number} item_size_bytes
247
+ */
248
+ create_edge_data(item_size_bytes) {
249
+ assert.isNull(this.__edge_data_pool, '__edge_data_pool');
250
+ this.__edge_data_pool = this.__create_data_pool(this.__edge_pool, item_size_bytes);
251
+ }
252
+
253
+ /**
254
+ * Create an opaque per-loop data pool. See {@link create_vertex_data}.
255
+ * @param {number} item_size_bytes
256
+ */
257
+ create_loop_data(item_size_bytes) {
258
+ assert.isNull(this.__loop_data_pool, '__loop_data_pool');
259
+ this.__loop_data_pool = this.__create_data_pool(this.__loop_pool, item_size_bytes);
260
+ }
261
+
262
+ /**
263
+ * Create an opaque per-face data pool. See {@link create_vertex_data}.
264
+ * @param {number} item_size_bytes
265
+ */
266
+ create_face_data(item_size_bytes) {
267
+ assert.isNull(this.__face_data_pool, '__face_data_pool');
268
+ this.__face_data_pool = this.__create_data_pool(this.__face_pool, item_size_bytes);
269
+ }
270
+
271
+ /**
272
+ * @returns {boolean} true if a data pool was removed, false if there was none
273
+ */
274
+ delete_vertex_data() {
275
+ if (this.__vertex_data_pool === null) {
276
+ return false;
277
+ }
278
+ this.__vertex_data_pool = null;
279
+ return true;
280
+ }
281
+
282
+ /**
283
+ * @returns {boolean} true if a data pool was removed, false if there was none
284
+ */
285
+ delete_edge_data() {
286
+ if (this.__edge_data_pool === null) {
287
+ return false;
288
+ }
289
+ this.__edge_data_pool = null;
290
+ return true;
291
+ }
292
+
293
+ /**
294
+ * @returns {boolean} true if a data pool was removed, false if there was none
295
+ */
296
+ delete_loop_data() {
297
+ if (this.__loop_data_pool === null) {
298
+ return false;
299
+ }
300
+ this.__loop_data_pool = null;
301
+ return true;
302
+ }
303
+
304
+ /**
305
+ * @returns {boolean} true if a data pool was removed, false if there was none
306
+ */
307
+ delete_face_data() {
308
+ if (this.__face_data_pool === null) {
309
+ return false;
310
+ }
311
+ this.__face_data_pool = null;
312
+ return true;
313
+ }
314
+
315
+ /**
316
+ * @param {BinaryElementPool} base
317
+ * @param {number} item_size_bytes
318
+ * @returns {BinaryElementPool}
319
+ * @private
320
+ */
321
+ __create_data_pool(base, item_size_bytes) {
322
+ const data = new BinaryElementPool(item_size_bytes);
323
+
324
+ // Size the new pool to match the related pool's current allocation.
325
+ // Bytes are zero by ArrayBuffer initialization.
326
+ const current_size = base.size;
327
+ if (current_size > 0) {
328
+ data.allocate_continuous(current_size);
329
+ }
330
+
331
+ return data;
332
+ }
333
+
139
334
 
140
335
  /**
141
336
  * Clear the topology, removed all data
@@ -145,6 +340,11 @@ export class BinaryTopology {
145
340
  this.__edge_pool.clear();
146
341
  this.__loop_pool.clear();
147
342
  this.__face_pool.clear();
343
+
344
+ this.__vertex_data_pool?.clear();
345
+ this.__edge_data_pool?.clear();
346
+ this.__loop_data_pool?.clear();
347
+ this.__face_data_pool?.clear();
148
348
  }
149
349
 
150
350
  /**
@@ -419,9 +619,54 @@ export class BinaryTopology {
419
619
  pool.data_view.setUint32(address + 6 * UINT_32_SIZE, value);
420
620
  }
421
621
 
622
+ /**
623
+ * Allocate a new vertex and, if the vertex data pool exists, ensure its
624
+ * underlying buffer has capacity for the new ID. Tracking the data pool's
625
+ * __size remains the caller's responsibility.
626
+ * @returns {number} vertex ID
627
+ */
628
+ vertex_create() {
629
+ const id = this.__vertex_pool.allocate();
630
+
631
+ this.__vertex_data_pool?.ensure_capacity(id + 1);
632
+
633
+ return id;
634
+ }
635
+
636
+ /**
637
+ * Allocate a new edge. See {@link vertex_create}.
638
+ * @returns {number} edge ID
639
+ */
640
+ edge_create() {
641
+ const id = this.__edge_pool.allocate();
642
+
643
+ this.__edge_data_pool?.ensure_capacity(id + 1);
644
+
645
+ return id;
646
+ }
647
+
648
+ /**
649
+ * Allocate a new face. See {@link vertex_create}.
650
+ * @returns {number} face ID
651
+ */
652
+ face_create() {
653
+ const id = this.__face_pool.allocate();
654
+
655
+ this.__face_data_pool?.ensure_capacity(id + 1);
656
+
657
+ return id;
658
+ }
659
+
660
+ /**
661
+ * Allocate a new loop and put it into a valid initial state.
662
+ * See {@link vertex_create} for the data pool sync semantics.
663
+ * @returns {number} loop ID
664
+ */
422
665
  loop_create() {
423
666
  const id = this.__loop_pool.allocate();
424
667
 
668
+ this.__loop_data_pool?.ensure_capacity(id + 1);
669
+
425
670
  this.loop_initialize(id);
426
671
 
427
672
  return id;
@@ -679,6 +924,34 @@ export class BinaryTopology {
679
924
  this.__edge_pool.copy(other.edges);
680
925
  this.__loop_pool.copy(other.loops);
681
926
  this.__face_pool.copy(other.faces);
927
+
928
+ if (other.vertex_data === null) {
929
+ if (this.__vertex_data_pool !== null) this.delete_vertex_data();
930
+ } else {
931
+ if (this.__vertex_data_pool === null) this.create_vertex_data(other.vertex_data.item_size);
932
+ this.__vertex_data_pool.copy(other.vertex_data);
933
+ }
934
+
935
+ if (other.edge_data === null) {
936
+ if (this.__edge_data_pool !== null) this.delete_edge_data();
937
+ } else {
938
+ if (this.__edge_data_pool === null) this.create_edge_data(other.edge_data.item_size);
939
+ this.__edge_data_pool.copy(other.edge_data);
940
+ }
941
+
942
+ if (other.loop_data === null) {
943
+ if (this.__loop_data_pool !== null) this.delete_loop_data();
944
+ } else {
945
+ if (this.__loop_data_pool === null) this.create_loop_data(other.loop_data.item_size);
946
+ this.__loop_data_pool.copy(other.loop_data);
947
+ }
948
+
949
+ if (other.face_data === null) {
950
+ if (this.__face_data_pool !== null) this.delete_face_data();
951
+ } else {
952
+ if (this.__face_data_pool === null) this.create_face_data(other.face_data.item_size);
953
+ this.__face_data_pool.copy(other.face_data);
954
+ }
682
955
  }
683
956
 
684
957
  /**
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Close every boundary hole in `mesh` by fan-tessellating each boundary loop
3
+ * around its centroid. A new Steiner vertex is added at the centroid of each
4
+ * hole; one triangle is emitted per boundary edge, connecting the edge's two
5
+ * vertices to the centroid.
6
+ *
7
+ * After this returns, no edge in the mesh is a boundary edge (every edge has
8
+ * exactly two faces on its radial cycle).
9
+ *
10
+ * Throws if any boundary vertex has more than two boundary edges (figure-8 /
11
+ * pinched boundaries). Mutates the mesh in place.
12
+ *
13
+ * @param {BinaryTopology} mesh
14
+ * @returns {number} number of boundary holes that were closed
15
+ */
16
+ export function bt_mesh_close_boundary_holes(mesh: BinaryTopology): number;
17
+ //# sourceMappingURL=bt_mesh_close_boundary_holes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bt_mesh_close_boundary_holes.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js"],"names":[],"mappings":"AA2DA;;;;;;;;;;;;;;GAcG;AACH,oEAFa,MAAM,CA8DlB"}
@@ -0,0 +1,135 @@
1
+ import { bt_mesh_walk_boundary_loops } from "../query/bt_mesh_walk_boundary_loops.js";
2
+ import { bt_mesh_face_poke } from "./face/bt_face_poke.js";
3
+ import { bt_radial_loop_add } from "./bt_radial_loop_add.js";
4
+
5
+ const scratch_coord = [0, 0, 0];
6
+
7
+ /**
8
+ * Walk a boundary cycle (returned by {@link bt_mesh_walk_boundary_loops}) and
9
+ * produce a vertex/edge sequence starting at `start_vertex` and going around
10
+ * the cycle in the direction `start_vertex` dictates.
11
+ *
12
+ * Output arrays are filled in place; both have length equal to `cycle.length`.
13
+ *
14
+ * @param {BinaryTopology} mesh
15
+ * @param {number[]} cycle
16
+ * @param {number} start_vertex must be an endpoint of one of the cycle's edges
17
+ * @param {number[]} out_vertices
18
+ * @param {number[]} out_edges
19
+ */
20
+ function order_cycle_from(mesh, cycle, start_vertex, out_vertices, out_edges) {
21
+ const n = cycle.length;
22
+
23
+ const v_to_edges = new Map();
24
+ for (let i = 0; i < n; i++) {
25
+ const e = cycle[i];
26
+ const v1 = mesh.edge_read_vertex1(e);
27
+ const v2 = mesh.edge_read_vertex2(e);
28
+ let bucket = v_to_edges.get(v1);
29
+ if (bucket === undefined) {
30
+ bucket = [];
31
+ v_to_edges.set(v1, bucket);
32
+ }
33
+ bucket.push(e);
34
+ bucket = v_to_edges.get(v2);
35
+ if (bucket === undefined) {
36
+ bucket = [];
37
+ v_to_edges.set(v2, bucket);
38
+ }
39
+ bucket.push(e);
40
+ }
41
+
42
+ let v_curr = start_vertex;
43
+ let e_prev = -1;
44
+
45
+ for (let i = 0; i < n; i++) {
46
+ out_vertices[i] = v_curr;
47
+
48
+ const edges_at_v = v_to_edges.get(v_curr);
49
+ const e_next = (edges_at_v[0] === e_prev) ? edges_at_v[1] : edges_at_v[0];
50
+
51
+ out_edges[i] = e_next;
52
+
53
+ const e_v1 = mesh.edge_read_vertex1(e_next);
54
+ const e_v2 = mesh.edge_read_vertex2(e_next);
55
+ v_curr = (e_v1 === v_curr) ? e_v2 : e_v1;
56
+ e_prev = e_next;
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Close every boundary hole in `mesh` by fan-tessellating each boundary loop
62
+ * around its centroid. A new Steiner vertex is added at the centroid of each
63
+ * hole; one triangle is emitted per boundary edge, connecting the edge's two
64
+ * vertices to the centroid.
65
+ *
66
+ * After this returns, no edge in the mesh is a boundary edge (every edge has
67
+ * exactly two faces on its radial cycle).
68
+ *
69
+ * Throws if any boundary vertex has more than two boundary edges (figure-8 /
70
+ * pinched boundaries). Mutates the mesh in place.
71
+ *
72
+ * @param {BinaryTopology} mesh
73
+ * @returns {number} number of boundary holes that were closed
74
+ */
75
+ export function bt_mesh_close_boundary_holes(mesh) {
76
+ const cycles = bt_mesh_walk_boundary_loops(mesh);
77
+
78
+ const ordered_vertices = [];
79
+ const ordered_edges = [];
80
+
81
+ for (const cycle of cycles) {
82
+ const n = cycle.length;
83
+
84
+ // Each new loop on a boundary edge must wind opposite the existing
85
+ // loop, so the shared edge ends up with consistent radial orientation.
86
+ const seed_edge = cycle[0];
87
+ const seed_loop = mesh.edge_read_loop(seed_edge);
88
+ const existing_loop_vertex = mesh.loop_read_vertex(seed_loop);
89
+ const seed_v1 = mesh.edge_read_vertex1(seed_edge);
90
+ const seed_v2 = mesh.edge_read_vertex2(seed_edge);
91
+ const start_vertex = (existing_loop_vertex === seed_v1) ? seed_v2 : seed_v1;
92
+
93
+ ordered_vertices.length = n;
94
+ ordered_edges.length = n;
95
+ order_cycle_from(mesh, cycle, start_vertex, ordered_vertices, ordered_edges);
96
+
97
+ // Compute centroid of the hole's vertices.
98
+ let cx = 0, cy = 0, cz = 0;
99
+ for (let i = 0; i < n; i++) {
100
+ mesh.vertex_read_coordinate(scratch_coord, 0, ordered_vertices[i]);
101
+ cx += scratch_coord[0];
102
+ cy += scratch_coord[1];
103
+ cz += scratch_coord[2];
104
+ }
105
+ cx /= n;
106
+ cy /= n;
107
+ cz /= n;
108
+
109
+ // Allocate a new face plus n loops, wire them into the face cycle and
110
+ // each boundary edge's radial cycle. Face normal stays zero; downstream
111
+ // tetrahedralization is position-only.
112
+ const new_face = mesh.faces.allocate();
113
+
114
+ const loops = new Array(n);
115
+ for (let i = 0; i < n; i++) {
116
+ loops[i] = mesh.loop_create();
117
+ mesh.loop_write_vertex(loops[i], ordered_vertices[i]);
118
+ mesh.loop_write_face(loops[i], new_face);
119
+ bt_radial_loop_add(mesh, loops[i], ordered_edges[i]);
120
+ }
121
+
122
+ for (let i = 0; i < n; i++) {
123
+ mesh.loop_write_next(loops[i], loops[(i + 1) % n]);
124
+ mesh.loop_write_prev(loops[i], loops[(i - 1 + n) % n]);
125
+ }
126
+
127
+ mesh.face_write_loop(new_face, loops[0]);
128
+
129
+ // Fan from centroid — adds the Steiner vertex and replaces the n-gon
130
+ // face with n triangles.
131
+ bt_mesh_face_poke(mesh, new_face, cx, cy, cz);
132
+ }
133
+
134
+ return cycles.length;
135
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Remove allocation holes from a mesh's pools.
3
+ * After compaction, every base pool's live elements occupy a contiguous
4
+ * range [0, N) and the free set is empty. All cross-references between
5
+ * pools are patched to the new IDs. Optional per-element data pools
6
+ * (vertex_data, edge_data, loop_data, face_data) are compacted in
7
+ * lockstep with their base pools.
8
+ *
9
+ * The mesh's topological meaning is preserved; only IDs may change.
10
+ *
11
+ * @param {BinaryTopology} mesh
12
+ */
13
+ export function bt_mesh_compact(mesh: BinaryTopology): void;
14
+ //# sourceMappingURL=bt_mesh_compact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bt_mesh_compact.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js"],"names":[],"mappings":"AA4EA;;;;;;;;;;;GAWG;AACH,4DAwFC"}
@@ -0,0 +1,177 @@
1
+ import { NULL_POINTER } from "../BinaryTopology.js";
2
+
3
+ /**
4
+ * Walk a pool and assign a new sequential ID to each live element.
5
+ * Free slots map to NULL_POINTER.
6
+ * @param {BinaryElementPool} pool
7
+ * @returns {Uint32Array} remap[old_id] -> new_id (or NULL_POINTER if old_id was free)
8
+ */
9
+ function build_remap(pool) {
10
+ const size = pool.size;
11
+ const remap = new Uint32Array(size);
12
+
13
+ let next_id = 0;
14
+ for (let old_id = 0; old_id < size; old_id++) {
15
+ if (pool.is_allocated(old_id)) {
16
+ remap[old_id] = next_id;
17
+ next_id++;
18
+ } else {
19
+ remap[old_id] = NULL_POINTER;
20
+ }
21
+ }
22
+
23
+ return remap;
24
+ }
25
+
26
+ /**
27
+ * Returns NULL_POINTER unchanged, otherwise looks up the remap.
28
+ * @param {Uint32Array} remap
29
+ * @param {number} ptr
30
+ * @returns {number}
31
+ */
32
+ function patch(remap, ptr) {
33
+ if (ptr === NULL_POINTER) {
34
+ return NULL_POINTER;
35
+ }
36
+ return remap[ptr];
37
+ }
38
+
39
+ /**
40
+ * Physically move live elements down so they occupy [0, live_count) contiguously.
41
+ * Uses the remap only to identify free slots (where remap[i] === NULL_POINTER).
42
+ * @param {BinaryElementPool} pool
43
+ * @param {Uint32Array} remap remap built from this pool's pre-compaction state
44
+ */
45
+ function compact_bytes(pool, remap) {
46
+ const size = remap.length;
47
+
48
+ let write = 0;
49
+ for (let read = 0; read < size; read++) {
50
+ if (remap[read] === NULL_POINTER) {
51
+ continue;
52
+ }
53
+
54
+ if (read !== write) {
55
+ pool.swap(read, write);
56
+ }
57
+
58
+ write++;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Count live slots from a remap built by {@link build_remap}.
64
+ * @param {Uint32Array} remap
65
+ * @returns {number}
66
+ */
67
+ function live_count_from_remap(remap) {
68
+ let count = 0;
69
+ for (let i = 0; i < remap.length; i++) {
70
+ if (remap[i] !== NULL_POINTER) {
71
+ count++;
72
+ }
73
+ }
74
+ return count;
75
+ }
76
+
77
+ /**
78
+ * Remove allocation holes from a mesh's pools.
79
+ * After compaction, every base pool's live elements occupy a contiguous
80
+ * range [0, N) and the free set is empty. All cross-references between
81
+ * pools are patched to the new IDs. Optional per-element data pools
82
+ * (vertex_data, edge_data, loop_data, face_data) are compacted in
83
+ * lockstep with their base pools.
84
+ *
85
+ * The mesh's topological meaning is preserved; only IDs may change.
86
+ *
87
+ * @param {BinaryTopology} mesh
88
+ */
89
+ export function bt_mesh_compact(mesh) {
90
+ const vertex_pool = mesh.vertices;
91
+ const edge_pool = mesh.edges;
92
+ const loop_pool = mesh.loops;
93
+ const face_pool = mesh.faces;
94
+
95
+ // 1. Build remap tables for all four base pools
96
+ const vertex_remap = build_remap(vertex_pool);
97
+ const edge_remap = build_remap(edge_pool);
98
+ const loop_remap = build_remap(loop_pool);
99
+ const face_remap = build_remap(face_pool);
100
+
101
+ // 2. Patch pointer fields in-place at OLD positions, live elements only.
102
+ // NULL_POINTER passes through unchanged.
103
+
104
+ // Vertices: edge_pointer -> edge
105
+ const vertex_size = vertex_remap.length;
106
+ for (let v = 0; v < vertex_size; v++) {
107
+ if (vertex_remap[v] === NULL_POINTER) continue;
108
+
109
+ mesh.vertex_write_edge(v, patch(edge_remap, mesh.vertex_read_edge(v)));
110
+ }
111
+
112
+ // Edges: v1, v2 -> vertex; l -> loop; disk pointers -> edge
113
+ const edge_size = edge_remap.length;
114
+ for (let e = 0; e < edge_size; e++) {
115
+ if (edge_remap[e] === NULL_POINTER) continue;
116
+
117
+ mesh.edge_write_vertex1(e, patch(vertex_remap, mesh.edge_read_vertex1(e)));
118
+ mesh.edge_write_vertex2(e, patch(vertex_remap, mesh.edge_read_vertex2(e)));
119
+ mesh.edge_write_loop(e, patch(loop_remap, mesh.edge_read_loop(e)));
120
+
121
+ mesh.edge_write_v1_disk_next(e, patch(edge_remap, mesh.edge_read_v1_disk_next(e)));
122
+ mesh.edge_write_v1_disk_prev(e, patch(edge_remap, mesh.edge_read_v1_disk_prev(e)));
123
+ mesh.edge_write_v2_disk_next(e, patch(edge_remap, mesh.edge_read_v2_disk_next(e)));
124
+ mesh.edge_write_v2_disk_prev(e, patch(edge_remap, mesh.edge_read_v2_disk_prev(e)));
125
+ }
126
+
127
+ // Loops: v -> vertex; e -> edge; f -> face; radial/face cycle -> loop
128
+ const loop_size = loop_remap.length;
129
+ for (let l = 0; l < loop_size; l++) {
130
+ if (loop_remap[l] === NULL_POINTER) continue;
131
+
132
+ mesh.loop_write_vertex(l, patch(vertex_remap, mesh.loop_read_vertex(l)));
133
+ mesh.loop_write_edge(l, patch(edge_remap, mesh.loop_read_edge(l)));
134
+ mesh.loop_write_face(l, patch(face_remap, mesh.loop_read_face(l)));
135
+
136
+ mesh.loop_write_radial_next(l, patch(loop_remap, mesh.loop_read_radial_next(l)));
137
+ mesh.loop_write_radial_prev(l, patch(loop_remap, mesh.loop_read_radial_prev(l)));
138
+ mesh.loop_write_next(l, patch(loop_remap, mesh.loop_read_next(l)));
139
+ mesh.loop_write_prev(l, patch(loop_remap, mesh.loop_read_prev(l)));
140
+ }
141
+
142
+ // Faces: l_first -> loop
143
+ const face_size = face_remap.length;
144
+ for (let f = 0; f < face_size; f++) {
145
+ if (face_remap[f] === NULL_POINTER) continue;
146
+
147
+ mesh.face_write_loop(f, patch(loop_remap, mesh.face_read_loop(f)));
148
+ }
149
+
150
+ // 3. Physically compact bytes. Base pools first, then any optional data
151
+ // pools using the same remaps.
152
+ compact_bytes(vertex_pool, vertex_remap);
153
+ compact_bytes(edge_pool, edge_remap);
154
+ compact_bytes(loop_pool, loop_remap);
155
+ compact_bytes(face_pool, face_remap);
156
+
157
+ if (mesh.vertex_data !== null) compact_bytes(mesh.vertex_data, vertex_remap);
158
+ if (mesh.edge_data !== null) compact_bytes(mesh.edge_data, edge_remap);
159
+ if (mesh.loop_data !== null) compact_bytes(mesh.loop_data, loop_remap);
160
+ if (mesh.face_data !== null) compact_bytes(mesh.face_data, face_remap);
161
+
162
+ // 4. Truncate sizes on every pool (base + data).
163
+ const vertex_live = live_count_from_remap(vertex_remap);
164
+ const edge_live = live_count_from_remap(edge_remap);
165
+ const loop_live = live_count_from_remap(loop_remap);
166
+ const face_live = live_count_from_remap(face_remap);
167
+
168
+ vertex_pool.truncate(vertex_live);
169
+ edge_pool.truncate(edge_live);
170
+ loop_pool.truncate(loop_live);
171
+ face_pool.truncate(face_live);
172
+
173
+ if (mesh.vertex_data !== null) mesh.vertex_data.truncate(vertex_live);
174
+ if (mesh.edge_data !== null) mesh.edge_data.truncate(edge_live);
175
+ if (mesh.loop_data !== null) mesh.loop_data.truncate(loop_live);
176
+ if (mesh.face_data !== null) mesh.face_data.truncate(face_live);
177
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"bt_mesh_face_decouple.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,sEAJW,MAAM,YACN,MAAM,QAgIhB"}
1
+ {"version":3,"file":"bt_mesh_face_decouple.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,sEAJW,MAAM,YACN,MAAM,QAgJhB"}