@woosh/meep-engine 2.138.20 → 2.139.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/package.json +1 -1
  2. package/src/core/collection/PairUint32Map.d.ts +100 -0
  3. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  4. package/src/core/collection/PairUint32Map.js +321 -0
  5. package/src/core/collection/Uint32Map.d.ts +119 -0
  6. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  7. package/src/core/collection/Uint32Map.js +345 -0
  8. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  9. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  10. package/src/core/collection/array/array_shuffle.js +27 -22
  11. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  12. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  13. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  14. package/src/core/collection/heap/Uint32Heap.js +1 -1
  15. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  16. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  17. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  18. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  19. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  20. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  21. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  22. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  23. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  24. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  25. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  26. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  27. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  28. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  29. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  30. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  31. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  33. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  34. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  36. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  37. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  38. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  39. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  40. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  41. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  42. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  43. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  44. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +673 -0
  45. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  46. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  47. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  48. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  49. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  50. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  51. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  52. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  53. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  54. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  55. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  56. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  57. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  58. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  59. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +365 -0
  60. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -0
  61. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  62. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +112 -0
  63. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -0
  64. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +55 -0
  66. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  67. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  69. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +22 -0
  70. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  71. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +49 -0
  72. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  73. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  74. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  75. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  76. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  77. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  78. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  79. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  80. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  81. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  82. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  83. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  84. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  85. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  86. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  87. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  88. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  89. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  90. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  91. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  92. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  93. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  94. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  95. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  96. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  97. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  98. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  99. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  100. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  101. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  102. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  103. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  104. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  105. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  106. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  108. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  109. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  111. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  112. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  113. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  114. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  115. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  116. package/src/core/graph/csr/CSRGraph.js +319 -0
  117. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  118. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  119. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  120. package/src/core/graph/metis/metis.d.ts +19 -0
  121. package/src/core/graph/metis/metis.d.ts.map +1 -1
  122. package/src/core/graph/metis/metis.js +20 -0
  123. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  124. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  125. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  126. package/src/core/graph/metis/metis_options.d.ts +17 -2
  127. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  128. package/src/core/graph/metis/metis_options.js +17 -2
  129. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  130. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  131. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  132. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  133. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  134. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  135. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  136. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  137. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  138. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  139. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  140. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  141. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  142. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  143. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  144. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  145. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  146. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  147. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  148. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  149. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  150. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  151. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  152. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  153. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  154. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  155. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  156. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  157. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  158. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  159. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  160. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  161. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  162. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  163. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  164. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  165. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  166. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  167. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  168. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  169. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  170. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  171. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  172. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  173. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  174. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  175. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  176. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  177. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  178. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  180. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  181. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  183. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  184. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  186. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  187. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  188. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  189. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  190. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  191. package/src/engine/EngineHarness.d.ts +3 -1
  192. package/src/engine/EngineHarness.d.ts.map +1 -1
  193. package/src/engine/EngineHarness.js +3 -0
  194. package/src/engine/control/first-person/DESIGN.md +30 -6
  195. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  196. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +102 -9
  197. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  198. package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
  199. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
  200. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  201. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
  202. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
  203. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  204. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
  205. package/src/engine/control/first-person/TODO.md +127 -0
  206. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  207. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  208. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  209. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  210. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  211. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  212. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  213. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  214. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  215. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  216. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  217. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  218. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  219. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  220. package/src/engine/control/first-person/abilities/Slide.js +158 -0
  221. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  222. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  223. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  224. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  225. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  226. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  227. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  228. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  229. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  230. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  231. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  232. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  233. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  234. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  235. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  236. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  237. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  238. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  239. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  240. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  241. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  242. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  243. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  244. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  245. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  246. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  247. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  248. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  249. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  250. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  251. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  252. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  253. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  254. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  255. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  256. package/src/engine/control/first-person/math/Spring.js +71 -0
  257. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  258. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  259. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  260. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  261. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  262. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  263. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  264. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  265. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  266. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  267. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  268. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  269. package/src/engine/control/first-person/prototype_first_person_controller.js +550 -119
  270. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  271. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  272. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  273. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  274. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  275. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  276. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  277. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  278. package/src/engine/control/first-person/test/buildTestPlayer.js +28 -0
  279. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  280. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  281. package/src/engine/graphics/ecs/light/Light.js +27 -0
  282. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  283. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  284. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  285. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  286. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  287. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  288. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  289. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  290. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  291. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  292. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  293. package/src/engine/physics/PLAN.md +236 -0
  294. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  295. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  296. package/src/engine/physics/body/BodyStorage.js +427 -0
  297. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  298. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  299. package/src/engine/physics/broadphase/PairList.js +97 -0
  300. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts +30 -0
  301. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
  302. package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -0
  303. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  304. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  305. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  306. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  307. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  308. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  309. package/src/engine/physics/contact/ManifoldStore.d.ts +226 -0
  310. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  311. package/src/engine/physics/contact/ManifoldStore.js +499 -0
  312. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  313. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  314. package/src/engine/physics/ecs/BodyKind.js +24 -0
  315. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  316. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  317. package/src/engine/physics/ecs/Collider.js +136 -0
  318. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  319. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  320. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  321. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  322. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  323. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  324. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  325. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  326. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  327. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  328. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  329. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  330. package/src/engine/physics/ecs/PhysicsSystem.d.ts +520 -0
  331. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  332. package/src/engine/physics/ecs/PhysicsSystem.js +1159 -0
  333. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  334. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  335. package/src/engine/physics/ecs/RigidBody.js +240 -0
  336. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  337. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  338. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  339. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  340. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  341. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  342. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  343. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  344. package/src/engine/physics/ecs/SleepState.js +12 -0
  345. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  346. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  347. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  348. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  349. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  350. package/src/engine/physics/events/diff_manifolds.js +50 -0
  351. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  352. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  353. package/src/engine/physics/fluid/FluidField.js +510 -66
  354. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  355. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  356. package/src/engine/physics/fluid/FluidSimulator.js +455 -95
  357. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  358. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  359. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  360. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  361. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  362. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  363. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  364. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  365. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  366. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  367. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  368. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  369. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  370. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  371. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  372. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  373. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  374. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  375. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  376. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  377. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  378. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  379. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  380. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  381. package/src/engine/physics/fluid/prototype.js +102 -91
  382. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  383. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  384. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  385. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  386. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  387. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  388. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  389. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  390. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  391. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  392. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  393. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  394. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  395. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  396. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  397. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  398. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  399. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  400. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  401. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  402. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  403. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  404. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  405. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  406. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  407. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  408. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  409. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  410. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  411. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  412. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts +20 -0
  413. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
  414. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
  415. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -0
  416. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  417. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +70 -0
  418. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  419. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
  420. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
  421. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  422. package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
  423. package/src/engine/physics/integration/integrate_position.d.ts +16 -0
  424. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  425. package/src/engine/physics/integration/integrate_position.js +48 -0
  426. package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
  427. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  428. package/src/engine/physics/integration/integrate_velocity.js +79 -0
  429. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  430. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  431. package/src/engine/physics/integration/quat_integrate.js +62 -0
  432. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  433. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  434. package/src/engine/physics/island/IslandBuilder.js +411 -0
  435. package/src/engine/physics/island/union_find.d.ts +51 -0
  436. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  437. package/src/engine/physics/island/union_find.js +76 -0
  438. package/src/engine/physics/narrowphase/PosedShape.d.ts +59 -0
  439. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  440. package/src/engine/physics/narrowphase/PosedShape.js +110 -0
  441. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  442. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  443. package/src/engine/physics/narrowphase/box_box_manifold.js +543 -0
  444. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  445. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  446. package/src/engine/physics/narrowphase/capsule_contacts.js +508 -0
  447. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
  448. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  449. package/src/engine/physics/narrowphase/narrowphase_step.js +382 -0
  450. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  451. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  452. package/src/engine/physics/narrowphase/sphere_box_contact.js +130 -0
  453. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  454. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  455. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  456. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  457. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  458. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  459. package/src/engine/physics/queries/raycast.d.ts +20 -0
  460. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  461. package/src/engine/physics/queries/raycast.js +249 -0
  462. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  463. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  464. package/src/engine/physics/solver/friction_cone.js +37 -0
  465. package/src/engine/physics/solver/solve_contacts.d.ts +36 -0
  466. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  467. package/src/engine/physics/solver/solve_contacts.js +598 -0
  468. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  469. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  470. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  471. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  472. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  473. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  474. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  475. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  476. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  477. package/src/engine/ecs/components/Motion.d.ts +0 -21
  478. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  479. package/src/engine/ecs/components/Motion.js +0 -27
  480. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  481. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  482. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  483. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  484. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  485. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  486. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  487. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  488. package/src/engine/physics/fluid/Fluid.js +0 -221
  489. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  490. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  491. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
