@woosh/meep-engine 2.138.20 → 2.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/package.json +1 -1
  2. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts +3 -3
  3. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts.map +1 -1
  4. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js +4 -4
  5. package/src/core/collection/PairUint32Map.d.ts +100 -0
  6. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  7. package/src/core/collection/PairUint32Map.js +321 -0
  8. package/src/core/collection/Uint32Map.d.ts +119 -0
  9. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  10. package/src/core/collection/Uint32Map.js +345 -0
  11. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  12. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  13. package/src/core/collection/array/array_shuffle.js +27 -22
  14. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  15. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  16. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  17. package/src/core/collection/heap/Uint32Heap.js +1 -1
  18. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  19. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  20. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  21. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +30 -0
  22. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -0
  23. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +93 -0
  24. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  25. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  26. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  27. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +54 -0
  28. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -0
  29. package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +69 -0
  30. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +24 -2
  31. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/AbstractShape3D.js +24 -1
  33. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  34. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  36. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  37. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  38. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  39. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +148 -0
  40. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -0
  41. package/src/core/geom/3d/shape/HeightMapShape3D.js +451 -0
  42. package/src/core/geom/3d/shape/MeshShape3D.d.ts +210 -0
  43. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -0
  44. package/src/core/geom/3d/shape/MeshShape3D.js +593 -0
  45. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  46. package/src/core/geom/3d/shape/TransformedShape3D.js +46 -2
  47. package/src/core/geom/3d/shape/Triangle3D.d.ts +95 -0
  48. package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -0
  49. package/src/core/geom/3d/shape/Triangle3D.js +318 -0
  50. package/src/core/geom/3d/shape/UnionShape3D.js +13 -0
  51. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  52. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  53. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  54. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  55. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  56. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  57. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts +30 -0
  58. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts.map +1 -0
  59. package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +64 -0
  60. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  61. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  62. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  63. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  64. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  66. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  67. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  69. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  70. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  71. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +671 -0
  72. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts +28 -0
  73. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts.map +1 -0
  74. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.js +48 -0
  75. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  76. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  77. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  78. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  79. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  80. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  81. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  82. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  83. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  84. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  85. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  86. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  87. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  88. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  89. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +387 -0
  90. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +35 -0
  91. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  92. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +140 -0
  93. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +31 -0
  94. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  95. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +97 -0
  96. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  97. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  98. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  99. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +41 -0
  100. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  101. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +124 -13
  102. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  103. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  104. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  105. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  106. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  108. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  109. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  111. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  112. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  113. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  114. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  115. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  116. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  117. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  118. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  119. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  120. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  121. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  122. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  123. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  124. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  125. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  126. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  127. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  128. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  129. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  130. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  131. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  132. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  133. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  134. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  135. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  136. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  137. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  138. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  139. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  140. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  141. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  142. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  143. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  144. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts +2 -2
  145. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts.map +1 -1
  146. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +1 -1
  147. package/src/core/geom/vec3/v3_dot_array_array.d.ts +3 -3
  148. package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +1 -1
  149. package/src/core/geom/vec3/v3_dot_array_array.js +2 -2
  150. package/src/core/geom/vec3/v3_negate_array.d.ts +3 -3
  151. package/src/core/geom/vec3/v3_negate_array.d.ts.map +1 -1
  152. package/src/core/geom/vec3/v3_negate_array.js +2 -2
  153. package/src/core/geom/vec3/v3_quat3_apply.d.ts +29 -0
  154. package/src/core/geom/vec3/v3_quat3_apply.d.ts.map +1 -0
  155. package/src/core/geom/vec3/v3_quat3_apply.js +39 -0
  156. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +30 -0
  157. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts.map +1 -0
  158. package/src/core/geom/vec3/v3_quat3_apply_inverse.js +41 -0
  159. package/src/core/geom/vec3/v3_triple_cross_product.d.ts +32 -0
  160. package/src/core/geom/vec3/v3_triple_cross_product.d.ts.map +1 -0
  161. package/src/core/geom/vec3/v3_triple_cross_product.js +45 -0
  162. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  163. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  164. package/src/core/graph/csr/CSRGraph.js +319 -0
  165. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  166. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  167. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  168. package/src/core/graph/metis/metis.d.ts +19 -0
  169. package/src/core/graph/metis/metis.d.ts.map +1 -1
  170. package/src/core/graph/metis/metis.js +20 -0
  171. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  172. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  173. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  174. package/src/core/graph/metis/metis_options.d.ts +17 -2
  175. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  176. package/src/core/graph/metis/metis_options.js +17 -2
  177. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  178. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  180. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  181. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  183. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  184. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  186. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  187. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  188. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  189. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  190. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  191. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  192. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  193. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  194. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  195. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  196. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  197. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  198. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  199. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  200. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  201. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  202. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  203. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  204. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  205. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  206. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  207. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  208. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  209. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  210. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  211. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  212. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  213. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  214. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  215. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  216. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  217. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  218. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  219. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  220. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  221. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  222. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  223. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  224. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  225. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  226. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  227. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  228. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  229. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  230. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  231. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  232. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  233. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  234. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  235. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  236. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  237. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  238. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  239. package/src/engine/EngineHarness.d.ts +3 -1
  240. package/src/engine/EngineHarness.d.ts.map +1 -1
  241. package/src/engine/EngineHarness.js +3 -0
  242. package/src/engine/control/first-person/DESIGN.md +30 -6
  243. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  244. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +115 -9
  245. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  246. package/src/engine/control/first-person/FirstPersonPlayerController.js +211 -176
  247. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +601 -8
  248. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  249. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +349 -8
  250. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +319 -23
  251. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  252. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +1789 -799
  253. package/src/engine/control/first-person/TODO.md +173 -0
  254. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  255. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  256. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  257. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  258. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  259. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  260. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  261. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  262. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  263. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  264. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  265. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  266. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  267. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  268. package/src/engine/control/first-person/abilities/Slide.js +166 -0
  269. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  270. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  271. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  272. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  273. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  274. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  275. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  276. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  277. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  278. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  279. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  280. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  281. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  282. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  283. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  284. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  285. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  286. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  287. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  288. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  289. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  290. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  291. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  292. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  293. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  294. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  295. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  296. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  297. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  298. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  299. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  300. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  301. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  302. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  303. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  304. package/src/engine/control/first-person/math/Spring.js +71 -0
  305. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  306. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  307. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  308. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  309. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  310. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  311. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  312. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  313. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  314. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  315. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  316. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  317. package/src/engine/control/first-person/prototype_first_person_controller.js +637 -120
  318. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  319. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  320. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  321. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  322. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  323. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  324. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  325. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  326. package/src/engine/control/first-person/test/buildTestPlayer.js +36 -0
  327. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  328. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  329. package/src/engine/graphics/ecs/light/Light.js +27 -0
  330. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  331. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  332. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  333. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  334. package/src/engine/graphics/geometry/CapsuleGeometry.d.ts +42 -0
  335. package/src/engine/graphics/geometry/CapsuleGeometry.d.ts.map +1 -0
  336. package/src/engine/graphics/geometry/CapsuleGeometry.js +171 -0
  337. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  338. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  339. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  340. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  341. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  342. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  343. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  344. package/src/engine/physics/BULLET_REVIEW.md +945 -0
  345. package/src/engine/physics/CANNON_REVIEW.md +1300 -0
  346. package/src/engine/physics/JOLT_REVIEW.md +913 -0
  347. package/src/engine/physics/PLAN.md +461 -0
  348. package/src/engine/physics/RAPIER_REVIEW.md +934 -0
  349. package/src/engine/physics/REVIEW_001_ACTION_PLAN.md +642 -0
  350. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  351. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  352. package/src/engine/physics/body/BodyStorage.js +427 -0
  353. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  354. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  355. package/src/engine/physics/broadphase/PairList.js +97 -0
  356. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  357. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  358. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  359. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  360. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  361. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  362. package/src/engine/physics/contact/ManifoldStore.d.ts +299 -0
  363. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  364. package/src/engine/physics/contact/ManifoldStore.js +608 -0
  365. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  366. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  367. package/src/engine/physics/ecs/BodyKind.js +24 -0
  368. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  369. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  370. package/src/engine/physics/ecs/Collider.js +136 -0
  371. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  372. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  373. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  374. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  375. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  376. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  377. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  378. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  379. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  380. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  381. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  382. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  383. package/src/engine/physics/ecs/PhysicsSystem.d.ts +628 -0
  384. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  385. package/src/engine/physics/ecs/PhysicsSystem.js +1301 -0
  386. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  387. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  388. package/src/engine/physics/ecs/RigidBody.js +240 -0
  389. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  390. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  391. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  392. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  393. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  394. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  395. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  396. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  397. package/src/engine/physics/ecs/SleepState.js +12 -0
  398. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  399. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  400. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  401. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  402. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  403. package/src/engine/physics/events/diff_manifolds.js +50 -0
  404. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  405. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  406. package/src/engine/physics/fluid/FluidField.js +510 -66
  407. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  408. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  409. package/src/engine/physics/fluid/FluidSimulator.js +456 -95
  410. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  411. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  412. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  413. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  414. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  415. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  416. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  417. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  418. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  419. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  420. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  421. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  422. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  423. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  424. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  425. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  426. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  427. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  428. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  429. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  430. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  431. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  432. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  433. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  434. package/src/engine/physics/fluid/prototype.js +102 -91
  435. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  436. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  437. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  438. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  439. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  440. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  441. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  442. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  443. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  444. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  445. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  446. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  447. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  448. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  449. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  450. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  451. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  452. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  453. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  454. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  455. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  456. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  457. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  458. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  459. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  460. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  461. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  462. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  463. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  464. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  465. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +48 -0
  466. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  467. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +92 -0
  468. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +6 -6
  469. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  470. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +76 -32
  471. package/src/engine/physics/gjk/gjk.d.ts +28 -2
  472. package/src/engine/physics/gjk/gjk.d.ts.map +1 -1
  473. package/src/engine/physics/gjk/gjk.js +421 -378
  474. package/src/engine/physics/gjk/minkowski_support.d.ts +37 -0
  475. package/src/engine/physics/gjk/minkowski_support.d.ts.map +1 -0
  476. package/src/engine/physics/gjk/minkowski_support.js +75 -0
  477. package/src/engine/physics/gjk/mpr.d.ts +56 -0
  478. package/src/engine/physics/gjk/mpr.d.ts.map +1 -0
  479. package/src/engine/physics/gjk/mpr.js +344 -0
  480. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +44 -0
  481. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  482. package/src/engine/physics/inertia/world_inverse_inertia.js +77 -0
  483. package/src/engine/physics/integration/integrate_position.d.ts +34 -0
  484. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  485. package/src/engine/physics/integration/integrate_position.js +79 -0
  486. package/src/engine/physics/integration/integrate_velocity.d.ts +55 -0
  487. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  488. package/src/engine/physics/integration/integrate_velocity.js +160 -0
  489. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  490. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  491. package/src/engine/physics/integration/quat_integrate.js +62 -0
  492. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  493. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  494. package/src/engine/physics/island/IslandBuilder.js +411 -0
  495. package/src/engine/physics/island/union_find.d.ts +51 -0
  496. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  497. package/src/engine/physics/island/union_find.js +76 -0
  498. package/src/engine/physics/narrowphase/PosedShape.d.ts +51 -0
  499. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  500. package/src/engine/physics/narrowphase/PosedShape.js +108 -0
  501. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  502. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  503. package/src/engine/physics/narrowphase/box_box_manifold.js +639 -0
  504. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +30 -0
  505. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -0
  506. package/src/engine/physics/narrowphase/box_triangle_contact.js +811 -0
  507. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  508. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  509. package/src/engine/physics/narrowphase/capsule_contacts.js +462 -0
  510. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +71 -0
  511. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -0
  512. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +375 -0
  513. package/src/engine/physics/narrowphase/compute_penetration.d.ts +91 -0
  514. package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -0
  515. package/src/engine/physics/narrowphase/compute_penetration.js +396 -0
  516. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts +35 -0
  517. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +1 -0
  518. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.js +80 -0
  519. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +31 -0
  520. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -0
  521. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +55 -0
  522. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +42 -0
  523. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -0
  524. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +204 -0
  525. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +42 -0
  526. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -0
  527. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +94 -0
  528. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +37 -0
  529. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -0
  530. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +37 -0
  531. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +17 -0
  532. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  533. package/src/engine/physics/narrowphase/narrowphase_step.js +1422 -0
  534. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  535. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  536. package/src/engine/physics/narrowphase/sphere_box_contact.js +123 -0
  537. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  538. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  539. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  540. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +48 -0
  541. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -0
  542. package/src/engine/physics/narrowphase/sphere_triangle_contact.js +143 -0
  543. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  544. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  545. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  546. package/src/engine/physics/queries/overlap_shape.d.ts +51 -0
  547. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -0
  548. package/src/engine/physics/queries/overlap_shape.js +183 -0
  549. package/src/engine/physics/queries/raycast.d.ts +20 -0
  550. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  551. package/src/engine/physics/queries/raycast.js +249 -0
  552. package/src/engine/physics/queries/shape_cast.d.ts +56 -0
  553. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -0
  554. package/src/engine/physics/queries/shape_cast.js +387 -0
  555. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  556. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  557. package/src/engine/physics/solver/friction_cone.js +37 -0
  558. package/src/engine/physics/solver/solve_contacts.d.ts +122 -0
  559. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  560. package/src/engine/physics/solver/solve_contacts.js +1016 -0
  561. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  562. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  563. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  564. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  565. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  566. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  567. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  568. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  569. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  570. package/src/engine/ecs/components/Motion.d.ts +0 -21
  571. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  572. package/src/engine/ecs/components/Motion.js +0 -27
  573. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  574. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  575. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  576. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  577. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  578. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  579. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  580. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  581. package/src/engine/physics/fluid/Fluid.js +0 -221
  582. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  583. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  584. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
