@woosh/meep-engine 2.138.19 → 2.139.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/package.json +2 -1
  2. package/src/core/collection/PairUint32Map.d.ts +100 -0
  3. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  4. package/src/core/collection/PairUint32Map.js +321 -0
  5. package/src/core/collection/Uint32Map.d.ts +119 -0
  6. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  7. package/src/core/collection/Uint32Map.js +345 -0
  8. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  9. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  10. package/src/core/collection/array/array_shuffle.js +27 -22
  11. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  12. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  13. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  14. package/src/core/collection/heap/Uint32Heap.js +1 -1
  15. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  16. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  17. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  18. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  19. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  20. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  21. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  22. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  23. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  24. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  25. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  26. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  27. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  28. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  29. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  30. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  31. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  33. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  34. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  36. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  37. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  38. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  39. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  40. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  41. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  42. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  43. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  44. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +673 -0
  45. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  46. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  47. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  48. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  49. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  50. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  51. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  52. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  53. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  54. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  55. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  56. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  57. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  58. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  59. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +365 -0
  60. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -0
  61. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  62. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +112 -0
  63. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -0
  64. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +55 -0
  66. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  67. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  69. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +22 -0
  70. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  71. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +49 -0
  72. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  73. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  74. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  75. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  76. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  77. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  78. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  79. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  80. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  81. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  82. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  83. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  84. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  85. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  86. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  87. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  88. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  89. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  90. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  91. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  92. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  93. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  94. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  95. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  96. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  97. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  98. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  99. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  100. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  101. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  102. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  103. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  104. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  105. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  106. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  108. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  109. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  111. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  112. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  113. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  114. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  115. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  116. package/src/core/graph/csr/CSRGraph.js +319 -0
  117. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  118. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  119. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  120. package/src/core/graph/metis/metis.d.ts +19 -0
  121. package/src/core/graph/metis/metis.d.ts.map +1 -1
  122. package/src/core/graph/metis/metis.js +20 -0
  123. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  124. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  125. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  126. package/src/core/graph/metis/metis_options.d.ts +17 -2
  127. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  128. package/src/core/graph/metis/metis_options.js +17 -2
  129. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  130. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  131. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  132. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  133. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  134. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  135. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  136. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  137. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  138. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  139. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  140. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  141. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  142. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  143. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  144. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  145. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  146. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  147. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  148. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  149. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  150. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  151. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  152. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  153. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  154. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  155. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  156. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  157. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  158. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  159. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  160. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  161. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  162. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  163. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  164. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  165. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  166. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  167. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  168. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  169. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  170. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  171. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  172. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  173. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  174. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  175. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  176. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  177. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  178. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  180. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  181. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  183. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  184. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  186. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  187. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  188. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  189. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  190. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  191. package/src/engine/EngineHarness.d.ts +3 -1
  192. package/src/engine/EngineHarness.d.ts.map +1 -1
  193. package/src/engine/EngineHarness.js +6 -4
  194. package/src/engine/control/first-person/DESIGN.md +30 -6
  195. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  196. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +102 -9
  197. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  198. package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
  199. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
  200. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  201. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
  202. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
  203. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  204. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
  205. package/src/engine/control/first-person/TODO.md +127 -0
  206. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  207. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  208. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  209. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  210. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  211. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  212. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  213. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  214. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  215. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  216. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  217. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  218. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  219. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  220. package/src/engine/control/first-person/abilities/Slide.js +158 -0
  221. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  222. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  223. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  224. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  225. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  226. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  227. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  228. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  229. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  230. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  231. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  232. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  233. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  234. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  235. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  236. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  237. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  238. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  239. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  240. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  241. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  242. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  243. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  244. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  245. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  246. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  247. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  248. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  249. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  250. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  251. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  252. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  253. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  254. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  255. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  256. package/src/engine/control/first-person/math/Spring.js +71 -0
  257. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  258. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  259. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  260. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  261. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  262. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  263. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  264. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  265. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  266. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  267. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  268. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  269. package/src/engine/control/first-person/prototype_first_person_controller.js +550 -119
  270. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  271. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  272. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  273. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  274. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  275. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  276. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  277. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  278. package/src/engine/control/first-person/test/buildTestPlayer.js +28 -0
  279. package/src/engine/ecs/EntityManager.d.ts +2 -2
  280. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  281. package/src/engine/ecs/EntityManager.js +13 -8
  282. package/src/engine/ecs/System.d.ts.map +1 -1
  283. package/src/engine/ecs/System.js +2 -2
  284. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  285. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  286. package/src/engine/graphics/ecs/light/Light.js +27 -0
  287. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  288. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  289. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  290. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  291. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  292. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  293. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  294. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  295. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  296. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  297. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  298. package/src/engine/physics/PLAN.md +236 -0
  299. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  300. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  301. package/src/engine/physics/body/BodyStorage.js +427 -0
  302. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  303. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  304. package/src/engine/physics/broadphase/PairList.js +97 -0
  305. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts +30 -0
  306. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
  307. package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -0
  308. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  309. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  310. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  311. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  312. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  313. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  314. package/src/engine/physics/contact/ManifoldStore.d.ts +226 -0
  315. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  316. package/src/engine/physics/contact/ManifoldStore.js +499 -0
  317. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  318. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  319. package/src/engine/physics/ecs/BodyKind.js +24 -0
  320. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  321. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  322. package/src/engine/physics/ecs/Collider.js +136 -0
  323. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  324. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  325. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  326. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  327. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  328. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  329. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  330. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  331. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  332. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  333. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  334. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  335. package/src/engine/physics/ecs/PhysicsSystem.d.ts +520 -0
  336. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  337. package/src/engine/physics/ecs/PhysicsSystem.js +1159 -0
  338. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  339. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  340. package/src/engine/physics/ecs/RigidBody.js +240 -0
  341. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  342. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  343. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  344. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  345. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  346. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  347. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  348. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  349. package/src/engine/physics/ecs/SleepState.js +12 -0
  350. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  351. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  352. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  353. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  354. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  355. package/src/engine/physics/events/diff_manifolds.js +50 -0
  356. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  357. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  358. package/src/engine/physics/fluid/FluidField.js +510 -66
  359. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  360. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  361. package/src/engine/physics/fluid/FluidSimulator.js +455 -95
  362. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  363. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  364. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  365. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  366. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  367. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  368. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  369. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  370. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  371. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  372. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  373. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  374. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  375. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  376. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  377. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  378. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  379. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  380. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  381. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  382. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  383. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  384. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  385. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  386. package/src/engine/physics/fluid/prototype.js +102 -91
  387. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  388. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  389. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  390. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  391. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  392. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  393. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  394. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  395. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  396. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  397. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  398. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  399. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  400. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  401. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  402. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  403. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  404. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  405. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  406. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  407. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  408. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  409. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  410. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  411. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  412. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  413. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  414. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  415. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  416. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  417. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts +20 -0
  418. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
  419. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
  420. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -0
  421. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  422. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +70 -0
  423. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  424. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
  425. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
  426. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  427. package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
  428. package/src/engine/physics/integration/integrate_position.d.ts +16 -0
  429. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  430. package/src/engine/physics/integration/integrate_position.js +48 -0
  431. package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
  432. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  433. package/src/engine/physics/integration/integrate_velocity.js +79 -0
  434. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  435. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  436. package/src/engine/physics/integration/quat_integrate.js +62 -0
  437. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  438. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  439. package/src/engine/physics/island/IslandBuilder.js +411 -0
  440. package/src/engine/physics/island/union_find.d.ts +51 -0
  441. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  442. package/src/engine/physics/island/union_find.js +76 -0
  443. package/src/engine/physics/narrowphase/PosedShape.d.ts +59 -0
  444. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  445. package/src/engine/physics/narrowphase/PosedShape.js +110 -0
  446. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  447. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  448. package/src/engine/physics/narrowphase/box_box_manifold.js +543 -0
  449. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  450. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  451. package/src/engine/physics/narrowphase/capsule_contacts.js +508 -0
  452. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
  453. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  454. package/src/engine/physics/narrowphase/narrowphase_step.js +382 -0
  455. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  456. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  457. package/src/engine/physics/narrowphase/sphere_box_contact.js +130 -0
  458. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  459. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  460. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  461. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  462. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  463. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  464. package/src/engine/physics/queries/raycast.d.ts +20 -0
  465. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  466. package/src/engine/physics/queries/raycast.js +249 -0
  467. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  468. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  469. package/src/engine/physics/solver/friction_cone.js +37 -0
  470. package/src/engine/physics/solver/solve_contacts.d.ts +36 -0
  471. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  472. package/src/engine/physics/solver/solve_contacts.js +598 -0
  473. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  474. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  475. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  476. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  477. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  478. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  479. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  480. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  481. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  482. package/src/engine/ecs/components/Motion.d.ts +0 -21
  483. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  484. package/src/engine/ecs/components/Motion.js +0 -27
  485. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  486. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  487. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  488. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  489. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  490. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  491. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  492. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  493. package/src/engine/physics/fluid/Fluid.js +0 -221
  494. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  495. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  496. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