@@ -0,0 +1,345 @@
1
+ import { assert } from "../assert.js";
2
+
3
+ const UINT32_MAX = 4294967295;
4
+
5
+ /**
6
+ * Returned by {@link Uint32Map#get} when the key is absent. Chosen so that any uint32 (0 .. UINT32_MAX) is
7
+ * unambiguously a valid value. As a JS Number this is a Smi on all V8 builds, so the return doesn't allocate.
8
+ * @type {number}
9
+ */
10
+ export const UINT32_MAP_ABSENT = -1;
11
+
12
+ /**
13
+ * 2^32 / phi, rounded to nearest integer. Multiplier for Fibonacci hashing — scatters sequential integer
14
+ * keys across the index space with one multiply and one shift.
15
+ * @type {number}
16
+ */
17
+ const FIB_HASH_MULTIPLIER = 2654435769;
18
+
19
+ /**
20
+ * @type {number}
21
+ */
22
+ const DEFAULT_CAPACITY = 16;
23
+
24
+ /**
25
+ * Smallest table we ever create. Capacity is always a power of two, so the actual minimum is 2.
26
+ * @type {number}
27
+ */
28
+ const MIN_CAPACITY = 2;
29
+
30
+ /**
31
+ * Grow when `size > capacity * 3/4`. Slater ("Optimizing Open Addressing", thenumb.at/Hashtables) puts
32
+ * the sweet-spot load factor for Robin Hood at ~0.75; past that, max probe length climbs fast even though
33
+ * mean stays low.
34
+ * @type {number}
35
+ */
36
+ const LOAD_FACTOR_NUMERATOR = 3;
37
+ const LOAD_FACTOR_SHIFT = 2; // divide by 4
38
+
39
+ /**
40
+ * Non-allocating Map<uint32, uint32> backed by a single Uint32Array.
41
+ *
42
+ * Layout: one slot occupies two consecutive words — `data[2*slot] = key + 1`, `data[2*slot + 1] = value`.
43
+ * Keys are stored offset by +1 so that 0 is unambiguously "empty slot"; this also keeps every stored value
44
+ * inside the V8 Smi range (under pointer compression, Smi is 31-bit signed = max 2^30 − 1), which means
45
+ * reading any non-empty slot does not allocate a HeapNumber. Without the shift, a sentinel of 0xFFFFFFFF
46
+ * would box on every read of an empty slot — the exact opposite of what we want.
47
+ *
48
+ * Collision resolution: Robin Hood linear probing with backward-shift deletion (Knuth Algorithm R). Hash
49
+ * is Fibonacci multiplicative (see Skarupke 2018, "Fibonacci Hashing"), indexing from the high bits of
50
+ * the product. Table capacity is always a power of two; index is computed by right-shift, not by mask of
51
+ * the low bits — the high bits of a multiplicative hash have more entropy.
52
+ *
53
+ * Allowed key range: 0 .. UINT32_MAX - 1 (because we store key + 1). Allowed value range: full uint32.
54
+ * Values are returned via {@link UINT32_MAP_ABSENT} when not found — callers check `=== -1` rather than
55
+ * `=== undefined`, which is the Map API but is allocation-incompatible with typed-array storage.
56
+ */
57
+ export class Uint32Map {
58
+
59
+ /**
60
+ *
61
+ * @param {number} [initial_capacity] minimum number of slots to reserve. Rounded up to next power of two.
62
+ */
63
+ constructor(initial_capacity = DEFAULT_CAPACITY) {
64
+ assert.isNonNegativeInteger(initial_capacity, 'initial_capacity');
65
+
66
+ let cap = MIN_CAPACITY;
67
+ while (cap < initial_capacity) {
68
+ cap <<= 1;
69
+ }
70
+
71
+ /**
72
+ * @type {number}
73
+ * @private
74
+ */
75
+ this.__capacity = cap;
76
+ /**
77
+ * @type {number}
78
+ * @private
79
+ */
80
+ this.__mask = cap - 1;
81
+ /**
82
+ * Right-shift amount that extracts log2(cap) high bits from a 32-bit hash.
83
+ * @type {number}
84
+ * @private
85
+ */
86
+ this.__shift = Math.clz32(cap - 1);
87
+ /**
88
+ * @type {number}
89
+ * @private
90
+ */
91
+ this.__grow_threshold = (cap * LOAD_FACTOR_NUMERATOR) >>> LOAD_FACTOR_SHIFT;
92
+ /**
93
+ * @type {number}
94
+ * @private
95
+ */
96
+ this.__size = 0;
97
+ /**
98
+ * Packed (key+1, value) pairs. Length is 2 * capacity. Zero-initialized so every slot starts empty.
99
+ * @type {Uint32Array}
100
+ * @private
101
+ */
102
+ this.__data = new Uint32Array(cap << 1);
103
+ }
104
+
105
+ /**
106
+ *
107
+ * @returns {number}
108
+ */
109
+ get size() {
110
+ return this.__size;
111
+ }
112
+
113
+ /**
114
+ *
115
+ * @returns {number}
116
+ */
117
+ get capacity() {
118
+ return this.__capacity;
119
+ }
120
+
121
+ /**
122
+ *
123
+ * @param {number} id
124
+ * @returns {number} value associated with `id`, or {@link UINT32_MAP_ABSENT} (-1) if not present.
125
+ */
126
+ get(id) {
127
+ const data = this.__data;
128
+ const mask = this.__mask;
129
+ const shift = this.__shift;
130
+
131
+ const key_shifted = id + 1;
132
+
133
+ let slot = Math.imul(key_shifted, FIB_HASH_MULTIPLIER) >>> shift;
134
+ let dist = 0;
135
+
136
+ while (true) {
137
+ const slot2 = slot << 1;
138
+ const k = data[slot2];
139
+
140
+ if (k === 0) {
141
+ return UINT32_MAP_ABSENT;
142
+ }
143
+ if (k === key_shifted) {
144
+ return data[slot2 + 1];
145
+ }
146
+
147
+ // Robin Hood early-exit: if our displacement exceeds the occupant's, we would have stolen this
148
+ // slot during insert — so the key cannot be further down the probe chain.
149
+ const slot_home = Math.imul(k, FIB_HASH_MULTIPLIER) >>> shift;
150
+ const slot_dist = (slot - slot_home) & mask;
151
+ if (dist > slot_dist) {
152
+ return UINT32_MAP_ABSENT;
153
+ }
154
+
155
+ slot = (slot + 1) & mask;
156
+ dist++;
157
+ }
158
+ }
159
+
160
+ /**
161
+ *
162
+ * @param {number} id
163
+ * @returns {boolean}
164
+ */
165
+ has(id) {
166
+ return this.get(id) !== UINT32_MAP_ABSENT;
167
+ }
168
+
169
+ /**
170
+ *
171
+ * @param {number} id
172
+ * @param {number} value
173
+ */
174
+ set(id, value) {
175
+ // hot path — asserts commented per codebase convention. Pre-conditions:
176
+ // id must be a non-negative integer <= UINT32_MAX - 1
177
+ // value must be a non-negative integer (full uint32 range)
178
+ // assert.isNonNegativeInteger(id, 'id');
179
+ // assert.lessThanOrEqual(id, UINT32_MAX - 1, 'id must be <= (2^32 - 2)');
180
+ // assert.isNonNegativeInteger(value, 'value');
181
+
182
+ if (this.__size >= this.__grow_threshold) {
183
+ this.__resize(this.__capacity << 1);
184
+ }
185
+
186
+ this.__insert_no_grow(id + 1, value);
187
+ }
188
+
189
+ /**
190
+ * Insert a (already key+1 shifted) entry assuming there is at least one empty slot. Performs Robin Hood
191
+ * swapping: when the new entry has been displaced further than the current occupant, swap them and
192
+ * continue placing the displaced occupant.
193
+ *
194
+ * @private
195
+ * @param {number} key_shifted
196
+ * @param {number} value
197
+ */
198
+ __insert_no_grow(key_shifted, value) {
199
+ const data = this.__data;
200
+ const mask = this.__mask;
201
+ const shift = this.__shift;
202
+
203
+ let ks = key_shifted;
204
+ let v = value;
205
+ let slot = Math.imul(ks, FIB_HASH_MULTIPLIER) >>> shift;
206
+ let dist = 0;
207
+
208
+ while (true) {
209
+ const slot2 = slot << 1;
210
+ const k = data[slot2];
211
+
212
+ if (k === 0) {
213
+ data[slot2] = ks;
214
+ data[slot2 + 1] = v;
215
+ this.__size++;
216
+ return;
217
+ }
218
+
219
+ if (k === ks) {
220
+ // existing entry — overwrite value, do not change size
221
+ data[slot2 + 1] = v;
222
+ return;
223
+ }
224
+
225
+ const slot_home = Math.imul(k, FIB_HASH_MULTIPLIER) >>> shift;
226
+ const slot_dist = (slot - slot_home) & mask;
227
+
228
+ if (slot_dist < dist) {
229
+ // steal: occupant is closer to home than the entry we are carrying. Swap.
230
+ const tmp_k = k;
231
+ const tmp_v = data[slot2 + 1];
232
+ data[slot2] = ks;
233
+ data[slot2 + 1] = v;
234
+ ks = tmp_k;
235
+ v = tmp_v;
236
+ dist = slot_dist;
237
+ }
238
+
239
+ slot = (slot + 1) & mask;
240
+ dist++;
241
+ }
242
+ }
243
+
244
+ /**
245
+ *
246
+ * @param {number} id
247
+ * @returns {boolean} true if the entry existed and was removed.
248
+ */
249
+ delete(id) {
250
+ const data = this.__data;
251
+ const mask = this.__mask;
252
+ const shift = this.__shift;
253
+
254
+ const key_shifted = id + 1;
255
+
256
+ let slot = Math.imul(key_shifted, FIB_HASH_MULTIPLIER) >>> shift;
257
+ let dist = 0;
258
+
259
+ // locate the slot, applying the same Robin Hood early-exit as `get`
260
+ while (true) {
261
+ const slot2 = slot << 1;
262
+ const k = data[slot2];
263
+
264
+ if (k === 0) {
265
+ return false;
266
+ }
267
+ if (k === key_shifted) {
268
+ break;
269
+ }
270
+
271
+ const slot_home = Math.imul(k, FIB_HASH_MULTIPLIER) >>> shift;
272
+ const slot_dist = (slot - slot_home) & mask;
273
+ if (dist > slot_dist) {
274
+ return false;
275
+ }
276
+
277
+ slot = (slot + 1) & mask;
278
+ dist++;
279
+ }
280
+
281
+ // backward-shift deletion: walk forward, pulling each displaced successor into the freed slot,
282
+ // until we hit an empty slot or an occupant already at its home.
283
+ while (true) {
284
+ const next = (slot + 1) & mask;
285
+ const next2 = next << 1;
286
+ const next_k = data[next2];
287
+
288
+ if (next_k === 0) {
289
+ break;
290
+ }
291
+
292
+ const next_home = Math.imul(next_k, FIB_HASH_MULTIPLIER) >>> shift;
293
+ const next_dist = (next - next_home) & mask;
294
+ if (next_dist === 0) {
295
+ // successor is at its home — moving it back would break its lookup
296
+ break;
297
+ }
298
+
299
+ const slot2 = slot << 1;
300
+ data[slot2] = next_k;
301
+ data[slot2 + 1] = data[next2 + 1];
302
+ slot = next;
303
+ }
304
+
305
+ // clear the final emptied slot
306
+ data[slot << 1] = 0;
307
+
308
+ this.__size--;
309
+ return true;
310
+ }
311
+
312
+ /**
313
+ * Remove all entries. Capacity is unchanged.
314
+ */
315
+ clear() {
316
+ this.__data.fill(0);
317
+ this.__size = 0;
318
+ }
319
+
320
+ /**
321
+ * Grow the table and rehash every entry.
322
+ *
323
+ * @private
324
+ * @param {number} new_capacity power of two
325
+ */
326
+ __resize(new_capacity) {
327
+ const old_data = this.__data;
328
+ const old_capacity = this.__capacity;
329
+
330
+ this.__capacity = new_capacity;
331
+ this.__mask = new_capacity - 1;
332
+ this.__shift = Math.clz32(new_capacity - 1);
333
+ this.__grow_threshold = (new_capacity * LOAD_FACTOR_NUMERATOR) >>> LOAD_FACTOR_SHIFT;
334
+ this.__data = new Uint32Array(new_capacity << 1);
335
+ this.__size = 0;
336
+
337
+ for (let i = 0; i < old_capacity; i++) {
338
+ const i2 = i << 1;
339
+ const k = old_data[i2];
340
+ if (k !== 0) {
341
+ this.__insert_no_grow(k, old_data[i2 + 1]);
342
+ }
343
+ }
344
+ }
345
+ }
@@ -1,8 +1,15 @@
1
1
  /**
2
- * Randomly re-orders items in-place
2
+ * Randomly re-orders items in-place using Fisher–Yates.
3
+ *
4
+ * Pass `length` when shuffling a prefix of a larger buffer (e.g. a scratch
5
+ * typed array sized for a worst-case but containing only a smaller active
6
+ * range). Elements beyond `length` are untouched. Default is `array.length`,
7
+ * which gives the natural "shuffle the whole thing" behaviour.
8
+ *
3
9
  * @template T
4
10
  * @param {function():number} random random number generator; can use Math.random. Must return a value between 0 and 1
5
- * @param {T[]} array what to shuffle
11
+ * @param {T[]|TypedArray} array what to shuffle (mutated in place)
12
+ * @param {number} [length] how many leading entries of `array` to shuffle; defaults to `array.length`
6
13
  */