@@ -12,10 +12,27 @@ export class FirstPersonPlayerControllerConfig {
12
12
  height: number;
13
13
  /** Crouched eye height. */
14
14
  crouchHeight: number;
15
+ /** Prone eye height (used by slide). Body is horizontal — eye
16
+ * just above ground level, head turned toward the direction
17
+ * of travel. */
18
+ proneHeight: number;
15
19
  /** Capsule radius, for downstream physics. */
16
20
  radius: number;
17
- /** Kilograms — drives bob amplitude and land-impact magnitude. */
21
+ /** Kilograms — affects bob, jump, landing, accel, and exertion via massRatio. */
18
22
  mass: number;
23
+ /** Reference mass against which `mass` is normalized (massRatio = mass/refMass). */
24
+ referenceMass: number;
25
+ /**
26
+ * How strongly `mass` couples into derived effects. 0 = mass is
27
+ * cosmetic; 1.0 = full coupling (heavier ⇒ lower jump, lower accel,
28
+ * harder landing, faster exhaustion). At 1.0 a 25% mass increase
29
+ * yields:
30
+ * jump peak ≈ 0.83× (∝ 1/√massRatio — kinematically motivated)
31
+ * ground accel ≈ 0.80× (∝ 1/massRatio — F = ma at fixed force)
32
+ * landing dip ≈ 1.25× (∝ massRatio — higher momentum to absorb)
33
+ * exertion rise ≈ 1.25× (∝ massRatio — more body to move)
34
+ */
35
+ massCouplingStrength: number;
19
36
  };
