@woosh/meep-engine 2.138.20 → 2.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/package.json +1 -1
  2. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts +3 -3
  3. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts.map +1 -1
  4. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js +4 -4
  5. package/src/core/collection/PairUint32Map.d.ts +100 -0
  6. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  7. package/src/core/collection/PairUint32Map.js +321 -0
  8. package/src/core/collection/Uint32Map.d.ts +119 -0
  9. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  10. package/src/core/collection/Uint32Map.js +345 -0
  11. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  12. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  13. package/src/core/collection/array/array_shuffle.js +27 -22
  14. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  15. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  16. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  17. package/src/core/collection/heap/Uint32Heap.js +1 -1
  18. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  19. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  20. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  21. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +30 -0
  22. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -0
  23. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +93 -0
  24. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  25. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  26. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  27. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +54 -0
  28. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -0
  29. package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +69 -0
  30. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +24 -2
  31. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/AbstractShape3D.js +24 -1
  33. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  34. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  36. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  37. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  38. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  39. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +148 -0
  40. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -0
  41. package/src/core/geom/3d/shape/HeightMapShape3D.js +451 -0
  42. package/src/core/geom/3d/shape/MeshShape3D.d.ts +210 -0
  43. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -0
  44. package/src/core/geom/3d/shape/MeshShape3D.js +593 -0
  45. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  46. package/src/core/geom/3d/shape/TransformedShape3D.js +46 -2
  47. package/src/core/geom/3d/shape/Triangle3D.d.ts +95 -0
  48. package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -0
  49. package/src/core/geom/3d/shape/Triangle3D.js +318 -0
  50. package/src/core/geom/3d/shape/UnionShape3D.js +13 -0
  51. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  52. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  53. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  54. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  55. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  56. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  57. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts +30 -0
  58. package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts.map +1 -0
  59. package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +64 -0
  60. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  61. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  62. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  63. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  64. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  66. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  67. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  69. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  70. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  71. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +671 -0
  72. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts +28 -0
  73. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts.map +1 -0
  74. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.js +48 -0
  75. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  76. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  77. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  78. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  79. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  80. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  81. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  82. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  83. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  84. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  85. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  86. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  87. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  88. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  89. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +387 -0
  90. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +35 -0
  91. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  92. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +140 -0
  93. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +31 -0
  94. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  95. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +97 -0
  96. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  97. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  98. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  99. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +41 -0
  100. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  101. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +124 -13
  102. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  103. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  104. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  105. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  106. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  108. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  109. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  111. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  112. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  113. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  114. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  115. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  116. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  117. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  118. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  119. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  120. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  121. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  122. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  123. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  124. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  125. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  126. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  127. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  128. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  129. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  130. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  131. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  132. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  133. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  134. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  135. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  136. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  137. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  138. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  139. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  140. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  141. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  142. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  143. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  144. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts +2 -2
  145. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts.map +1 -1
  146. package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +1 -1
  147. package/src/core/geom/vec3/v3_dot_array_array.d.ts +3 -3
  148. package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +1 -1
  149. package/src/core/geom/vec3/v3_dot_array_array.js +2 -2
  150. package/src/core/geom/vec3/v3_negate_array.d.ts +3 -3
  151. package/src/core/geom/vec3/v3_negate_array.d.ts.map +1 -1
  152. package/src/core/geom/vec3/v3_negate_array.js +2 -2
  153. package/src/core/geom/vec3/v3_quat3_apply.d.ts +29 -0
  154. package/src/core/geom/vec3/v3_quat3_apply.d.ts.map +1 -0
  155. package/src/core/geom/vec3/v3_quat3_apply.js +39 -0
  156. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +30 -0
  157. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts.map +1 -0
  158. package/src/core/geom/vec3/v3_quat3_apply_inverse.js +41 -0
  159. package/src/core/geom/vec3/v3_triple_cross_product.d.ts +32 -0
  160. package/src/core/geom/vec3/v3_triple_cross_product.d.ts.map +1 -0
  161. package/src/core/geom/vec3/v3_triple_cross_product.js +45 -0
  162. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  163. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  164. package/src/core/graph/csr/CSRGraph.js +319 -0
  165. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  166. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  167. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  168. package/src/core/graph/metis/metis.d.ts +19 -0
  169. package/src/core/graph/metis/metis.d.ts.map +1 -1
  170. package/src/core/graph/metis/metis.js +20 -0
  171. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  172. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  173. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  174. package/src/core/graph/metis/metis_options.d.ts +17 -2
  175. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  176. package/src/core/graph/metis/metis_options.js +17 -2
  177. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  178. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  180. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  181. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  183. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  184. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  186. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  187. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  188. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  189. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  190. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  191. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  192. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  193. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  194. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  195. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  196. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  197. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  198. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  199. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  200. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  201. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  202. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  203. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  204. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  205. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  206. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  207. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  208. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  209. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  210. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  211. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  212. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  213. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  214. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  215. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  216. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  217. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  218. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  219. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  220. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  221. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  222. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  223. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  224. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  225. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  226. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  227. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  228. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  229. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  230. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  231. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  232. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  233. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  234. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  235. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  236. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  237. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  238. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  239. package/src/engine/EngineHarness.d.ts +3 -1
  240. package/src/engine/EngineHarness.d.ts.map +1 -1
  241. package/src/engine/EngineHarness.js +3 -0
  242. package/src/engine/control/first-person/DESIGN.md +30 -6
  243. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  244. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +115 -9
  245. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  246. package/src/engine/control/first-person/FirstPersonPlayerController.js +211 -176
  247. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +601 -8
  248. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  249. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +349 -8
  250. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +319 -23
  251. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  252. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +1789 -799
  253. package/src/engine/control/first-person/TODO.md +173 -0
  254. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  255. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  256. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  257. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  258. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  259. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  260. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  261. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  262. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  263. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  264. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  265. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  266. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  267. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  268. package/src/engine/control/first-person/abilities/Slide.js +166 -0
  269. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  270. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  271. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  272. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  273. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  274. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  275. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  276. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  277. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  278. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  279. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  280. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  281. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  282. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  283. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  284. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  285. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  286. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  287. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  288. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  289. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  290. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  291. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  292. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  293. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  294. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  295. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  296. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  297. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  298. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  299. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  300. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  301. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  302. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  303. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  304. package/src/engine/control/first-person/math/Spring.js +71 -0
  305. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  306. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  307. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  308. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  309. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  310. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  311. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  312. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  313. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  314. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  315. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  316. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  317. package/src/engine/control/first-person/prototype_first_person_controller.js +637 -120
  318. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  319. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  320. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  321. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  322. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  323. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  324. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  325. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  326. package/src/engine/control/first-person/test/buildTestPlayer.js +36 -0
  327. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  328. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  329. package/src/engine/graphics/ecs/light/Light.js +27 -0
  330. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  331. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  332. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  333. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  334. package/src/engine/graphics/geometry/CapsuleGeometry.d.ts +42 -0
  335. package/src/engine/graphics/geometry/CapsuleGeometry.d.ts.map +1 -0
  336. package/src/engine/graphics/geometry/CapsuleGeometry.js +171 -0
  337. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  338. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  339. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  340. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  341. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  342. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  343. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  344. package/src/engine/physics/BULLET_REVIEW.md +945 -0
  345. package/src/engine/physics/CANNON_REVIEW.md +1300 -0
  346. package/src/engine/physics/JOLT_REVIEW.md +913 -0
  347. package/src/engine/physics/PLAN.md +461 -0
  348. package/src/engine/physics/RAPIER_REVIEW.md +934 -0
  349. package/src/engine/physics/REVIEW_001_ACTION_PLAN.md +642 -0
  350. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  351. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  352. package/src/engine/physics/body/BodyStorage.js +427 -0
  353. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  354. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  355. package/src/engine/physics/broadphase/PairList.js +97 -0
  356. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  357. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  358. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  359. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  360. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  361. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  362. package/src/engine/physics/contact/ManifoldStore.d.ts +299 -0
  363. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  364. package/src/engine/physics/contact/ManifoldStore.js +608 -0
  365. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  366. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  367. package/src/engine/physics/ecs/BodyKind.js +24 -0
  368. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  369. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  370. package/src/engine/physics/ecs/Collider.js +136 -0
  371. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  372. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  373. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  374. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  375. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  376. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  377. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  378. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  379. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  380. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  381. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  382. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  383. package/src/engine/physics/ecs/PhysicsSystem.d.ts +628 -0
  384. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  385. package/src/engine/physics/ecs/PhysicsSystem.js +1301 -0
  386. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  387. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  388. package/src/engine/physics/ecs/RigidBody.js +240 -0
  389. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  390. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  391. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  392. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  393. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  394. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  395. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  396. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  397. package/src/engine/physics/ecs/SleepState.js +12 -0
  398. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  399. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  400. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  401. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  402. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  403. package/src/engine/physics/events/diff_manifolds.js +50 -0
  404. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  405. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  406. package/src/engine/physics/fluid/FluidField.js +510 -66
  407. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  408. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  409. package/src/engine/physics/fluid/FluidSimulator.js +456 -95
  410. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  411. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  412. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  413. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  414. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  415. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  416. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  417. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  418. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  419. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  420. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  421. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  422. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  423. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  424. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  425. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  426. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  427. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  428. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  429. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  430. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  431. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  432. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  433. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  434. package/src/engine/physics/fluid/prototype.js +102 -91
  435. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  436. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  437. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  438. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  439. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  440. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  441. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  442. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  443. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  444. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  445. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  446. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  447. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  448. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  449. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  450. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  451. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  452. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  453. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  454. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  455. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  456. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  457. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  458. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  459. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  460. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  461. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  462. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  463. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  464. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  465. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +48 -0
  466. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  467. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +92 -0
  468. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +6 -6
  469. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  470. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +76 -32
  471. package/src/engine/physics/gjk/gjk.d.ts +28 -2
  472. package/src/engine/physics/gjk/gjk.d.ts.map +1 -1
  473. package/src/engine/physics/gjk/gjk.js +421 -378
  474. package/src/engine/physics/gjk/minkowski_support.d.ts +37 -0
  475. package/src/engine/physics/gjk/minkowski_support.d.ts.map +1 -0
  476. package/src/engine/physics/gjk/minkowski_support.js +75 -0
  477. package/src/engine/physics/gjk/mpr.d.ts +56 -0
  478. package/src/engine/physics/gjk/mpr.d.ts.map +1 -0
  479. package/src/engine/physics/gjk/mpr.js +344 -0
  480. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +44 -0
  481. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  482. package/src/engine/physics/inertia/world_inverse_inertia.js +77 -0
  483. package/src/engine/physics/integration/integrate_position.d.ts +34 -0
  484. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  485. package/src/engine/physics/integration/integrate_position.js +79 -0
  486. package/src/engine/physics/integration/integrate_velocity.d.ts +55 -0
  487. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  488. package/src/engine/physics/integration/integrate_velocity.js +160 -0
  489. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  490. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  491. package/src/engine/physics/integration/quat_integrate.js +62 -0
  492. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  493. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  494. package/src/engine/physics/island/IslandBuilder.js +411 -0
  495. package/src/engine/physics/island/union_find.d.ts +51 -0
  496. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  497. package/src/engine/physics/island/union_find.js +76 -0
  498. package/src/engine/physics/narrowphase/PosedShape.d.ts +51 -0
  499. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  500. package/src/engine/physics/narrowphase/PosedShape.js +108 -0
  501. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  502. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  503. package/src/engine/physics/narrowphase/box_box_manifold.js +639 -0
  504. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +30 -0
  505. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -0
  506. package/src/engine/physics/narrowphase/box_triangle_contact.js +811 -0
  507. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  508. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  509. package/src/engine/physics/narrowphase/capsule_contacts.js +462 -0
  510. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +71 -0
  511. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -0
  512. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +375 -0
  513. package/src/engine/physics/narrowphase/compute_penetration.d.ts +91 -0
  514. package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -0
  515. package/src/engine/physics/narrowphase/compute_penetration.js +396 -0
  516. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts +35 -0
  517. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +1 -0
  518. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.js +80 -0
  519. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +31 -0
  520. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -0
  521. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +55 -0
  522. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +42 -0
  523. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -0
  524. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +204 -0
  525. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +42 -0
  526. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -0
  527. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +94 -0
  528. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +37 -0
  529. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -0
  530. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +37 -0
  531. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +17 -0
  532. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  533. package/src/engine/physics/narrowphase/narrowphase_step.js +1422 -0
  534. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  535. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  536. package/src/engine/physics/narrowphase/sphere_box_contact.js +123 -0
  537. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  538. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  539. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  540. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +48 -0
  541. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -0
  542. package/src/engine/physics/narrowphase/sphere_triangle_contact.js +143 -0
  543. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  544. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  545. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  546. package/src/engine/physics/queries/overlap_shape.d.ts +51 -0
  547. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -0
  548. package/src/engine/physics/queries/overlap_shape.js +183 -0
  549. package/src/engine/physics/queries/raycast.d.ts +20 -0
  550. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  551. package/src/engine/physics/queries/raycast.js +249 -0
  552. package/src/engine/physics/queries/shape_cast.d.ts +56 -0
  553. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -0
  554. package/src/engine/physics/queries/shape_cast.js +387 -0
  555. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  556. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  557. package/src/engine/physics/solver/friction_cone.js +37 -0
  558. package/src/engine/physics/solver/solve_contacts.d.ts +122 -0
  559. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  560. package/src/engine/physics/solver/solve_contacts.js +1016 -0
  561. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  562. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  563. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  564. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  565. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  566. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  567. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  568. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  569. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  570. package/src/engine/ecs/components/Motion.d.ts +0 -21
  571. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  572. package/src/engine/ecs/components/Motion.js +0 -27
  573. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  574. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  575. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  576. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  577. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  578. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  579. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  580. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  581. package/src/engine/physics/fluid/Fluid.js +0 -221
  582. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  583. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  584. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