7
- export function array_shuffle<T>(random: () => number, array: T[]): void;
14
+ export function array_shuffle<T>(random: () => number, array: any, length?: number): void;
8
15
  //# sourceMappingURL=array_shuffle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"array_shuffle.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_shuffle.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,+CAHsB,MAAM,oBAe3B"}
1
+ {"version":3,"file":"array_shuffle.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_shuffle.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,+CAJsB,MAAM,uBAEjB,MAAM,QAYhB"}
@@ -1,22 +1,27 @@
1
- import { randomIntegerBetween } from "../../math/random/randomIntegerBetween.js";
2
- import { array_swap_one } from "./array_swap_one.js";
3
-
4
- /**
5
- * Randomly re-orders items in-place
6
- * @template T
7
- * @param {function():number} random random number generator; can use Math.random. Must return a value between 0 and 1
8
- * @param {T[]} array what to shuffle
9
- */
10
- export function array_shuffle(random, array) {
11
- const n = array.length;
12
-
13
- for (let source_index = 0; source_index < n; ++source_index) {
14
- const target_index = randomIntegerBetween(random, 0, n - (source_index + 1));
15
-
16
- if (target_index === source_index) {
17
- continue;
18
- }
19
-
20
- array_swap_one(array, source_index, target_index);
21
- }
22
- }
1
+ import { randomIntegerBetween } from "../../math/random/randomIntegerBetween.js";
2
+ import { array_swap_one } from "./array_swap_one.js";
3
+
4
+ /**
5
+ * Randomly re-orders items in-place using Fisher–Yates.
6
+ *
7
+ * Pass `length` when shuffling a prefix of a larger buffer (e.g. a scratch
8
+ * typed array sized for a worst-case but containing only a smaller active
9
+ * range). Elements beyond `length` are untouched. Default is `array.length`,
10
+ * which gives the natural "shuffle the whole thing" behaviour.
11
+ *
12
+ * @template T
13
+ * @param {function():number} random random number generator; can use Math.random. Must return a value between 0 and 1
14
+ * @param {T[]|TypedArray} array what to shuffle (mutated in place)
15
+ * @param {number} [length] how many leading entries of `array` to shuffle; defaults to `array.length`
16
+ */
17
+ export function array_shuffle(random, array, length = array.length) {
18
+ for (let source_index = 0; source_index < length; ++source_index) {
19
+ const target_index = randomIntegerBetween(random, 0, length - (source_index + 1));
20
+
21
+ if (target_index === source_index) {
22
+ continue;
23
+ }
24
+
25
+ array_swap_one(array, source_index, target_index);
26
+ }
27
+ }
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Fibonacci heap implementation that stores uint32 ID along with a floating point score value, intended to be
3
+ * API-compatible with {@link Uint32Heap}.
4
+ *
5
+ * Storage is struct-of-arrays on top of a single {@link BinaryElementPool} — each "node" is a 32-byte
6
+ * record in a contiguous ArrayBuffer, and "node references" are uint32 handles rather than object pointers.
7
+ * This keeps all per-node state in continuous memory, avoiding the per-element allocation and pointer chasing
8
+ * of an object-graph implementation.
9
+ *
10
+ * Fibonacci heaps have theoretically excellent asymptotic bounds:
11
+ * - insert, find-min, decrease-key: amortized O(1)
12
+ * - extract-min, delete: amortized O(log n)
13
+ *
14
+ * In practice they often lose to a simple binary or 4-ary heap on graph-search workloads because of poor
15
+ * cache behavior; this layout closes most of that gap by removing the indirection. See Larkin, Sen &amp; Tarjan
16
+ * (2014), "A Back-to-Basics Empirical Study of Priority Queues" (arXiv:1403.0252) for the empirical context.
17
+ *
18
+ * Reference: Cormen, Leiserson, Rivest, Stein, "Introduction to Algorithms", 3rd ed., chapter 19.
19
+ *
20
+ * @see Uint32Heap
21
+ * @see Uint32Heap4
22
+ */
23
+ export class FibonacciHeap {
24
+ /**
25
+ *
26
+ * @param {number} [initial_capacity] reserves space for this many nodes up front. The pool grows on demand.
27
+ */
28
+ constructor(initial_capacity?: number);
29
+ /**
30
+ * @type {BinaryElementPool}
31
+ * @private
32
+ */
33
+ private __pool;
34
+ /**
35
+ * Handle of the node with the smallest key, or NULL_HANDLE if empty.
36
+ * @type {number}
37
+ * @private
38
+ */
39
+ private __min;
40
+ /**
41
+ * Number of nodes currently in the heap.
42
+ * @type {number}
43
+ * @private
44
+ */
45
+ private __size;
46
+ /**
47
+ * Id -> handle lookup, allows update_score / remove / contains / get_score in O(1) expected.
48
+ *
49
+ * Empirically (see the bench tests in FibonacciHeap.spec.js), V8's built-in Map beats a hand-rolled
50
+ * Uint32Array-backed Robin Hood hash table for this workload by 20-90 % on hot paths. Reason: every
51
+ * key and value here is SMI (ids and handles are both small), so V8 Map's native C++ SMI fast path
52
+ * never boxes; meanwhile a JS-side flat-array implementation pays per-probe Math.imul + bounds-checks
53
+ * that V8's compiled Map sidesteps. The Uint32Map primitive lives at core/collection/Uint32Map.js
54
+ * and is the right choice when keys/values exceed 2^30 (V8 Map boxes) or when delete churn is
55
+ * extreme (V8 Map tombstone-rots until rehash) — but not here.
56
+ *
57
+ * @type {Map<number, number>}
58
+ * @private
59
+ */
60
+ private __handles;
61
+ /**
62
+ *
63
+ * @returns {number}
64
+ */
65
+ get size(): number;
66
+ /**
67
+ * Node with the lowest score
68
+ * @returns {number}
69
+ */
70
+ get top_id(): number;
71
+ /**
72
+ *
73
+ * @returns {boolean}
74
+ */
75
+ is_empty(): boolean;
76
+ /**
77
+ * Returns the score of the node with the lowest score
78
+ * @returns {number}
79
+ */
80
+ peek_score(): number;
81
+ /**
82
+ * Returns the ID of the node with the lowest score
83
+ * @returns {number}
84
+ */
85
+ peek_min(): number;
86
+ /**
87
+ * Splice `handle` (a single-element circular list) into the root list to the right of `__min`. The caller
88
+ * is responsible for setting parent and degree on `handle`.
89
+ *
90
+ * @private
91
+ * @param {number} handle
92
+ */
93
+ private __root_insert;
94
+ /**
95
+ * Remove `handle` from its sibling list (root list or child list of some parent). Sibling pointers of
96
+ * `handle` are left dangling; the caller is expected to re-link it immediately.
97
+ *
98
+ * @private
99
+ * @param {number} handle
100
+ */
101
+ private __unlink_from_siblings;
102
+ /**
103
+ *
104
+ * @param {number} id
105
+ * @param {number} score
106
+ */
107
+ insert(id: number, score: number): void;
108
+ /**
109
+ * Removed and returns the ID of the node with the lowest score.
110
+ *
111
+ * @returns {number}
112
+ */
113
+ pop_min(): number;
114
+ /**
115
+ * Merge trees of equal degree until every degree is unique among the roots. Sets `__min` to the true
116
+ * minimum.
117
+ *
118
+ * @private
119
+ */
120
+ private __consolidate;
121
+ /**
122
+ * Make `y` (currently in the root list) a child of `x`.
123
+ *
124
+ * @private
125
+ * @param {number} y
126
+ * @param {number} x
127
+ */
128
+ private __link;
129
+ /**
130
+ * Decrease the key of `handle` to `new_key`. `new_key` must be <= current key.
131
+ *
132
+ * @private
133
+ * @param {number} handle
134
+ * @param {number} new_key
135
+ */
136
+ private __decrease_key;
137
+ /**
138
+ * Cut `x` from `y`'s child list and promote it to the root list.
139
+ *
140
+ * @private
141
+ * @param {number} x child being cut
142
+ * @param {number} y parent of x
143
+ */
144
+ private __cut;
145
+ /**
146
+ * Walk up from `y`, cutting marked ancestors and marking unmarked ones.
147
+ *
148
+ * @private
149
+ * @param {number} y
150
+ */
151
+ private __cascading_cut;
152
+ /**
153
+ * Delete the node referenced by `handle` by decreasing its key to -Infinity and popping the min.
154
+ *
155
+ * @private
156
+ * @param {number} handle
157
+ */
158
+ private __delete_handle;
159
+ /**
160
+ *
161
+ * @param {number} id
162
+ * @returns {boolean}
163
+ */
164
+ contains(id: number): boolean;
165
+ /**
166
+ *
167
+ * @param {number} id
168
+ * @returns {number} score of the element with the given id, NaN if not found
169
+ */
170
+ get_score(id: number): number;
171
+ /**
172
+ *
173
+ * @param {number} id
174
+ * @param {number} score
175
+ */
176
+ update_score(id: number, score: number): void;
177
+ /**
178
+ * Insert or update an element, if the element already exists, its score will be updated.
179
+ *
180
+ * @param {number} id
181
+ * @param {number} score
182
+ */
183
+ insert_or_update(id: number, score: number): void;
184
+ /**
185
+ *
186
+ * @param {number} id
187
+ * @returns {boolean}
188
+ */
189
+ remove(id: number): boolean;
190
+ /**
191
+ * Clear out all the data, heap will be made empty
192
+ */
193
+ clear(): void;
194
+ }
195
+ //# sourceMappingURL=FibonacciHeap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FibonacciHeap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/heap/FibonacciHeap.js"],"names":[],"mappings":"AAwCA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAEI;;;OAGG;IACH,+BAFW,MAAM,EAwChB;IAnCG;;;OAGG;IACH,eAAuE;IAEvE;;;;OAIG;IACH,cAAwB;IAExB;;;;OAIG;IACH,eAAe;IAEf;;;;;;;;;;;;;OAaG;IACH,kBAA0B;IAG9B;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,qBAKC;IAED;;;OAGG;IACH,YAFa,OAAO,CAInB;IAED;;;OAGG;IACH,cAFa,MAAM,CAOlB;IAED;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,sBAyBC;IAED;;;;;;OAMG;IACH,+BASC;IAED;;;;OAIG;IACH,WAHW,MAAM,SACN,MAAM,QA4BhB;IAED;;;;OAIG;IACH,WAFa,MAAM,CAwDlB;IAED;;;;;OAKG;IACH,sBAwDC;IAED;;;;;;OAMG;IACH,eA4BC;IAED;;;;;;OAMG;IACH,uBAkBC;IAED;;;;;;OAMG;IACH,cA2BC;IAED;;;;;OAKG;IACH,wBAaC;IAED;;;;;OAKG;IACH,wBAGC;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,cAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,iBAHW,MAAM,SACN,MAAM,QAsBhB;IAED;;;;;OAKG;IACH,qBAHW,MAAM,SACN,MAAM,QAQhB;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,OAAO,CAYnB;IAED;;OAEG;IACH,cAKC;CACJ"}