20
37
  motion: {
21
38
  walkSpeed: number;
@@ -23,12 +40,44 @@ export class FirstPersonPlayerControllerConfig {
23
40
  crouchSpeed: number;
24
41
  /** [0..1] how much intent influences velocity while airborne. */
25
42
  airControl: number;
26
- /** m/s^2 horizontal acceleration toward intent on ground. */
27
- groundAccel: number;
43
+ /**
44
+ * Half-life (seconds) for the mono-exponential approach to top
45
+ * sprint speed on the ground. The controller's ground-accel
46
+ * model is Hill-based:
47
+ * v(t) = v_max · (1 − e^(−t / τ))
48
+ * with τ = halfLife / ln 2. At each tick the velocity halves
49
+ * the remaining gap to `targetSpeed` every `halfLife` seconds.
50
+ *
51
+ * Default `0.116 s` gives ~95 % of `sprintSpeed` reached in
52
+ * 500 ms — the Apex Legends / Titanfall / modern CoD ramp
53
+ * window. The curve is naturally non-uniform: roughly 45 %
54
+ * of top speed in the first 100 ms, then the last 5 % takes
55
+ * 300 ms — so a quick tap-and-go still feels snappy while
56
+ * follow-up moves (slide, sprint-jump) require committed
57
+ * sprint time to be at top speed.
58
+ *
59
+ * Literature: Hill 1927 / Furusawa-Hill 1928 (force-velocity
60
+ * curve, original analytical formulation); Morin & Samozino
61
+ * 2016 (modern sprint profiling using the same mono-exp fit).
62
+ */
63
+ groundAccelHalfLife: number;
28
64
  /** m/s^2 horizontal deceleration toward 0 when intent is zero. */
29
65
  groundDecel: number;
30
66
  /** m/s^2 horizontal acceleration while airborne. */
31
67
  airAccel: number;
68
+ /**
69
+ * Top-speed multiplier applied while the move intent has a backward
70
+ * component (intent.move.y < 0). Backpedaling is mechanically slower
71
+ * than running forward — this also enforces a hard cap rather than
72
+ * letting "backward sprint" reach the same speed as forward sprint.
73
+ */
74
+ backwardSpeedFactor: number;
75
+ /**
76
+ * Acceleration multiplier while moving backward. Body has worse
77
+ * mechanical advantage when reversing — slower to start, slower to
78
+ * stop, sells the "fighting the gait" feel.
79
+ */
80
+ backwardAccelFactor: number;
32
81
  };
33
82
  jump: {
34
83
  /** Apex height of a clean jump, meters. */
@@ -69,6 +118,131 @@ export class FirstPersonPlayerControllerConfig {
69
118
  /** "hold" or "toggle" */
70
119
  mode: string;
71
120
  };
121
+ /**
122
+ * Wall-run ability — airborne + lateral wall + speed → run along the
123
+ * wall with reduced gravity. Camera tilts into the wall via the
124
+ * shared lean spring (consistent with the rest of the camera).
125
+ * Fields here are consumed by the {@link WallRun} ability when
126
+ * registered.
127
+ */
128
+ wallRun: {
129
+ /** Minimum horizontal speed (m/s) to engage wall-run. */
130
+ minSpeed: number;
131
+ /** Player must be airborne at least this long before wall-run can
132
+ * engage — prevents wall-run triggering off a jump's first frames. */
133
+ minAirborneTime: number;
134
+ /** Maximum wall-run duration (s). Auto-exits at the end. */
135
+ maxDuration: number;
136
+ /** Multiplier on base gravity while wall-running. Lower = longer hang. */
137
+ gravityFactor: number;
138
+ /** Camera tilt magnitude (deg) into the wall. Disabled by the
139
+ * motion-sickness toggle alongside the standard lean. */
140
+ cameraRollDeg: number;
141
+ };
142
+ /**
143
+ * Wall-jump ability — instantaneous off-wall impulse. Fires from
144
+ * either an active wall-run state or from near-wall airborne (a
145
+ * short window where the player is close enough to push off).
146
+ */
147
+ wallJump: {
148
+ /** Impulse magnitude away from the wall (m/s, applied along wall normal). */
149
+ outwardImpulse: number;
150
+ /** Upward component multiplier on jumpInitialVy. */
151
+ upFactor: number;
152
+ /** Max distance to wall (m) at which a near-wall-airborne wall-jump
153
+ * is allowed (when not already wall-running). */
154
+ nearWallMaxDistance: number;
155
+ };
156
+ /**
157
+ * Ledge-grab ability — snap to a forward ledge while descending and
158
+ * hang from it until the player releases. Climbing fatigue is
159
+ * modelled via the shared exertion channel: hang too long and you
160
+ * slip. Fields here are consumed by the {@link LedgeGrab} ability
161
+ * if registered; ignored otherwise.
162
+ */
163
+ ledgeGrab: {
164
+ /** Body Y offset from ledge top while hanging (negative — feet
165
+ * below the ledge so the body looks like it's gripping the
166
+ * edge). */
167
+ hangOffsetY: number;
168
+ /** Forward offset from the ledge edge (negative = pulled BACK
169
+ * from the edge so the body is against the wall under the
170
+ * ledge). */
171
+ hangOffsetForward: number;
172
+ /** Exertion rise per second while hanging — drives slip-by-
173
+ * fatigue. The base exertion rise scale (massRatios) applies. */
174
+ exertionRiseRate: number;
175
+ /** Player must be airborne at least this long before a ledge-
176
+ * grab can engage — prevents auto-catching mid-jump. */
177
+ minAirborneTime: number;
178
+ /** Vertical kick (multiplier on jumpInitialVy) given on a
179
+ * mantle-up release. Just enough to put the body above the
180
+ * ledge so mantle's ledgeAhead probe still resolves correctly
181
+ * on the next tick. */
182
+ mantleUpUpFactor: number;
183
+ };
184
+ /**
185
+ * Mantle ability — auto-triggers when the player approaches a
186
+ * reachable obstacle with forward intent. The body follows a scripted
187
+ * path (horizontal + vertical eases) onto the surface; player input
188
+ * is suspended for the path's duration. Fields here are consumed by
189
+ * the {@link Mantle} ability if registered; ignored otherwise.
190
+ */
191
+ mantle: {
192
+ /** Below this height (m above feet), the obstacle is just a step
193
+ * the player can walk over — no mantle. */
194
+ minHeight: number;
195
+ /** Above this, the surface is out of reach — no mantle. ~1.4m
196
+ * is chest height for a 1.8m body, which is the canonical
197
+ * "obstacle you can climb on but not over without help". */
198
+ maxHeight: number;
199
+ /** Total scripted-path duration (seconds). Short enough that the
200
+ * brief loss of player control isn't frustrating. */
201
+ duration: number;
202
+ /** How far past the obstacle edge the player lands (m). Slight
203
+ * forward bias so the player ends on top of the surface, not
204
+ * on the edge. */
205
+ forwardOffsetOnLand: number;
206
+ };
207
+ /**
208
+ * Slide ability — activates from sprint+crouch when grounded. The
209
+ * fields here are read by the {@link Slide} ability if it's registered
210
+ * on the controller; unused if Slide is not in use.
211
+ */
212
+ slide: {
213
+ /**
214
+ * Required horizontal speed to start a slide. Below this,
215
+ * crouch + sprint just transitions to a normal crouched walk.
216
+ *
217
+ * The default — `7.5 m/s` — sits between walkSpeed (4.5) and
218
+ * sprintSpeed (9), at ~83 % of sprint. Earning the slide is
219
+ * enforced by the ground-accel model: with
220
+ * `groundAccelHalfLife = 0.116 s`, reaching this threshold
221
+ * from standstill takes ~300 ms of sustained sprint — well
222
+ * past a normal reaction window. Walking off a ledge or
223
+ * accelerating down a slope into a slide is explicitly
224
+ * supported: anything that brings the player's horizontal
225
+ * speed above this threshold lets crouch engage a slide.
226
+ * (Following Apex Legends' velocity-only gate at 200 hu/s.)
227
+ */
228
+ minEntrySpeed: number;
229
+ /** Auto-exit threshold — slide ends when speed drops below this. */
230
+ endSpeed: number;
231
+ /** Horizontal deceleration (m/s²) while sliding. Lower than the
232
+ * normal groundDecel so slides preserve momentum longer. */
233
+ friction: number;
234
+ /** Non-interruptible window (seconds) after slide start — higher-
235
+ * priority abilities can't preempt during this window so the
236
+ * player isn't yanked out the instant they commit to a slide. */
237
+ startupWindow: number;
238
+ /** Multiplier on the jump initial Vy for slide-jump. 1.0 = same
239
+ * height as a standing jump; >1 gives slide-jump some extra
240
+ * reward for chaining the input. */
241
+ slideJumpUpFactor: number;
242
+ /** Vertical-impact-spring kick (m/s) at slide entry — the
243
+ * satisfying "thud" of dropping into the slide. */
244
+ entryImpactVelocity: number;
245
+ };
72
246
  bob: {
73
247
  stepFreqAtWalk: number;
74
248
  stepFreqExp: number;
@@ -79,6 +253,60 @@ export class FirstPersonPlayerControllerConfig {
79
253
  rollAtWalkDeg: number;
80
254
  /** Speeds below this don't tick the stride at all. */
81
255
  minStepSpeed: number;
256
+ /**
257
+ * Half-life of the bob-amplitude envelope (seconds). When the player
258
+ * starts/stops moving, the bob amplitude springs toward its natural
259
+ * value rather than cutting on/off — so releasing a movement key
260
+ * doesn't whiplash the head from full sway back to neutral. The
261
+ * stride phase itself still freezes when stationary; only the
262
+ * AMPLITUDE is temporally smoothed.
263
+ */
264
+ intensityHalfLife: number;
265
+ /**
266
+ * Vertical impact spring — kicked downward at each footfall. The
267
+ * spring's response shapes the actual vertical motion of the head:
268
+ * a sharp dip (foot arresting the head's fall), recovery through
269
+ * neutral, and a slight overshoot above neutral as the standing
270
+ * leg injects energy into the body (the "push" phase). Models the
271
+ * gait COM trajectory more accurately than a smooth sinusoid.
272
+ */
273
+ impactSpringHalfLife: number;
274
+ /** zeta < 1 → spring overshoots after impact, sells the leg-push. */
275
+ impactSpringZeta: number;
276
+ /**
277
+ * Multiplier converting "desired peak dip" (verticalAmpAtWalk + mass
278
+ * boost, scaled by intensity and back-pedal factor) into the actual
279
+ * velocity impulse delivered at footfall. Empirical — tuned so the
280
+ * default verticalAmpAtWalk produces the expected peak dip with the
281
+ * spring params above.
282
+ */
283
+ impactKickMultiplier: number;
284
+ /**
285
+ * Multipliers applied to bob amplitude when the player is moving
286
+ * backward (interpolated by "backwardness" — the negative dot of
287
+ * velocity onto screen-forward, normalized to sprint speed). At
288
+ * full back-pedal these are fully applied; at rest they have no
289
+ * effect.
290
+ *
291
+ * Lateral is intentionally larger than vertical: real back-gait
292
+ * has worse side-to-side balance than vertical compression, so
293
+ * the visual wobble should track that. Roll boosts each footfall's
294
+ * head-tilt for the same reason — sells "unstable footing".
295
+ */
296
+ backwardVerticalAmpFactor: number;
297
+ backwardLateralAmpFactor: number;
298
+ backwardRollFactor: number;
299
+ /**
300
+ * Bob roll × lean coupling: when the body is leaning into a turn
301
+ * (lean spring displaced), the per-stride head roll is biased
302
+ * toward the lean direction. At 0 the bob roll is symmetric
303
+ * regardless of lean. At 1.0 the bob roll excursions in the lean
304
+ * direction are doubled and the opposite-direction excursions go to
305
+ * zero. Typical 0.3–0.6 reads as a cohesive "leaning while running"
306
+ * gait. Normalized against cfg.lean.maxRollDeg so the coupling
307
+ * stays proportional regardless of how aggressive lean is tuned.
308
+ */
309
+ leanCouplingFactor: number;
82
310
  };
83
311
  breath: {
84
312
  rateRestHz: number;
@@ -89,13 +317,62 @@ export class FirstPersonPlayerControllerConfig {
89
317
  pitchAmpMaxDeg: number;
90
318
  /** ±20% amplitude noise rides on the sine. */
91
319
  noiseAmount: number;
320
+ /**
321
+ * Locomotor-respiratory coupling strength at full exertion. The
322
+ * breath-rate target is blended between purely metabolic (driven by
323
+ * exertion) and stride-aligned (an integer N strides per breath
324
+ * cycle). At 0 no coupling; at 1 breath rate is fully pulled toward
325
+ * the stride-aligned target.
326
+ *
327
+ * Coupling is SCALED by exertion — low exertion means the breath is
328
+ * dictated by metabolic demand alone, high sustained effort lets
329
+ * the diaphragm couple to gait impacts (mechanistically: heavier
330
+ * breathing means deeper chest excursions, which the gait's
331
+ * vertical accelerations bias toward integer ratios). Matches
332
+ * empirical findings in dynamic activity (Bernasconi & Kohl 1993,
333
+ * Bramble & Carrier 1983) — much weaker than steady-state running.
334
+ *
335
+ * Frequency-coupled only, NOT phase-locked: breath rate matches a
336
+ * sub-multiple of stride rate, but phase drifts. Holds the "loose"
337
+ * character the user asked for.
338
+ */
339
+ locomotorCouplingMax: number;
340
+ /** Coupling does not engage below this stride frequency (Hz). At
341
+ * walking pace your gait is too slow to mechanically influence
342
+ * breath; coupling really shows up at jog+ pace. */
343
+ couplingMinStrideFreqHz: number;
92
344
  };
93
345
  exertion: {
346
+ /** Per-second accumulation while sprinting (mass-scaled internally). */
94
347
  sprintRiseRate: number;
95
- jumpRise: number;
348
+ /** Per-second decay toward 0 when not under sustained load. */
96
349
  idleDecayRate: number;
350
+ /** Bump on jump fire — the muscular impulse of pushing off. */
351
+ jumpRise: number;
352
+ /** Bump on crouch-enter — the knee-grip on absorbing into a crouch.
353
+ * Small; we don't want crouch-spamming to instantly exhaust. */
354
+ crouchEnterRise: number;
355
+ /**
356
+ * Per-(m/s) impulse on landing — proportional to vertical impact
357
+ * speed. A clean low-jump landing barely registers; a hard fall
358
+ * delivers a noticeable bump. Clamped internally so an impossible
359
+ * fall doesn't max out exertion in one tick.
360
+ */
361
+ landImpulsePerVy: number;
362
+ /** Max impulse magnitude added by any single landing. */
363
+ landImpulseMax: number;
364
+ /** How long after exertion subsides before breath rate normalizes. */
97
365
  rateDecayHalfLife: number;
366
+ /** How long after exertion subsides before breath amplitude normalizes. */
98
367
  ampDecayHalfLife: number;
368
+ /** At full exertion, bob lateral amp is multiplied by 1 + this.
369
+ * Sells "tired wobble" — modest effect (10–20% recommended). */
370
+ bobLateralBoostAtMax: number;
371
+ /** At full exertion, the head droops forward by this many degrees.
372
+ * Sells visual fatigue without compromising aim. Subtle. */
373
+ headDroopAtMaxDeg: number;
374
+ /** Spring half-life for the head-droop transition. */
375
+ headDroopHalfLife: number;
99
376
  };
100
377
  lean: {
101
378
  enabled: boolean;
@@ -105,6 +382,29 @@ export class FirstPersonPlayerControllerConfig {
105
382
  halfLife: number;
106
383
  zeta: number;
107
384
  };
385
+ /**
386
+ * Yaw-rate "look-lean": camera banks into mouse-driven turns even
387
+ * without strafe input. Disable for motion-sickness sensitivity.
388
+ */
389
+ lookLeanEnabled: boolean;
390
+ /**
391
+ * Degrees of roll per rad/s of yaw rate. ~3 means a 180°/s turn
392
+ * (slow camera pan) gives ~16.5° of bank; a fast mouse flick at
393
+ * 5 rad/s (≈286°/s) would saturate against the clamp below.
394
+ */
395
+ lookLeanDegPerRadPerSec: number;
396
+ /** Yaw rate is clamped to ±this (rad/s) before scaling — prevents
397
+ * single-frame flicks from spiking the lean target. */
398
+ lookLeanYawRateClamp: number;
399
+ /**
400
+ * Multiplier applied to look-lean (yaw-rate banking) when crouched.
401
+ * Crouched stance is low and stable; banking from a mouse turn
402
+ * reads as unmotivated. Default 0 fully disables; dial up to add
403
+ * a subtle tilt without it feeling like you're running. The lateral-
404
+ * acceleration lean is NOT affected by this — it scales naturally
405
+ * with crouch speeds since accel magnitudes drop.
406
+ */
407
+ crouchLookLeanFactor: number;
108
408
  };
109
409
  fov: {
110
410
  base: number;
@@ -117,6 +417,22 @@ export class FirstPersonPlayerControllerConfig {
117
417
  pitchMaxDeg: number;
118
418
  invertY: boolean;
119
419
  };
420
+ /**
421
+ * Postural shifts driven by intent — distinct from look (which is
422
+ * player-driven) and from bob (which is procedural). Models
423
+ * Mirror's Edge-style "commitment to motion": sprinting tilts the head
424
+ * forward as the body leans into the run. Slow spring so it builds up
425
+ * over a second or so rather than snapping — it's a *posture* change,
426
+ * not a flick.
427
+ */
428
+ posture: {
429
+ /** Forward pitch (deg) applied to the eye at full sprint. Positive = look-down. */
430
+ sprintForwardPitchDeg: number;
431
+ /** Spring half-life for the sprint pitch transition. */
432
+ sprintForwardPitchHalfLife: number;
433
+ /** Small forward eye-position shift (m) at full sprint — head leads the hips. */
434
+ sprintForwardShiftM: number;
435
+ };
120
436
  gravity: {
121
437
  /** Default gravity magnitude (m/s^2). Overridden by computeJumpFromApex once
122
438
  * the jump tunables are resolved; kept here so non-jumping entities (NPCs,
@@ -129,10 +445,27 @@ export class FirstPersonPlayerControllerConfig {
129
445
  height: number;
130
446
  /** Crouched eye height. */
131
447
  crouchHeight: number;
448
+ /** Prone eye height (used by slide). Body is horizontal — eye
449
+ * just above ground level, head turned toward the direction
450
+ * of travel. */
451
+ proneHeight: number;
132
452
  /** Capsule radius, for downstream physics. */
133
453
  radius: number;
134
- /** Kilograms — drives bob amplitude and land-impact magnitude. */
454
+ /** Kilograms — affects bob, jump, landing, accel, and exertion via massRatio. */
135
455
  mass: number;
456
+ /** Reference mass against which `mass` is normalized (massRatio = mass/refMass). */
457
+ referenceMass: number;
458
+ /**
459
+ * How strongly `mass` couples into derived effects. 0 = mass is
460
+ * cosmetic; 1.0 = full coupling (heavier ⇒ lower jump, lower accel,
461
+ * harder landing, faster exhaustion). At 1.0 a 25% mass increase
462
+ * yields:
463
+ * jump peak ≈ 0.83× (∝ 1/√massRatio — kinematically motivated)
464
+ * ground accel ≈ 0.80× (∝ 1/massRatio — F = ma at fixed force)
465
+ * landing dip ≈ 1.25× (∝ massRatio — higher momentum to absorb)
466
+ * exertion rise ≈ 1.25× (∝ massRatio — more body to move)
467
+ */
468
+ massCouplingStrength: number;
136
469
  };
137
470
  motion: {
138
471
  walkSpeed: number;
@@ -140,12 +473,44 @@ export class FirstPersonPlayerControllerConfig {
140
473
  crouchSpeed: number;
141
474
  /** [0..1] how much intent influences velocity while airborne. */
142
475
  airControl: number;
143
- /** m/s^2 horizontal acceleration toward intent on ground. */
144
- groundAccel: number;
476
+ /**
477
+ * Half-life (seconds) for the mono-exponential approach to top
478
+ * sprint speed on the ground. The controller's ground-accel
479
+ * model is Hill-based:
480
+ * v(t) = v_max · (1 − e^(−t / τ))
481
+ * with τ = halfLife / ln 2. At each tick the velocity halves
482
+ * the remaining gap to `targetSpeed` every `halfLife` seconds.
483
+ *
484
+ * Default `0.116 s` gives ~95 % of `sprintSpeed` reached in
485
+ * 500 ms — the Apex Legends / Titanfall / modern CoD ramp
486
+ * window. The curve is naturally non-uniform: roughly 45 %
487
+ * of top speed in the first 100 ms, then the last 5 % takes
488
+ * 300 ms — so a quick tap-and-go still feels snappy while
489
+ * follow-up moves (slide, sprint-jump) require committed
490
+ * sprint time to be at top speed.
491
+ *
492
+ * Literature: Hill 1927 / Furusawa-Hill 1928 (force-velocity
493
+ * curve, original analytical formulation); Morin & Samozino
494
+ * 2016 (modern sprint profiling using the same mono-exp fit).
495
+ */
496
+ groundAccelHalfLife: number;
145
497
  /** m/s^2 horizontal deceleration toward 0 when intent is zero. */
146
498
  groundDecel: number;
147
499
  /** m/s^2 horizontal acceleration while airborne. */
148
500
  airAccel: number;
501
+ /**
502
+ * Top-speed multiplier applied while the move intent has a backward
503
+ * component (intent.move.y < 0). Backpedaling is mechanically slower
504
+ * than running forward — this also enforces a hard cap rather than
505
+ * letting "backward sprint" reach the same speed as forward sprint.
506
+ */
507
+ backwardSpeedFactor: number;
508
+ /**
509
+ * Acceleration multiplier while moving backward. Body has worse
510
+ * mechanical advantage when reversing — slower to start, slower to
511
+ * stop, sells the "fighting the gait" feel.
512
+ */
513
+ backwardAccelFactor: number;
149
514
  };
150
515
  jump: {
151
516
  anticipation: {
@@ -186,6 +551,100 @@ export class FirstPersonPlayerControllerConfig {
186
551
  /** "hold" or "toggle" */
187
552
  mode: string;
188
553
  };
554
+ ledgeGrab: {
555
+ /** Body Y offset from ledge top while hanging (negative — feet
556
+ * below the ledge so the body looks like it's gripping the
557
+ * edge). */
558
+ hangOffsetY: number;
559
+ /** Forward offset from the ledge edge (negative = pulled BACK
560
+ * from the edge so the body is against the wall under the
561
+ * ledge). */
562
+ hangOffsetForward: number;
563
+ /** Exertion rise per second while hanging — drives slip-by-
564
+ * fatigue. The base exertion rise scale (massRatios) applies. */
565
+ exertionRiseRate: number;
566
+ /** Player must be airborne at least this long before a ledge-
567
+ * grab can engage — prevents auto-catching mid-jump. */
568
+ minAirborneTime: number;
569
+ /** Vertical kick (multiplier on jumpInitialVy) given on a
570
+ * mantle-up release. Just enough to put the body above the
571
+ * ledge so mantle's ledgeAhead probe still resolves correctly
572
+ * on the next tick. */
573
+ mantleUpUpFactor: number;
574
+ };
575
+ mantle: {
576
+ /** Below this height (m above feet), the obstacle is just a step
577
+ * the player can walk over — no mantle. */
578
+ minHeight: number;
579
+ /** Above this, the surface is out of reach — no mantle. ~1.4m
580
+ * is chest height for a 1.8m body, which is the canonical
581
+ * "obstacle you can climb on but not over without help". */
582
+ maxHeight: number;
583
+ /** Total scripted-path duration (seconds). Short enough that the
584
+ * brief loss of player control isn't frustrating. */
585
+ duration: number;
586
+ /** How far past the obstacle edge the player lands (m). Slight
587
+ * forward bias so the player ends on top of the surface, not
588
+ * on the edge. */
589
+ forwardOffsetOnLand: number;
590
+ };
591
+ wallRun: {
592
+ /** Minimum horizontal speed (m/s) to engage wall-run. */
593
+ minSpeed: number;
594
+ /** Player must be airborne at least this long before wall-run can
595
+ * engage — prevents wall-run triggering off a jump's first frames. */
596
+ minAirborneTime: number;
597
+ /** Maximum wall-run duration (s). Auto-exits at the end. */
598
+ maxDuration: number;
599
+ /** Multiplier on base gravity while wall-running. Lower = longer hang. */
600
+ gravityFactor: number;
601
+ /** Camera tilt magnitude (deg) into the wall. Disabled by the
602
+ * motion-sickness toggle alongside the standard lean. */
603
+ cameraRollDeg: number;
604
+ };
605
+ wallJump: {
606
+ /** Impulse magnitude away from the wall (m/s, applied along wall normal). */
607
+ outwardImpulse: number;
608
+ /** Upward component multiplier on jumpInitialVy. */
609
+ upFactor: number;
610
+ /** Max distance to wall (m) at which a near-wall-airborne wall-jump
611
+ * is allowed (when not already wall-running). */
612
+ nearWallMaxDistance: number;
613
+ };
614
+ slide: {
615
+ /**
616
+ * Required horizontal speed to start a slide. Below this,
617
+ * crouch + sprint just transitions to a normal crouched walk.
618
+ *
619
+ * The default — `7.5 m/s` — sits between walkSpeed (4.5) and
620
+ * sprintSpeed (9), at ~83 % of sprint. Earning the slide is
621
+ * enforced by the ground-accel model: with
622
+ * `groundAccelHalfLife = 0.116 s`, reaching this threshold
623
+ * from standstill takes ~300 ms of sustained sprint — well
624
+ * past a normal reaction window. Walking off a ledge or
625
+ * accelerating down a slope into a slide is explicitly
626
+ * supported: anything that brings the player's horizontal
627
+ * speed above this threshold lets crouch engage a slide.
628
+ * (Following Apex Legends' velocity-only gate at 200 hu/s.)
629
+ */
630
+ minEntrySpeed: number;
631
+ /** Auto-exit threshold — slide ends when speed drops below this. */
632
+ endSpeed: number;
633
+ /** Horizontal deceleration (m/s²) while sliding. Lower than the
634
+ * normal groundDecel so slides preserve momentum longer. */
635
+ friction: number;
636
+ /** Non-interruptible window (seconds) after slide start — higher-
637
+ * priority abilities can't preempt during this window so the
638
+ * player isn't yanked out the instant they commit to a slide. */
639
+ startupWindow: number;
640
+ /** Multiplier on the jump initial Vy for slide-jump. 1.0 = same
641
+ * height as a standing jump; >1 gives slide-jump some extra
642
+ * reward for chaining the input. */
643
+ slideJumpUpFactor: number;
644
+ /** Vertical-impact-spring kick (m/s) at slide entry — the
645
+ * satisfying "thud" of dropping into the slide. */
646
+ entryImpactVelocity: number;
647
+ };
189
648
  bob: {
190
649
  stepFreqAtWalk: number;
191
650
  stepFreqExp: number;
@@ -196,6 +655,60 @@ export class FirstPersonPlayerControllerConfig {
196
655
  rollAtWalkDeg: number;
197
656
  /** Speeds below this don't tick the stride at all. */
198
657
  minStepSpeed: number;
658
+ /**
659
+ * Half-life of the bob-amplitude envelope (seconds). When the player
660
+ * starts/stops moving, the bob amplitude springs toward its natural
661
+ * value rather than cutting on/off — so releasing a movement key
662
+ * doesn't whiplash the head from full sway back to neutral. The
663
+ * stride phase itself still freezes when stationary; only the
664
+ * AMPLITUDE is temporally smoothed.
665
+ */
666
+ intensityHalfLife: number;
667
+ /**
668
+ * Vertical impact spring — kicked downward at each footfall. The
669
+ * spring's response shapes the actual vertical motion of the head:
670
+ * a sharp dip (foot arresting the head's fall), recovery through
671
+ * neutral, and a slight overshoot above neutral as the standing
672
+ * leg injects energy into the body (the "push" phase). Models the
673
+ * gait COM trajectory more accurately than a smooth sinusoid.
674
+ */
675
+ impactSpringHalfLife: number;
676
+ /** zeta < 1 → spring overshoots after impact, sells the leg-push. */
677
+ impactSpringZeta: number;
678
+ /**
679
+ * Multiplier converting "desired peak dip" (verticalAmpAtWalk + mass
680
+ * boost, scaled by intensity and back-pedal factor) into the actual
681
+ * velocity impulse delivered at footfall. Empirical — tuned so the
682
+ * default verticalAmpAtWalk produces the expected peak dip with the
683
+ * spring params above.
684
+ */
685
+ impactKickMultiplier: number;
686
+ /**
687
+ * Multipliers applied to bob amplitude when the player is moving
688
+ * backward (interpolated by "backwardness" — the negative dot of
689
+ * velocity onto screen-forward, normalized to sprint speed). At
690
+ * full back-pedal these are fully applied; at rest they have no
691
+ * effect.
692
+ *
693
+ * Lateral is intentionally larger than vertical: real back-gait
694
+ * has worse side-to-side balance than vertical compression, so
695
+ * the visual wobble should track that. Roll boosts each footfall's
696
+ * head-tilt for the same reason — sells "unstable footing".
697
+ */
698
+ backwardVerticalAmpFactor: number;
699
+ backwardLateralAmpFactor: number;
700
+ backwardRollFactor: number;
701
+ /**
702
+ * Bob roll × lean coupling: when the body is leaning into a turn
703
+ * (lean spring displaced), the per-stride head roll is biased
704
+ * toward the lean direction. At 0 the bob roll is symmetric
705
+ * regardless of lean. At 1.0 the bob roll excursions in the lean
706
+ * direction are doubled and the opposite-direction excursions go to
707
+ * zero. Typical 0.3–0.6 reads as a cohesive "leaning while running"
708
+ * gait. Normalized against cfg.lean.maxRollDeg so the coupling
709
+ * stays proportional regardless of how aggressive lean is tuned.
710
+ */
711
+ leanCouplingFactor: number;
199
712
  };
200
713
  breath: {
201
714
  rateRestHz: number;
@@ -206,13 +719,62 @@ export class FirstPersonPlayerControllerConfig {
206
719
  pitchAmpMaxDeg: number;
207
720
  /** ±20% amplitude noise rides on the sine. */
208
721
  noiseAmount: number;
722
+ /**
723
+ * Locomotor-respiratory coupling strength at full exertion. The
724
+ * breath-rate target is blended between purely metabolic (driven by
725
+ * exertion) and stride-aligned (an integer N strides per breath
726
+ * cycle). At 0 no coupling; at 1 breath rate is fully pulled toward
727
+ * the stride-aligned target.
728
+ *
729
+ * Coupling is SCALED by exertion — low exertion means the breath is
730
+ * dictated by metabolic demand alone, high sustained effort lets
731
+ * the diaphragm couple to gait impacts (mechanistically: heavier
732
+ * breathing means deeper chest excursions, which the gait's
733
+ * vertical accelerations bias toward integer ratios). Matches
734
+ * empirical findings in dynamic activity (Bernasconi & Kohl 1993,
735
+ * Bramble & Carrier 1983) — much weaker than steady-state running.
736
+ *
737
+ * Frequency-coupled only, NOT phase-locked: breath rate matches a
738
+ * sub-multiple of stride rate, but phase drifts. Holds the "loose"
739
+ * character the user asked for.
740
+ */
741
+ locomotorCouplingMax: number;
742
+ /** Coupling does not engage below this stride frequency (Hz). At
743
+ * walking pace your gait is too slow to mechanically influence
744
+ * breath; coupling really shows up at jog+ pace. */
745
+ couplingMinStrideFreqHz: number;
209
746
  };
210
747
  exertion: {
748
+ /** Per-second accumulation while sprinting (mass-scaled internally). */
211
749
  sprintRiseRate: number;
212
- jumpRise: number;
750
+ /** Per-second decay toward 0 when not under sustained load. */
213
751
  idleDecayRate: number;
752
+ /** Bump on jump fire — the muscular impulse of pushing off. */
753
+ jumpRise: number;
754
+ /** Bump on crouch-enter — the knee-grip on absorbing into a crouch.
755
+ * Small; we don't want crouch-spamming to instantly exhaust. */
756
+ crouchEnterRise: number;
757
+ /**
758
+ * Per-(m/s) impulse on landing — proportional to vertical impact
759
+ * speed. A clean low-jump landing barely registers; a hard fall
760
+ * delivers a noticeable bump. Clamped internally so an impossible
761
+ * fall doesn't max out exertion in one tick.
762
+ */
763
+ landImpulsePerVy: number;
764
+ /** Max impulse magnitude added by any single landing. */
765
+ landImpulseMax: number;
766
+ /** How long after exertion subsides before breath rate normalizes. */
214
767
  rateDecayHalfLife: number;
768
+ /** How long after exertion subsides before breath amplitude normalizes. */
215
769
  ampDecayHalfLife: number;
770
+ /** At full exertion, bob lateral amp is multiplied by 1 + this.
771
+ * Sells "tired wobble" — modest effect (10–20% recommended). */
772
+ bobLateralBoostAtMax: number;
773
+ /** At full exertion, the head droops forward by this many degrees.
774
+ * Sells visual fatigue without compromising aim. Subtle. */
775
+ headDroopAtMaxDeg: number;
776
+ /** Spring half-life for the head-droop transition. */
777
+ headDroopHalfLife: number;
216
778
  };
217
779
  lean: {
218
780
  spring: {
@@ -222,6 +784,29 @@ export class FirstPersonPlayerControllerConfig {
222
784
  enabled: boolean;
223
785
  /** Degrees of roll per (lateral m/s^2 / 9.81). */
224
786
  maxRollDeg: number;
787
+ /**
788
+ * Yaw-rate "look-lean": camera banks into mouse-driven turns even
789
+ * without strafe input. Disable for motion-sickness sensitivity.
790
+ */
791
+ lookLeanEnabled: boolean;
792
+ /**
793
+ * Degrees of roll per rad/s of yaw rate. ~3 means a 180°/s turn
794
+ * (slow camera pan) gives ~16.5° of bank; a fast mouse flick at
795
+ * 5 rad/s (≈286°/s) would saturate against the clamp below.
796
+ */
797
+ lookLeanDegPerRadPerSec: number;
798
+ /** Yaw rate is clamped to ±this (rad/s) before scaling — prevents
799
+ * single-frame flicks from spiking the lean target. */
800
+ lookLeanYawRateClamp: number;
801
+ /**
802
+ * Multiplier applied to look-lean (yaw-rate banking) when crouched.
803
+ * Crouched stance is low and stable; banking from a mouse turn
804
+ * reads as unmotivated. Default 0 fully disables; dial up to add
805
+ * a subtle tilt without it feeling like you're running. The lateral-
806
+ * acceleration lean is NOT affected by this — it scales naturally
807
+ * with crouch speeds since accel magnitudes drop.
808
+ */
809
+ crouchLookLeanFactor: number;
225
810
  };
226
811
  fov: {
227
812
  base: number;
@@ -234,6 +819,14 @@ export class FirstPersonPlayerControllerConfig {
234
819
  pitchMaxDeg: number;
235
820
  invertY: boolean;
236
821
  };
822
+ posture: {
823
+ /** Forward pitch (deg) applied to the eye at full sprint. Positive = look-down. */
824
+ sprintForwardPitchDeg: number;
825
+ /** Spring half-life for the sprint pitch transition. */
826
+ sprintForwardPitchHalfLife: number;
827
+ /** Small forward eye-position shift (m) at full sprint — head leads the hips. */
828
+ sprintForwardShiftM: number;
829
+ };
237
830
  gravity: {
238
831
  /** Default gravity magnitude (m/s^2). Overridden by computeJumpFromApex once
239
832
  * the jump tunables are resolved; kept here so non-jumping entities (NPCs,