package/package.json CHANGED
@@ -2,10 +2,11 @@
2
2
  "name": "@woosh/meep-engine",
3
3
  "license": "UNLICENSED",
4
4
  "productName": "Meep",
5
+ "homepage": "https://meep.company-named.com/",
5
6
  "description": "Pure JavaScript game engine. Fully featured and production ready.",
6
7
  "type": "module",
7
8
  "author": "Alexander Goldring",
8
- "version": "2.138.19",
9
+ "version": "2.139.0",
9
10
  "main": "build/meep.module.js",
10
11
  "module": "build/meep.module.js",
11
12
  "exports": {
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Returned by {@link PairUint32Map#get} when the key pair is absent.
3
+ * @type {number}
4
+ */
5
+ export const PAIR_UINT32_MAP_ABSENT: number;
6
+ /**
7
+ * Open-addressed Robin Hood map from a pair of uint32 keys to a uint32 value.
8
+ *
9
+ * Layout: a single `Uint32Array` of `3 * capacity` words. Slot `s` is
10
+ * `[key_a + 1, key_b, value]`. The first word doubles as the slot-occupied
11
+ * marker (0 = empty).
12
+ *
13
+ * Hashing: `mix = imul(key_a + 1, MIX_A) ^ imul(key_b + 1, MIX_B)`, indexed via
14
+ * the high bits (right-shift, not low-bit mask — high bits of a multiplicative
15
+ * hash have more entropy, see Skarupke 2018).
16
+ *
17
+ * Collision resolution: Robin Hood linear probing with backward-shift deletion.
18
+ *
19
+ * Symmetric pair use: callers wanting `(a, b)` to be indistinguishable from
20
+ * `(b, a)` should canonicalise (e.g. `min, max`) before calling.
21
+ *
22
+ * Allowed key range per slot field: 0 .. UINT32_MAX − 1 (because key_a is stored
23
+ * as key+1). Allowed value range: full uint32.
24
+ *
25
+ * @author Alex Goldring
26
+ * @copyright Company Named Limited (c) 2026
27
+ */
28
+ export class PairUint32Map {
29
+ /**
30
+ *
31
+ * @param {number} [initial_capacity] minimum number of slots; rounded up to power of two.
32
+ */
33
+ constructor(initial_capacity?: number);
34
+ __capacity: number;
35
+ __mask: number;
36
+ __shift: number;
37
+ __grow_threshold: number;
38
+ __size: number;
39
+ __data: Uint32Array;
40
+ /**
41
+ * @returns {number}
42
+ */
43
+ get size(): number;
44
+ /**
45
+ * @returns {number}
46
+ */
47
+ get capacity(): number;
48
+ /**
49
+ *
50
+ * @param {number} key_a_shifted key_a + 1 (already shifted form, as stored)
51
+ * @param {number} key_b
52
+ * @returns {number}
53
+ */
54
+ __hash(key_a_shifted: number, key_b: number): number;
55
+ /**
56
+ *
57
+ * @param {number} key_a
58
+ * @param {number} key_b
59
+ * @returns {number} value or {@link PAIR_UINT32_MAP_ABSENT}.
60
+ */
61
+ get(key_a: number, key_b: number): number;
62
+ /**
63
+ *
64
+ * @param {number} key_a
65
+ * @param {number} key_b
66
+ * @returns {boolean}
67
+ */
68
+ has(key_a: number, key_b: number): boolean;
69
+ /**
70
+ *
71
+ * @param {number} key_a
72
+ * @param {number} key_b
73
+ * @param {number} value
74
+ */
75
+ set(key_a: number, key_b: number, value: number): void;
76
+ /**
77
+ * @private
78
+ * @param {number} ksa key_a + 1
79
+ * @param {number} kb key_b (raw)
80
+ * @param {number} value
81
+ */
82
+ private __insert_no_grow;
83
+ /**
84
+ *
85
+ * @param {number} key_a
86
+ * @param {number} key_b
87
+ * @returns {boolean}
88
+ */
89
+ delete(key_a: number, key_b: number): boolean;
90
+ clear(): void;
91
+ /**
92
+ * @private
93
+ * @param {number} new_capacity power of two
94
+ */
95
+ private __resize;
96
+ }
97
+ export namespace PairUint32Map {
98
+ let MAX_KEY: number;
99
+ }
100
+ //# sourceMappingURL=PairUint32Map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PairUint32Map.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/PairUint32Map.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qCAFU,MAAM,CAEyB;AA2BzC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAEI;;;OAGG;IACH,+BAFW,MAAM,EAchB;IANG,mBAAqB;IACrB,eAAqB;IACrB,gBAAkC;IAClC,yBAA2E;IAC3E,eAAe;IACf,oBAAgD;IAGpD;;OAEG;IACH,mBAEC;IAED;;OAEG;IACH,uBAEC;IAED;;;;;OAKG;IACH,sBAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,WAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAiClB;IAED;;;;;OAKG;IACH,WAJW,MAAM,SACN,MAAM,GACJ,OAAO,CAInB;IAED;;;;;OAKG;IACH,WAJW,MAAM,SACN,MAAM,SACN,MAAM,QAOhB;IAED;;;;;OAKG;IACH,yBAiDC;IAED;;;;;OAKG;IACH,cAJW,MAAM,SACN,MAAM,GACJ,OAAO,CA+DnB;IAED,cAGC;IAED;;;OAGG;IACH,iBAkBC;CACJ;;iBAGS,MAAM"}
@@ -0,0 +1,321 @@
1
+ import { assert } from "../assert.js";
2
+
3
+ /**
4
+ * Returned by {@link PairUint32Map#get} when the key pair is absent.
5
+ * @type {number}
6
+ */
7
+ export const PAIR_UINT32_MAP_ABSENT = -1;
8
+
9
+ const UINT32_MAX = 4294967295;
10
+
11
+ /**
12
+ * Two multipliers chosen so the bits of `a` and `b` mix into one 32-bit hash
13
+ * with reasonable spread for sequential-ish keys. The first is 2^32 / phi
14
+ * (the Fibonacci constant used by {@link Uint32Map}); the second is a large
15
+ * odd 32-bit prime used in the FNV-1a family for the secondary mix.
16
+ * @type {number}
17
+ */
18
+ const MIX_A = 2654435761;
19
+ const MIX_B = 2246822519;
20
+
21
+ /**
22
+ * Slot is 3 words wide: [key_a + 1, key_b, value]. `key_a` is stored offset by
23
+ * +1 so that 0 in the first word unambiguously means "empty slot" — see
24
+ * {@link Uint32Map} for the same trick on a single-key map.
25
+ * @type {number}
26
+ */
27
+ const SLOT_STRIDE = 3;
28
+
29
+ const DEFAULT_CAPACITY = 16;
30
+ const MIN_CAPACITY = 2;
31
+ const LOAD_FACTOR_NUMERATOR = 3;
32
+ const LOAD_FACTOR_SHIFT = 2;
33
+
34
+ /**
35
+ * Open-addressed Robin Hood map from a pair of uint32 keys to a uint32 value.
36
+ *
37
+ * Layout: a single `Uint32Array` of `3 * capacity` words. Slot `s` is
38
+ * `[key_a + 1, key_b, value]`. The first word doubles as the slot-occupied
39
+ * marker (0 = empty).
40
+ *
41
+ * Hashing: `mix = imul(key_a + 1, MIX_A) ^ imul(key_b + 1, MIX_B)`, indexed via
42
+ * the high bits (right-shift, not low-bit mask — high bits of a multiplicative
43
+ * hash have more entropy, see Skarupke 2018).
44
+ *
45
+ * Collision resolution: Robin Hood linear probing with backward-shift deletion.
46
+ *
47
+ * Symmetric pair use: callers wanting `(a, b)` to be indistinguishable from
48
+ * `(b, a)` should canonicalise (e.g. `min, max`) before calling.
49
+ *
50
+ * Allowed key range per slot field: 0 .. UINT32_MAX − 1 (because key_a is stored
51
+ * as key+1). Allowed value range: full uint32.
52
+ *
53
+ * @author Alex Goldring
54
+ * @copyright Company Named Limited (c) 2026
55
+ */
56
+ export class PairUint32Map {
57
+
58
+ /**
59
+ *
60
+ * @param {number} [initial_capacity] minimum number of slots; rounded up to power of two.
61
+ */
62
+ constructor(initial_capacity = DEFAULT_CAPACITY) {
63
+ assert.isNonNegativeInteger(initial_capacity, 'initial_capacity');
64
+
65
+ let cap = MIN_CAPACITY;
66
+ while (cap < initial_capacity) cap <<= 1;
67
+
68
+ this.__capacity = cap;
69
+ this.__mask = cap - 1;
70
+ this.__shift = Math.clz32(cap - 1);
71
+ this.__grow_threshold = (cap * LOAD_FACTOR_NUMERATOR) >>> LOAD_FACTOR_SHIFT;
72
+ this.__size = 0;
73
+ this.__data = new Uint32Array(cap * SLOT_STRIDE);
74
+ }
75
+
76
+ /**
77
+ * @returns {number}
78
+ */
79
+ get size() {
80
+ return this.__size;
81
+ }
82
+
83
+ /**
84
+ * @returns {number}
85
+ */
86
+ get capacity() {
87
+ return this.__capacity;
88
+ }
89
+
90
+ /**
91
+ *
92
+ * @param {number} key_a_shifted key_a + 1 (already shifted form, as stored)
93
+ * @param {number} key_b
94
+ * @returns {number}
95
+ */
96
+ __hash(key_a_shifted, key_b) {
97
+ return (Math.imul(key_a_shifted, MIX_A) ^ Math.imul(key_b + 1, MIX_B)) >>> 0;
98
+ }
99
+
100
+ /**
101
+ *
102
+ * @param {number} key_a
103
+ * @param {number} key_b
104
+ * @returns {number} value or {@link PAIR_UINT32_MAP_ABSENT}.
105
+ */
106
+ get(key_a, key_b) {
107
+ const data = this.__data;
108
+ const mask = this.__mask;
109
+ const shift = this.__shift;
110
+
111
+ const ksa = key_a + 1;
112
+
113
+ let slot = this.__hash(ksa, key_b) >>> shift;
114
+ let dist = 0;
115
+
116
+ while (true) {
117
+ const off = slot * SLOT_STRIDE;
118
+ const ka = data[off];
119
+
120
+ if (ka === 0) {
121
+ return PAIR_UINT32_MAP_ABSENT;
122
+ }
123
+ if (ka === ksa && data[off + 1] === key_b) {
124
+ return data[off + 2];
125
+ }
126
+
127
+ // Robin Hood early-exit.
128
+ const home = this.__hash(ka, data[off + 1]) >>> shift;
129
+ const slot_dist = (slot - home) & mask;
130
+ if (dist > slot_dist) {
131
+ return PAIR_UINT32_MAP_ABSENT;
132
+ }
133
+
134
+ slot = (slot + 1) & mask;
135
+ dist++;
136
+ }
137
+ }
138
+
139
+ /**
140
+ *
141
+ * @param {number} key_a
142
+ * @param {number} key_b
143
+ * @returns {boolean}
144
+ */
145
+ has(key_a, key_b) {
146
+ return this.get(key_a, key_b) !== PAIR_UINT32_MAP_ABSENT;
147
+ }
148
+
149
+ /**
150
+ *
151
+ * @param {number} key_a
152
+ * @param {number} key_b
153
+ * @param {number} value
154
+ */
155
+ set(key_a, key_b, value) {
156
+ if (this.__size >= this.__grow_threshold) {
157
+ this.__resize(this.__capacity << 1);
158
+ }
159
+ this.__insert_no_grow(key_a + 1, key_b, value);
160
+ }
161
+
162
+ /**
163
+ * @private
164
+ * @param {number} ksa key_a + 1
165
+ * @param {number} kb key_b (raw)
166
+ * @param {number} value
167
+ */
168
+ __insert_no_grow(ksa, kb, value) {
169
+ const data = this.__data;
170
+ const mask = this.__mask;
171
+ const shift = this.__shift;
172
+
173
+ let a = ksa;
174
+ let b = kb;
175
+ let v = value;
176
+ let slot = this.__hash(a, b) >>> shift;
177
+ let dist = 0;
178
+
179
+ while (true) {
180
+ const off = slot * SLOT_STRIDE;
181
+ const occ_a = data[off];
182
+
183
+ if (occ_a === 0) {
184
+ data[off] = a;
185
+ data[off + 1] = b;
186
+ data[off + 2] = v;
187
+ this.__size++;
188
+ return;
189
+ }
190
+
191
+ if (occ_a === a && data[off + 1] === b) {
192
+ // overwrite existing
193
+ data[off + 2] = v;
194
+ return;
195
+ }
196
+
197
+ const home = this.__hash(occ_a, data[off + 1]) >>> shift;
198
+ const occ_dist = (slot - home) & mask;
199
+
200
+ if (occ_dist < dist) {
201
+ // steal
202
+ const tmp_a = occ_a;
203
+ const tmp_b = data[off + 1];
204
+ const tmp_v = data[off + 2];
205
+ data[off] = a;
206
+ data[off + 1] = b;
207
+ data[off + 2] = v;
208
+ a = tmp_a;
209
+ b = tmp_b;
210
+ v = tmp_v;
211
+ dist = occ_dist;
212
+ }
213
+
214
+ slot = (slot + 1) & mask;
215
+ dist++;
216
+ }
217
+ }
218
+
219
+ /**
220
+ *
221
+ * @param {number} key_a
222
+ * @param {number} key_b
223
+ * @returns {boolean}
224
+ */
225
+ delete(key_a, key_b) {
226
+ const data = this.__data;
227
+ const mask = this.__mask;
228
+ const shift = this.__shift;
229
+
230
+ const ksa = key_a + 1;
231
+
232
+ let slot = this.__hash(ksa, key_b) >>> shift;
233
+ let dist = 0;
234
+
235
+ while (true) {
236
+ const off = slot * SLOT_STRIDE;
237
+ const ka = data[off];
238
+
239
+ if (ka === 0) {
240
+ return false;
241
+ }
242
+ if (ka === ksa && data[off + 1] === key_b) {
243
+ break;
244
+ }
245
+
246
+ const home = this.__hash(ka, data[off + 1]) >>> shift;
247
+ const slot_dist = (slot - home) & mask;
248
+ if (dist > slot_dist) {
249
+ return false;
250
+ }
251
+
252
+ slot = (slot + 1) & mask;
253
+ dist++;
254
+ }
255
+
256
+ // backward-shift deletion
257
+ while (true) {
258
+ const next = (slot + 1) & mask;
259
+ const next_off = next * SLOT_STRIDE;
260
+ const next_ka = data[next_off];
261
+
262
+ if (next_ka === 0) {
263
+ break;
264
+ }
265
+
266
+ const next_home = this.__hash(next_ka, data[next_off + 1]) >>> shift;
267
+ const next_dist = (next - next_home) & mask;
268
+ if (next_dist === 0) {
269
+ break;
270
+ }
271
+
272
+ const off = slot * SLOT_STRIDE;
273
+ data[off] = next_ka;
274
+ data[off + 1] = data[next_off + 1];
275
+ data[off + 2] = data[next_off + 2];
276
+ slot = next;
277
+ }
278
+
279
+ const off = slot * SLOT_STRIDE;
280
+ data[off] = 0;
281
+ data[off + 1] = 0;
282
+ data[off + 2] = 0;
283
+
284
+ this.__size--;
285
+ return true;
286
+ }
287
+
288
+ clear() {
289
+ this.__data.fill(0);
290
+ this.__size = 0;
291
+ }
292
+
293
+ /**
294
+ * @private
295
+ * @param {number} new_capacity power of two
296
+ */
297
+ __resize(new_capacity) {
298
+ const old_data = this.__data;
299
+ const old_capacity = this.__capacity;
300
+
301
+ this.__capacity = new_capacity;
302
+ this.__mask = new_capacity - 1;
303
+ this.__shift = Math.clz32(new_capacity - 1);
304
+ this.__grow_threshold = (new_capacity * LOAD_FACTOR_NUMERATOR) >>> LOAD_FACTOR_SHIFT;
305
+ this.__data = new Uint32Array(new_capacity * SLOT_STRIDE);
306
+ this.__size = 0;
307
+
308
+ for (let i = 0; i < old_capacity; i++) {
309
+ const off = i * SLOT_STRIDE;
310
+ const a = old_data[off];
311
+ if (a !== 0) {
312
+ this.__insert_no_grow(a, old_data[off + 1], old_data[off + 2]);
313
+ }
314
+ }
315
+ }
316
+ }
317
+
318
+ /**
319
+ * @type {number}
320
+ */
321
+ PairUint32Map.MAX_KEY = UINT32_MAX - 1;
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Returned by {@link Uint32Map#get} when the key is absent. Chosen so that any uint32 (0 .. UINT32_MAX) is
3
+ * unambiguously a valid value. As a JS Number this is a Smi on all V8 builds, so the return doesn't allocate.
4
+ * @type {number}
5
+ */
6
+ export const UINT32_MAP_ABSENT: number;
7
+ /**
8
+ * Non-allocating Map&lt;uint32, uint32&gt; backed by a single Uint32Array.
9
+ *
10
+ * Layout: one slot occupies two consecutive words — `data[2*slot] = key + 1`, `data[2*slot + 1] = value`.
11
+ * Keys are stored offset by +1 so that 0 is unambiguously "empty slot"; this also keeps every stored value
12
+ * inside the V8 Smi range (under pointer compression, Smi is 31-bit signed = max 2^30 − 1), which means
13
+ * reading any non-empty slot does not allocate a HeapNumber. Without the shift, a sentinel of 0xFFFFFFFF
14
+ * would box on every read of an empty slot — the exact opposite of what we want.
15
+ *
16
+ * Collision resolution: Robin Hood linear probing with backward-shift deletion (Knuth Algorithm R). Hash
17
+ * is Fibonacci multiplicative (see Skarupke 2018, "Fibonacci Hashing"), indexing from the high bits of
18
+ * the product. Table capacity is always a power of two; index is computed by right-shift, not by mask of
19
+ * the low bits — the high bits of a multiplicative hash have more entropy.
20
+ *
21
+ * Allowed key range: 0 .. UINT32_MAX - 1 (because we store key + 1). Allowed value range: full uint32.
22
+ * Values are returned via {@link UINT32_MAP_ABSENT} when not found — callers check `=== -1` rather than
23
+ * `=== undefined`, which is the Map API but is allocation-incompatible with typed-array storage.
24
+ */
25
+ export class Uint32Map {
26
+ /**
27
+ *
28
+ * @param {number} [initial_capacity] minimum number of slots to reserve. Rounded up to next power of two.
29
+ */
30
+ constructor(initial_capacity?: number);
31
+ /**
32
+ * @type {number}
33
+ * @private
34
+ */
35
+ private __capacity;
36
+ /**
37
+ * @type {number}
38
+ * @private
39
+ */
40
+ private __mask;
41
+ /**
42
+ * Right-shift amount that extracts log2(cap) high bits from a 32-bit hash.
43
+ * @type {number}
44
+ * @private
45
+ */
46
+ private __shift;
47
+ /**
48
+ * @type {number}
49
+ * @private
50
+ */
51
+ private __grow_threshold;
52
+ /**
53
+ * @type {number}
54
+ * @private
55
+ */
56
+ private __size;
57
+ /**
58
+ * Packed (key+1, value) pairs. Length is 2 * capacity. Zero-initialized so every slot starts empty.
59
+ * @type {Uint32Array}
60
+ * @private
61
+ */
62
+ private __data;
63
+ /**
64
+ *
65
+ * @returns {number}
66
+ */
67
+ get size(): number;
68
+ /**
69
+ *
70
+ * @returns {number}
71
+ */
72
+ get capacity(): number;
73
+ /**
74
+ *
75
+ * @param {number} id
76
+ * @returns {number} value associated with `id`, or {@link UINT32_MAP_ABSENT} (-1) if not present.
77
+ */
78
+ get(id: number): number;
79
+ /**
80
+ *
81
+ * @param {number} id
82
+ * @returns {boolean}
83
+ */
84
+ has(id: number): boolean;
85
+ /**
86
+ *
87
+ * @param {number} id
88
+ * @param {number} value
89
+ */
90
+ set(id: number, value: number): void;
91
+ /**
92
+ * Insert a (already key+1 shifted) entry assuming there is at least one empty slot. Performs Robin Hood
93
+ * swapping: when the new entry has been displaced further than the current occupant, swap them and
94
+ * continue placing the displaced occupant.
95
+ *
96
+ * @private
97
+ * @param {number} key_shifted
98
+ * @param {number} value
99
+ */
100
+ private __insert_no_grow;
101
+ /**
102
+ *
103
+ * @param {number} id
104
+ * @returns {boolean} true if the entry existed and was removed.
105
+ */
106
+ delete(id: number): boolean;
107
+ /**
108
+ * Remove all entries. Capacity is unchanged.
109
+ */
110
+ clear(): void;
111
+ /**
112
+ * Grow the table and rehash every entry.
113
+ *
114
+ * @private
115
+ * @param {number} new_capacity power of two
116
+ */
117
+ private __resize;
118
+ }
119
+ //# sourceMappingURL=Uint32Map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Uint32Map.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/Uint32Map.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,gCAFU,MAAM,CAEoB;AA6BpC;;;;;;;;;;;;;;;;;GAiBG;AACH;IAEI;;;OAGG;IACH,+BAFW,MAAM,EA0ChB;IAhCG;;;OAGG;IACH,mBAAqB;IACrB;;;OAGG;IACH,eAAqB;IACrB;;;;OAIG;IACH,gBAAkC;IAClC;;;OAGG;IACH,yBAA2E;IAC3E;;;OAGG;IACH,eAAe;IACf;;;;OAIG;IACH,eAAuC;IAG3C;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,QAHW,MAAM,GACJ,MAAM,CAkClB;IAED;;;;OAIG;IACH,QAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,QAHW,MAAM,SACN,MAAM,QAehB;IAED;;;;;;;;OAQG;IACH,yBA4CC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,OAAO,CA+DnB;IAED;;OAEG;IACH,cAGC;IAED;;;;;OAKG;IACH,iBAkBC;CACJ"}