@@ -0,0 +1,166 @@
1
+ import { DecisionPoint } from "../mastery/DecisionPoint.js";
2
+ import { FirstPersonLocomotionMode } from "../pose/FirstPersonPose.js";
3
+ import { FirstPersonPosture } from "../pose/FirstPersonPosture.js";
4
+ import { Ability } from "./Ability.js";
5
+
6
+ /**
7
+ * Slide ability — sprint + crouch-press while grounded transitions into
8
+ * a low-friction slide that preserves horizontal momentum. Exit on:
9
+ * - crouch released
10
+ * - horizontal speed falls below `cfg.slide.endSpeed`
11
+ * - airborne (lost ground contact)
12
+ * - jump pressed → fires a slide-jump (preserves momentum + adds jump
13
+ * impulse; the only way to exit while keeping all your speed)
14
+ *
15
+ * The ability has a non-interruptible startup window — once the player
16
+ * commits to a slide, higher-priority abilities can't yank them out for
17
+ * `cfg.slide.startupWindow` seconds. This protects the slide-jump
18
+ * timing window in particular: you can buffer a wall-jump press during
19
+ * slide-startup without losing the slide first.
20
+ *
21
+ * Priority is the lowest among movement abilities (10) — anything
22
+ * dynamic (wall-jump, mantle, ledge-grab) wins. Slide is the "default
23
+ * extension" of running.
24
+ *
25
+ * @author Alex Goldring
26
+ * @copyright Company Named Limited (c) 2026
27
+ */
28
+ export class Slide extends Ability {
29
+ constructor() {
30
+ super();
31
+ this.name = "Slide";
32
+ /** Lowest of the movement abilities. Wall-jump, mantle, etc. preempt. */
33
+ this.priority = 10;
34
+
35
+ /** @private Counts down during the non-interruptible window. */
36
+ this._startupRemaining = 0;
37
+ }
38
+
39
+ canActivate(controller, runtime, _sensors) {
40
+ const cfg = controller.config.slide;
41
+ if (!cfg) return false; // slide config not present
42
+ if (!controller.state.grounded) return false;
43
+ if (!controller.intent.crouch) return false;
44
+ // Rising-edge crouch — runtime.prevCrouchHeld tracks the last frame's
45
+ // intent.crouch. If both are true we're past the press; require an
46
+ // actual transition. (Without this, the player could enter slide
47
+ // simply by holding crouch and walking up to sprint speed.)
48
+ if (runtime.prevCrouchHeld) return false;
49
+ // Need significant horizontal speed — slide is a run-into-slide,
50
+ // not a standstill-into-slide. The mono-exponential ground
51
+ // accel model (see FirstPersonPlayerControllerConfig.js's
52
+ // `groundAccelHalfLife`) ensures reaching this threshold from
53
+ // standstill naturally requires ~300 ms of committed sprint —
54
+ // longer than human reaction time — so the speed gate alone is
55
+ // enough to make slide feel earned. Speed-only is also the
56
+ // right model for the cases the design wants to explicitly
57
+ // allow: walking off a ledge or accelerating down a slope into
58
+ // a slide. (Following Apex Legends' velocity-only gate.)
59
+ const speed = Math.hypot(runtime.velocityX, runtime.velocityZ);
60
+ if (speed < cfg.minEntrySpeed) return false;
61
+ return true;
62
+ }
63
+
64
+ onActivate(controller, runtime) {
65
+ const cfg = controller.config.slide;
66
+ this._startupRemaining = cfg.startupWindow;
67
+
68
+ // Mastery: scale entry velocity preservation. Well-timed slides
69
+ // (stride midstance) bias the multiplier above 1.0; poorly-timed
70
+ // (foot-strike) bias it below. Default no-evaluator multiplier
71
+ // is 1.0 = exact velocity preservation. See
72
+ // {@link SlideInitiationTimingEvaluator}.
73
+ const masteryMul = controller.mastery.evaluate(
74
+ DecisionPoint.SlideEntryVelocity, controller, runtime,
75
+ );
76
+ runtime.velocityX *= masteryMul;
77
+ runtime.velocityZ *= masteryMul;
78
+
79
+ // Body is now horizontal — head close to ground, no striding
80
+ // feet. L2 reads posture to set eye height and gate gait
81
+ // (stride / footstep / bob).
82
+ controller.state.posture = FirstPersonPosture.Prone;
83
+
84
+ // Visual: kick the vertical impact spring downward for the entry
85
+ // "thud" — the camera dip that sells the body dropping into the slide.
86
+ runtime.verticalImpactSpring.kick(-cfg.entryImpactVelocity);
87
+ }
88
+
89
+ canInterrupt(_controller, _runtime) {
90
+ // Non-interruptible during the startup window.
91
+ return this._startupRemaining <= 0;
92
+ }
93
+
94
+ tick(controller, runtime, bodyTransform, dt, system) {
95
+ const cfg = controller.config.slide;
96
+
97
+ // Keep posture pinned each tick — if the base were to run
98
+ // before us on a release tick it would overwrite to Stand/Crouch;
99
+ // re-asserting here keeps L2 consistent across the slide.
100
+ controller.state.posture = FirstPersonPosture.Prone;
101
+ // No camera lean during slide — body is flat, head is pinned
102
+ // forward along the direction of travel.
103
+ runtime.leanTargetRad = 0;
104
+
105
+ // -- Tick the startup window (always counts down).
106
+ this._startupRemaining = Math.max(0, this._startupRemaining - dt);
107
+
108
+ // -- Exit conditions (checked FIRST, before any motion this tick).
109
+ // Released crouch.
110
+ if (!controller.intent.crouch) return false;
111
+ // Airborne.
112
+ if (!controller.state.grounded) return false;
113
+ // Speed dropped below floor — but only after the startup window
114
+ // (otherwise momentarily-low speed entries would auto-exit before
115
+ // the player has felt the slide).
116
+ const speed = Math.hypot(runtime.velocityX, runtime.velocityZ);
117
+ if (this._startupRemaining <= 0 && speed < cfg.endSpeed) return false;
118
+
119
+ // -- Slide-jump: if jump was pressed (rising edge), apply impulse
120
+ // and release. Base will integrate the new vy on the same tick.
121
+ const jumpPressedEdge = controller.intent.jump && !runtime.prevJumpHeld;
122
+ // Note: we DO consume the jump-pressed edge here even though the
123
+ // jump FSM also reads it. Setting prevJumpHeld now means the FSM
124
+ // (which runs in base after we release) sees no rising edge and
125
+ // doesn't double-fire a normal jump.
126
+ runtime.prevJumpHeld = controller.intent.jump;
127
+ if (jumpPressedEdge) {
128
+ runtime.velocityY = runtime.jumpInitialVy * cfg.slideJumpUpFactor;
129
+ runtime.midJump = true;
130
+ runtime.apexFired = false;
131
+ runtime.peakAltitude = bodyTransform.position.y;
132
+ controller.state.isVariableJumpCut = false;
133
+ controller.state.isAscending = true;
134
+ // Mastery: scale the impulse via JumpImpulse evaluators if any.
135
+ // We deliberately reuse JumpImpulse rather than introducing a
136
+ // separate SlideJumpImpulse decision point — the player's
137
+ // skill at timing applies the same way.
138
+ // (Skipping for simplicity in this version; would mirror the
139
+ // base controller's mastery application.)
140
+ controller.signals.onJumpStart.send1({ peakHeight: controller.config.jump.peakHeight });
141
+ controller.signals.onLeaveGround.send1({ reason: "jump" });
142
+ return false; // release; base handles integration this tick
143
+ }
144
+
145
+ // -- Motion: slide friction on horizontal velocity. Direction is
146
+ // preserved (no steering in this minimal version — carving can
147
+ // be added later as an evaluator-curve-driven term).
148
+ if (speed > 1e-6) {
149
+ const newSpeed = Math.max(0, speed - cfg.friction * dt);
150
+ const ratio = newSpeed / speed;
151
+ runtime.velocityX *= ratio;
152
+ runtime.velocityZ *= ratio;
153
+ }
154
+
155
+ // -- Vertical phase: delegate to the system's standard
156
+ // gravity + integrate + ground resolution. Slide doesn't have
157
+ // its own vertical model.
158
+ system._integrateVerticalAndResolveGround(controller, runtime, bodyTransform, dt);
159
+
160
+ return true;
161
+ }
162
+
163
+ onDeactivate(_controller, _runtime) {
164
+ this._startupRemaining = 0;
165
+ }
166
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Wall-jump ability — instantaneous off-wall impulse fired when the
3
+ * player presses jump while close to a wall. Designed to chain
4
+ * naturally from wall-run (its priority is higher, so it preempts wall-
5
+ * run's `canInterrupt()=true`) but ALSO fires from "near-wall airborne"
6
+ * — a window where the player is mid-jump near a wall they haven't
7
+ * committed to running.
8
+ *
9
+ * Activation:
10
+ * - intent.jump just went true (rising edge)
11
+ * - airborne (`!state.grounded`)
12
+ * - a side wall sensor has hit within `nearWallMaxDistance`
13
+ *
14
+ * Behaviour:
15
+ * - Apply impulse: `outwardImpulse * wall.normal + upImpulse * worldUp`
16
+ * where `upImpulse = jumpInitialVy * upFactor`.
17
+ * - Clear variableJumpCut so the impulse takes effect cleanly.
18
+ * - Fire `onJumpStart` and `onLeaveGround{reason:"walljump"}` signals.
19
+ * - Releases immediately (it's instantaneous, not a sustained state).
20
+ *
21
+ * The impulse goes through `mastery.evaluate(DecisionPoint.WallJumpImpulse)`
22
+ * so any registered evaluators (e.g. breath rhythm, wall-jump-angle
23
+ * timing) can scale it.
24
+ *
25
+ * Priority 60 — highest among movement abilities. Wall-jump must fire
26
+ * reliably on player press, so it preempts wall-run (50), mantle (30),
27
+ * and slide (10).
28
+ *
29
+ * @author Alex Goldring
30
+ * @copyright Company Named Limited (c) 2026
31
+ */
32
+ export class WallJump extends Ability {
33
+ canActivate(controller: any, runtime: any, sensors: any): boolean;
34
+ onActivate(controller: any, runtime: any): void;
35
+ /**
36
+ * Wall-jump is instantaneous — it shouldn't ever be "interrupted".
37
+ * tick() returns false on first call so the ability releases
38
+ * immediately. Returning false here doesn't matter (no other ability
39
+ * exceeds priority 60 in the default set).
40
+ */
41
+ canInterrupt(): boolean;
42
+ tick(_controller: any, _runtime: any, _bodyTransform: any, _dt: any, _system: any): boolean;
43
+ }
44
+ import { Ability } from "./Ability.js";
45
+ //# sourceMappingURL=WallJump.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WallJump.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/control/first-person/abilities/WallJump.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH;IAOI,kEAoBC;IAED,gDAgDC;IAED;;;;;OAKG;IACH,wBAEC;IAED,4FAKC;CACJ;wBAhIuB,cAAc"}
@@ -0,0 +1,131 @@
1
+ import { clamp } from "../../../../core/math/clamp.js";
2
+ import { DecisionPoint } from "../mastery/DecisionPoint.js";
3
+ import { Ability } from "./Ability.js";
4
+
5
+ /**
6
+ * Wall-jump ability — instantaneous off-wall impulse fired when the
7
+ * player presses jump while close to a wall. Designed to chain
8
+ * naturally from wall-run (its priority is higher, so it preempts wall-
9
+ * run's `canInterrupt()=true`) but ALSO fires from "near-wall airborne"
10
+ * — a window where the player is mid-jump near a wall they haven't
11
+ * committed to running.
12
+ *
13
+ * Activation:
14
+ * - intent.jump just went true (rising edge)
15
+ * - airborne (`!state.grounded`)
16
+ * - a side wall sensor has hit within `nearWallMaxDistance`
17
+ *
18
+ * Behaviour:
19
+ * - Apply impulse: `outwardImpulse * wall.normal + upImpulse * worldUp`
20
+ * where `upImpulse = jumpInitialVy * upFactor`.
21
+ * - Clear variableJumpCut so the impulse takes effect cleanly.
22
+ * - Fire `onJumpStart` and `onLeaveGround{reason:"walljump"}` signals.
23
+ * - Releases immediately (it's instantaneous, not a sustained state).
24
+ *
25
+ * The impulse goes through `mastery.evaluate(DecisionPoint.WallJumpImpulse)`
26
+ * so any registered evaluators (e.g. breath rhythm, wall-jump-angle
27
+ * timing) can scale it.
28
+ *
29
+ * Priority 60 — highest among movement abilities. Wall-jump must fire
30
+ * reliably on player press, so it preempts wall-run (50), mantle (30),
31
+ * and slide (10).
32
+ *
33
+ * @author Alex Goldring
34
+ * @copyright Company Named Limited (c) 2026
35
+ */
36
+ export class WallJump extends Ability {
37
+ constructor() {
38
+ super();
39
+ this.name = "WallJump";
40
+ this.priority = 60;
41
+ }
42
+
43
+ canActivate(controller, runtime, sensors) {
44
+ const cfg = controller.config.wallJump;
45
+ if (!cfg) return false;
46
+ if (sensors === undefined || sensors === null) return false;
47
+
48
+ // Edge-trigger: must be a fresh jump press, not a held jump.
49
+ if (!controller.intent.jump) return false;
50
+ if (runtime.prevJumpHeld) return false;
51
+
52
+ // Must be airborne — wall-jump from the ground is just a jump.
53
+ if (controller.state.grounded) return false;
54
+
55
+ // At least one side wall within the near-wall distance.
56
+ const left = sensors.wallLeft;
57
+ const right = sensors.wallRight;
58
+ const leftClose = left.hit && left.distance <= cfg.nearWallMaxDistance;
59
+ const rightClose = right.hit && right.distance <= cfg.nearWallMaxDistance;
60
+ if (!leftClose && !rightClose) return false;
61
+
62
+ return true;
63
+ }
64
+
65
+ onActivate(controller, runtime) {
66
+ const cfg = controller.config.wallJump;
67
+ const sensors = runtime.sensors;
68
+
69
+ // Pick the closer wall (also: if only one side is hit, use it).
70
+ let wallNormal;
71
+ const lH = sensors.wallLeft.hit;
72
+ const rH = sensors.wallRight.hit;
73
+ if (lH && (!rH || sensors.wallLeft.distance <= sensors.wallRight.distance)) {
74
+ wallNormal = sensors.wallLeft.normal;
75
+ } else {
76
+ wallNormal = sensors.wallRight.normal;
77
+ }
78
+
79
+ // Mastery: scale the impulse.
80
+ const masteryMul = controller.mastery.evaluate(
81
+ DecisionPoint.WallJumpImpulse, controller, runtime,
82
+ );
83
+
84
+ // Apply impulse. Outward is along the wall normal; up is along
85
+ // world up. Clamp upFactor positive to avoid pathological configs
86
+ // that would push the player into the ground.
87
+ const upFactor = clamp(cfg.upFactor, 0, 2);
88
+ runtime.velocityX += wallNormal.x * cfg.outwardImpulse * masteryMul;
89
+ runtime.velocityZ += wallNormal.z * cfg.outwardImpulse * masteryMul;
90
+ runtime.velocityY = runtime.jumpInitialVy * upFactor * masteryMul;
91
+
92
+ // Mark this as a fresh jump (so the base jump FSM doesn't think
93
+ // we're falling and the variable-cut logic doesn't try to cut
94
+ // the upward velocity).
95
+ runtime.midJump = true;
96
+ runtime.apexFired = false;
97
+ controller.state.isVariableJumpCut = false;
98
+ controller.state.isAscending = true;
99
+ // Consume the jump-press edge so the base jump FSM doesn't double-fire.
100
+ runtime.prevJumpHeld = true;
101
+
102
+ // Exertion impulse — same magnitude as a regular jump-fire.
103
+ const cfgExt = controller.config.exertion;
104
+ controller.state.exertion = clamp(
105
+ controller.state.exertion + cfgExt.jumpRise * runtime.massRatios.exertionRiseScale,
106
+ 0, 1,
107
+ );
108
+
109
+ controller.signals.onJumpStart.send1({
110
+ peakHeight: controller.config.jump.peakHeight,
111
+ });
112
+ controller.signals.onLeaveGround.send1({ reason: "walljump" });
113
+ }
114
+
115
+ /**
116
+ * Wall-jump is instantaneous — it shouldn't ever be "interrupted".
117
+ * tick() returns false on first call so the ability releases
118
+ * immediately. Returning false here doesn't matter (no other ability
119
+ * exceeds priority 60 in the default set).
120
+ */
121
+ canInterrupt() {
122
+ return true;
123
+ }
124
+
125
+ tick(_controller, _runtime, _bodyTransform, _dt, _system) {
126
+ // The impulse was applied in onActivate; the ability is purely
127
+ // instantaneous. Release immediately so base locomotion picks up
128
+ // the resulting airborne arc.
129
+ return false;
130
+ }
131
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Wall-run ability. Activates when the player is airborne with momentum
3
+ * and a wall is detected to their left or right. While active:
4
+ *
5
+ * - Gravity is reduced to `cfg.wallRun.gravityFactor × base` (typically
6
+ * 25%), letting the player hang on the wall for longer than a normal
7
+ * jump arc.
8
+ * - Horizontal velocity is projected onto the wall's tangent each tick,
9
+ * so the body sticks to the wall and slides along it. Forward
10
+ * momentum is preserved; into-wall and out-of-wall velocity
11
+ * components are zeroed.
12
+ * - Camera tilts into the wall via the shared lean spring (writes the
13
+ * wall-tilt to `runtime.leanTargetRad` each tick — same channel
14
+ * base writes its lat-accel-derived lean to, so transitions in and
15
+ * out share the spring's smoothing).
16
+ *
17
+ * Exits on:
18
+ * - Timer (`cfg.wallRun.maxDuration`)
19
+ * - Lost wall contact (sensor's hit flag becomes false)
20
+ * - Re-grounded (we walked onto a floor at the wall's end)
21
+ * - Wall-jump preempts (higher priority — WallJump declares priority 60)
22
+ *
23
+ * Priority 50 — above Mantle (30), Slide (10), below Wall-jump (60).
24
+ *
25
+ * @author Alex Goldring
26
+ * @copyright Company Named Limited (c) 2026
27
+ */
28
+ export class WallRun extends Ability {
29
+ /** @private Seconds since this ability activated. */
30
+ private _elapsed;
31
+ /** @private "L" or "R" — which wall we're running on. */
32
+ private _side;
33
+ canActivate(controller: any, runtime: any, sensors: any): boolean;
34
+ onActivate(controller: any, runtime: any): void;
35
+ /**
36
+ * Wall-jump (priority 60) should be allowed to preempt freely; that's
37
+ * the canonical chain (wall-run → wall-jump). Any other higher-priority
38
+ * ability is also fine — wall-run is a transient state.
39
+ */
40
+ canInterrupt(): boolean;
41
+ tick(controller: any, runtime: any, bodyTransform: any, dt: any, system: any): boolean;
42
+ }
43
+ import { Ability } from "./Ability.js";
44
+ //# sourceMappingURL=WallRun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WallRun.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/control/first-person/abilities/WallRun.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAMQ,qDAAqD;IACrD,iBAAiB;IACjB,yDAAyD;IACzD,cAAgB;IAGpB,kEAiBC;IAED,gDAqBC;IAED;;;;OAIG;IACH,wBAEC;IAED,uFAiFC;CAKJ;wBAlLuB,cAAc"}
@@ -0,0 +1,180 @@
1
+ import { DEG_TO_RAD } from "../../../../core/math/DEG_TO_RAD.js";
2
+ import { Ability } from "./Ability.js";
3
+
4
+ /**
5
+ * Wall-run ability. Activates when the player is airborne with momentum
6
+ * and a wall is detected to their left or right. While active:
7
+ *
8
+ * - Gravity is reduced to `cfg.wallRun.gravityFactor × base` (typically
9
+ * 25%), letting the player hang on the wall for longer than a normal
10
+ * jump arc.
11
+ * - Horizontal velocity is projected onto the wall's tangent each tick,
12
+ * so the body sticks to the wall and slides along it. Forward
13
+ * momentum is preserved; into-wall and out-of-wall velocity
14
+ * components are zeroed.
15
+ * - Camera tilts into the wall via the shared lean spring (writes the
16
+ * wall-tilt to `runtime.leanTargetRad` each tick — same channel
17
+ * base writes its lat-accel-derived lean to, so transitions in and
18
+ * out share the spring's smoothing).
19
+ *
20
+ * Exits on:
21
+ * - Timer (`cfg.wallRun.maxDuration`)
22
+ * - Lost wall contact (sensor's hit flag becomes false)
23
+ * - Re-grounded (we walked onto a floor at the wall's end)
24
+ * - Wall-jump preempts (higher priority — WallJump declares priority 60)
25
+ *
26
+ * Priority 50 — above Mantle (30), Slide (10), below Wall-jump (60).
27
+ *
28
+ * @author Alex Goldring
29
+ * @copyright Company Named Limited (c) 2026
30
+ */
31
+ export class WallRun extends Ability {
32
+ constructor() {
33
+ super();
34
+ this.name = "WallRun";
35
+ this.priority = 50;
36
+
37
+ /** @private Seconds since this ability activated. */
38
+ this._elapsed = 0;
39
+ /** @private "L" or "R" — which wall we're running on. */
40
+ this._side = "L";
41
+ }
42
+
43
+ canActivate(controller, runtime, sensors) {
44
+ const cfg = controller.config.wallRun;
45
+ if (!cfg) return false;
46
+ if (sensors === undefined || sensors === null) return false;
47
+ if (controller.state.grounded) return false;
48
+ if (controller.state.airborneTime < cfg.minAirborneTime) return false;
49
+
50
+ const speed = Math.hypot(runtime.velocityX, runtime.velocityZ);
51
+ if (speed < cfg.minSpeed) return false;
52
+
53
+ // Need a wall on left OR right (not front — that's a wall to bump into).
54
+ if (!sensors.wallLeft.hit && !sensors.wallRight.hit) return false;
55
+
56
+ // Forward intent required — wall-run is a committed action.
57
+ if (controller.intent.move.y < 0.1) return false;
58
+
59
+ return true;
60
+ }
61
+
62
+ onActivate(controller, runtime) {
63
+ const sensors = runtime.sensors;
64
+ this._elapsed = 0;
65
+
66
+ // Pick the closer wall if both detected.
67
+ if (sensors.wallLeft.hit
68
+ && (!sensors.wallRight.hit
69
+ || sensors.wallLeft.distance <= sensors.wallRight.distance)) {
70
+ this._side = "L";
71
+ } else {
72
+ this._side = "R";
73
+ }
74
+
75
+ // Clear any in-progress jump state — the wall-run takes over the
76
+ // vertical model.
77
+ runtime.midJump = false;
78
+ runtime.apexFired = false;
79
+ controller.state.isVariableJumpCut = false;
80
+ controller.state.isAscending = false;
81
+
82
+ controller.signals.onLeaveGround.send1({ reason: "wallrun" });
83
+ }
84
+
85
+ /**
86
+ * Wall-jump (priority 60) should be allowed to preempt freely; that's
87
+ * the canonical chain (wall-run → wall-jump). Any other higher-priority
88
+ * ability is also fine — wall-run is a transient state.
89
+ */
90
+ canInterrupt() {
91
+ return true;
92
+ }
93
+
94
+ tick(controller, runtime, bodyTransform, dt, system) {
95
+ const cfg = controller.config.wallRun;
96
+ this._elapsed += dt;
97
+
98
+ // -- Exit: timer.
99
+ if (this._elapsed >= cfg.maxDuration) {
100
+ return false;
101
+ }
102
+ // -- Exit: re-grounded (we ran onto a floor).
103
+ if (controller.state.grounded) {
104
+ return false;
105
+ }
106
+
107
+ const sensors = runtime.sensors;
108
+ const sensorHit = this._side === "L" ? sensors.wallLeft : sensors.wallRight;
109
+
110
+ // -- Exit: lost the wall.
111
+ if (!sensorHit.hit) {
112
+ return false;
113
+ }
114
+
115
+ // -- Project velocity onto the wall's tangent.
116
+ // The wall's normal is in the XZ plane (vertical wall). Zero the
117
+ // component of velocity along that normal. Forward momentum
118
+ // (along the wall's tangent direction) is preserved.
119
+ const nx = sensorHit.normal.x;
120
+ const nz = sensorHit.normal.z;
121
+ const dotN = runtime.velocityX * nx + runtime.velocityZ * nz;
122
+ runtime.velocityX -= dotN * nx;
123
+ runtime.velocityZ -= dotN * nz;
124
+
125
+ // -- Camera roll: write directly to the shared lean target.
126
+ // Sign convention: positive engine roll = head tilts RIGHT. Wall
127
+ // on LEFT → tilt LEFT → negative roll. Wall on RIGHT → tilt
128
+ // RIGHT → positive roll. L2.f spring-steps from this value each
129
+ // tick; base will overwrite once the ability releases, and the
130
+ // spring smooths the transition.
131
+ const rollSign = this._side === "L" ? -1 : 1;
132
+ runtime.leanTargetRad = rollSign * cfg.cameraRollDeg * DEG_TO_RAD;
133
+
134
+ // -- Reduced gravity.
135
+ runtime.velocityY -= runtime.gravity * cfg.gravityFactor * dt;
136
+
137
+ // -- Integrate position (manual — don't call the system's vertical
138
+ // phase because that would re-apply gravity with the fall multiplier).
139
+ bodyTransform.position._add(
140
+ runtime.velocityX * dt,
141
+ runtime.velocityY * dt,
142
+ runtime.velocityZ * dt,
143
+ );
144
+
145
+ // -- Ground catch. Reduced gravity is still gravity; over the
146
+ // wall-run's lifetime the player drifts down. Without a ground
147
+ // check here, the player can integrate PAST the floor — at
148
+ // which point the wall sensor eventually drops out, base
149
+ // resumes, and base's downward groundResolver raycast (from
150
+ // below the floor) doesn't find anything above. Player free-
151
+ // falls forever.
152
+ //
153
+ // Consult the same effective ground the base integrator uses:
154
+ // max(useBuiltInFlatGround baseline, groundResolver). If we've
155
+ // sunk to or past it, snap, zero vy, and release — base will
156
+ // mark grounded on the next tick.
157
+ let groundY = system.useBuiltInFlatGround ? system.groundY : null;
158
+ if (system.groundResolver !== null) {
159
+ const resolved = system.groundResolver(
160
+ bodyTransform.position.x,
161
+ bodyTransform.position.y,
162
+ bodyTransform.position.z,
163
+ );
164
+ if (resolved !== null && (groundY === null || resolved > groundY)) {
165
+ groundY = resolved;
166
+ }
167
+ }
168
+ if (groundY !== null && bodyTransform.position.y <= groundY) {
169
+ bodyTransform.position.setY(groundY);
170
+ runtime.velocityY = 0;
171
+ return false;
172
+ }
173
+
174
+ return true;
175
+ }
176
+
177
+ // No onDeactivate cleanup needed: on the tick we release, base runs
178
+ // and overwrites runtime.leanTargetRad with the natural value. The
179
+ // lean spring smooths the transition.
180
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Additive accumulator for body-local eye-position offsets. The first-
3
+ * person controller's `_composeEye` clears this each frame, pushes its
4
+ * own contributions (bob impact, lateral bob, breath, landing, jump
5
+ * anticipation, sprint posture shift), then reads the accumulated offset
6
+ * into the eye transform.
7
+ *
8
+ * Designed so external sources — gunfire recoil, melee impact reaction,
9
+ * environmental shake — can push offsets without the controller having to
10
+ * know about them. They reach the runtime through the same interface; the
11
+ * controller treats all contributions identically.
12
+ *
13
+ * Translation only. Rotation composition stays explicit in the system
14
+ * because the multiplication order (yaw → pitch → roll) is semantically
15
+ * load-bearing.
16
+ *
17
+ * @author Alex Goldring
18
+ * @copyright Company Named Limited (c) 2026
19
+ */
20
+ export class EyeOffsetStack {
21
+ /**
22
+ * @readonly
23
+ * @type {Vector3}
24
+ */
25
+ readonly offset: Vector3;
26
+ /**
27
+ * Reset to zero. Call once per frame before pushing.
28
+ */
29
+ clear(): void;
30
+ /**
31
+ * Add a vector contribution. `source` is purely for debugging and
32
+ * future inspection (e.g. a developer overlay listing each
33
+ * contribution); the math is a plain sum.
34
+ *
35
+ * @param {string} _source label, e.g. "bob.impact", "breath", "shake"
36
+ * @param {number} x
37
+ * @param {number} y
38
+ * @param {number} z
39
+ */
40
+ push(_source: string, x: number, y: number, z: number): void;
41
+ /**
42
+ * Convenience overload — push a Vector3.
43
+ * @param {string} _source
44
+ * @param {Vector3} v
45
+ */
46
+ pushVec(_source: string, v: Vector3): void;
47
+ }
48
+ import Vector3 from "../../../../core/geom/Vector3.js";
49
+ //# sourceMappingURL=EyeOffsetStack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EyeOffsetStack.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/control/first-person/composer/EyeOffsetStack.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAEQ;;;OAGG;IACH,iBAFU,OAAO,CAEU;IAG/B;;OAEG;IACH,cAEC;IAED;;;;;;;;;OASG;IACH,cALW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,KACN,OAAO,QAIjB;CACJ;oBA3DmB,kCAAkC"}