@woosh/meep-engine 2.138.19 → 2.139.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/package.json +2 -1
  2. package/src/core/collection/PairUint32Map.d.ts +100 -0
  3. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  4. package/src/core/collection/PairUint32Map.js +321 -0
  5. package/src/core/collection/Uint32Map.d.ts +119 -0
  6. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  7. package/src/core/collection/Uint32Map.js +345 -0
  8. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  9. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  10. package/src/core/collection/array/array_shuffle.js +27 -22
  11. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  12. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  13. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  14. package/src/core/collection/heap/Uint32Heap.js +1 -1
  15. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  16. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  17. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  18. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  19. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  20. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  21. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  22. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  23. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  24. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  25. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  26. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  27. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  28. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  29. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  30. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  31. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  33. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  34. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  36. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  37. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  38. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  39. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  40. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  41. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  42. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  43. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  44. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +673 -0
  45. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  46. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  47. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  48. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  49. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  50. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  51. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  52. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  53. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  54. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  55. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  56. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  57. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  58. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  59. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +365 -0
  60. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -0
  61. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  62. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +112 -0
  63. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -0
  64. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +55 -0
  66. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  67. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  69. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +22 -0
  70. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  71. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +49 -0
  72. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  73. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  74. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  75. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  76. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  77. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  78. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  79. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  80. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  81. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  82. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  83. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  84. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  85. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  86. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  87. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  88. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  89. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  90. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  91. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  92. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  93. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  94. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  95. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  96. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  97. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  98. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  99. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  100. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  101. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  102. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  103. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  104. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  105. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  106. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  108. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  109. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  111. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  112. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  113. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  114. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  115. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  116. package/src/core/graph/csr/CSRGraph.js +319 -0
  117. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  118. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  119. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  120. package/src/core/graph/metis/metis.d.ts +19 -0
  121. package/src/core/graph/metis/metis.d.ts.map +1 -1
  122. package/src/core/graph/metis/metis.js +20 -0
  123. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  124. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  125. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  126. package/src/core/graph/metis/metis_options.d.ts +17 -2
  127. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  128. package/src/core/graph/metis/metis_options.js +17 -2
  129. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  130. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  131. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  132. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  133. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  134. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  135. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  136. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  137. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  138. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  139. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  140. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  141. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  142. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  143. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  144. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  145. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  146. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  147. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  148. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  149. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  150. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  151. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  152. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  153. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  154. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  155. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  156. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  157. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  158. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  159. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  160. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  161. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  162. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  163. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  164. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  165. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  166. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  167. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  168. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  169. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  170. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  171. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  172. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  173. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  174. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  175. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  176. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  177. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  178. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  180. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  181. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  183. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  184. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  186. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  187. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  188. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  189. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  190. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  191. package/src/engine/EngineHarness.d.ts +3 -1
  192. package/src/engine/EngineHarness.d.ts.map +1 -1
  193. package/src/engine/EngineHarness.js +6 -4
  194. package/src/engine/control/first-person/DESIGN.md +30 -6
  195. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  196. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +102 -9
  197. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  198. package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
  199. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
  200. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  201. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
  202. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
  203. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  204. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
  205. package/src/engine/control/first-person/TODO.md +127 -0
  206. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  207. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  208. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  209. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  210. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  211. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  212. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  213. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  214. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  215. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  216. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  217. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  218. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  219. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  220. package/src/engine/control/first-person/abilities/Slide.js +158 -0
  221. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  222. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  223. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  224. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  225. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  226. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  227. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  228. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  229. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  230. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  231. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  232. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  233. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  234. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  235. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  236. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  237. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  238. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  239. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  240. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  241. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  242. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  243. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  244. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  245. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  246. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  247. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  248. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  249. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  250. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  251. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  252. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  253. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  254. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  255. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  256. package/src/engine/control/first-person/math/Spring.js +71 -0
  257. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  258. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  259. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  260. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  261. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  262. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  263. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  264. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  265. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  266. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  267. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  268. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  269. package/src/engine/control/first-person/prototype_first_person_controller.js +550 -119
  270. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  271. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  272. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  273. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  274. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  275. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  276. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  277. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  278. package/src/engine/control/first-person/test/buildTestPlayer.js +28 -0
  279. package/src/engine/ecs/EntityManager.d.ts +2 -2
  280. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  281. package/src/engine/ecs/EntityManager.js +13 -8
  282. package/src/engine/ecs/System.d.ts.map +1 -1
  283. package/src/engine/ecs/System.js +2 -2
  284. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  285. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  286. package/src/engine/graphics/ecs/light/Light.js +27 -0
  287. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  288. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  289. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  290. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  291. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  292. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  293. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  294. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  295. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  296. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  297. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  298. package/src/engine/physics/PLAN.md +236 -0
  299. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  300. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  301. package/src/engine/physics/body/BodyStorage.js +427 -0
  302. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  303. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  304. package/src/engine/physics/broadphase/PairList.js +97 -0
  305. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts +30 -0
  306. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
  307. package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -0
  308. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  309. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  310. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  311. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  312. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  313. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  314. package/src/engine/physics/contact/ManifoldStore.d.ts +226 -0
  315. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  316. package/src/engine/physics/contact/ManifoldStore.js +499 -0
  317. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  318. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  319. package/src/engine/physics/ecs/BodyKind.js +24 -0
  320. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  321. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  322. package/src/engine/physics/ecs/Collider.js +136 -0
  323. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  324. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  325. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  326. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  327. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  328. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  329. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  330. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  331. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  332. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  333. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  334. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  335. package/src/engine/physics/ecs/PhysicsSystem.d.ts +520 -0
  336. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  337. package/src/engine/physics/ecs/PhysicsSystem.js +1159 -0
  338. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  339. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  340. package/src/engine/physics/ecs/RigidBody.js +240 -0
  341. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  342. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  343. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  344. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  345. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  346. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  347. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  348. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  349. package/src/engine/physics/ecs/SleepState.js +12 -0
  350. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  351. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  352. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  353. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  354. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  355. package/src/engine/physics/events/diff_manifolds.js +50 -0
  356. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  357. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  358. package/src/engine/physics/fluid/FluidField.js +510 -66
  359. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  360. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  361. package/src/engine/physics/fluid/FluidSimulator.js +455 -95
  362. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  363. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  364. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  365. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  366. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  367. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  368. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  369. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  370. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  371. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  372. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  373. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  374. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  375. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  376. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  377. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  378. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  379. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  380. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  381. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  382. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  383. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  384. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  385. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  386. package/src/engine/physics/fluid/prototype.js +102 -91
  387. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  388. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  389. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  390. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  391. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  392. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  393. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  394. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  395. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  396. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  397. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  398. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  399. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  400. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  401. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  402. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  403. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  404. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  405. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  406. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  407. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  408. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  409. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  410. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  411. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  412. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  413. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  414. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  415. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  416. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  417. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts +20 -0
  418. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
  419. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
  420. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -0
  421. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  422. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +70 -0
  423. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  424. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
  425. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
  426. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  427. package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
  428. package/src/engine/physics/integration/integrate_position.d.ts +16 -0
  429. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  430. package/src/engine/physics/integration/integrate_position.js +48 -0
  431. package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
  432. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  433. package/src/engine/physics/integration/integrate_velocity.js +79 -0
  434. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  435. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  436. package/src/engine/physics/integration/quat_integrate.js +62 -0
  437. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  438. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  439. package/src/engine/physics/island/IslandBuilder.js +411 -0
  440. package/src/engine/physics/island/union_find.d.ts +51 -0
  441. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  442. package/src/engine/physics/island/union_find.js +76 -0
  443. package/src/engine/physics/narrowphase/PosedShape.d.ts +59 -0
  444. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  445. package/src/engine/physics/narrowphase/PosedShape.js +110 -0
  446. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  447. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  448. package/src/engine/physics/narrowphase/box_box_manifold.js +543 -0
  449. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  450. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  451. package/src/engine/physics/narrowphase/capsule_contacts.js +508 -0
  452. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
  453. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  454. package/src/engine/physics/narrowphase/narrowphase_step.js +382 -0
  455. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  456. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  457. package/src/engine/physics/narrowphase/sphere_box_contact.js +130 -0
  458. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  459. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  460. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  461. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  462. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  463. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  464. package/src/engine/physics/queries/raycast.d.ts +20 -0
  465. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  466. package/src/engine/physics/queries/raycast.js +249 -0
  467. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  468. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  469. package/src/engine/physics/solver/friction_cone.js +37 -0
  470. package/src/engine/physics/solver/solve_contacts.d.ts +36 -0
  471. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  472. package/src/engine/physics/solver/solve_contacts.js +598 -0
  473. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  474. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  475. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  476. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  477. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  478. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  479. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  480. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  481. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  482. package/src/engine/ecs/components/Motion.d.ts +0 -21
  483. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  484. package/src/engine/ecs/components/Motion.js +0 -27
  485. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  486. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  487. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  488. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  489. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  490. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  491. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  492. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  493. package/src/engine/physics/fluid/Fluid.js +0 -221
  494. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  495. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  496. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
@@ -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"}
@@ -0,0 +1,60 @@
1
+ import Vector3 from "../../../../core/geom/Vector3.js";
2
+
3
+ /**
4
+ * Additive accumulator for body-local eye-position offsets. The first-
5
+ * person controller's `_composeEye` clears this each frame, pushes its
6
+ * own contributions (bob impact, lateral bob, breath, landing, jump
7
+ * anticipation, sprint posture shift), then reads the accumulated offset
8
+ * into the eye transform.
9
+ *
10
+ * Designed so external sources — gunfire recoil, melee impact reaction,
11
+ * environmental shake — can push offsets without the controller having to
12
+ * know about them. They reach the runtime through the same interface; the
13
+ * controller treats all contributions identically.
14
+ *
15
+ * Translation only. Rotation composition stays explicit in the system
16
+ * because the multiplication order (yaw → pitch → roll) is semantically
17
+ * load-bearing.
18
+ *
19
+ * @author Alex Goldring
20
+ * @copyright Company Named Limited (c) 2026
21
+ */
22
+ export class EyeOffsetStack {
23
+ constructor() {
24
+ /**
25
+ * @readonly
26
+ * @type {Vector3}
27
+ */
28
+ this.offset = new Vector3();
29
+ }
30
+
31
+ /**
32
+ * Reset to zero. Call once per frame before pushing.
33
+ */
34
+ clear() {
35
+ this.offset.set(0, 0, 0);
36
+ }
37
+
38
+ /**
39
+ * Add a vector contribution. `source` is purely for debugging and
40
+ * future inspection (e.g. a developer overlay listing each
41
+ * contribution); the math is a plain sum.
42
+ *
43
+ * @param {string} _source label, e.g. "bob.impact", "breath", "shake"
44
+ * @param {number} x
45
+ * @param {number} y
46
+ * @param {number} z
47
+ */
48
+ push(_source, x, y, z) {
49
+ this.offset._add(x, y, z);
50
+ }
51
+
52
+ /**
53
+ * Convenience overload — push a Vector3.
54
+ * @param {string} _source
55
+ * @param {Vector3} v
56
+ */
57
+ pushVec(_source, v) {
58
+ this.offset._add(v.x, v.y, v.z);
59
+ }
60
+ }
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Symmetric curve over breath phase ∈ [0, 1):
3
+ * 0.00 → neutral (mid-inhale-to-exhale transition)
4
+ * 0.25 → trough: inhaling (small penalty)
5
+ * 0.50 → neutral
6
+ * 0.75 → peak: exhaling (small bonus)
7
+ *
8
+ * Physically motivated. Power-output research (weightlifting, sports
9
+ * biomechanics) consistently finds that peak force output happens during
10
+ * controlled exhalation. Holding breath produces a brief assist but
11
+ * inhaling during exertion is measurably worse. Bonus magnitude > penalty
12
+ * magnitude per the project design rule (asymmetric in magnitude).
13
+ *
14
+ * The curve is parameterizable so the same evaluator can serve multiple
15
+ * roles: large peak/trough for "action" decisions (jump, slide, wall-
16
+ * jump), small peak/trough for "continuous" decisions (ground accel
17
+ * during running in-sync with breath).
18
+ */
19
+ export function makeBreathRhythmCurve(peakBonus: any, troughPenalty: any): AnimationCurve;
20
+ /**
21
+ * Mastery evaluator: scales the queried quantity by breath-phase timing.
22
+ * Multi-decision-point — same instance fires on whatever decision points
23
+ * are configured. Two canonical use cases:
24
+ *
25
+ * 1. **Action evaluators** (jump, slide-start, wall-jump, mantle-exit):
26
+ * Default magnitudes (+3% peak / −1% trough). Fires once per event;
27
+ * players naturally hold or release breath when committing to an
28
+ * action.
29
+ *
30
+ * 2. **Sustained-action evaluator** (ground accel during in-sync run):
31
+ * Smaller magnitudes (+1.5% / −0.5%) and gated by exertion (only
32
+ * meaningful when the player is actually breathing heavily; matches
33
+ * the locomotor-respiratory-coupling principle — coupling-bonus
34
+ * kicks in at high exertion).
35
+ *
36
+ * The "smallest bonus in the system" rule applies here: this evaluator's
37
+ * defaults are tiny on purpose. Compounded across a long run with many
38
+ * actions, a breath-aware player gets a noticeable lift; a casual player
39
+ * who never notices the rhythm pays barely anything.
40
+ *
41
+ * Example usage:
42
+ *
43
+ * // Action bonuses — fires on jump/slide-entry/wall-jump
44
+ * controller.mastery.add(new BreathRhythmEvaluator());
45
+ *
46
+ * // Speed bonus during sustained heavy breathing
47
+ * controller.mastery.add(new BreathRhythmEvaluator({
48
+ * decisionPoints: [DecisionPoint.GroundAccel],
49
+ * peakBonus: 0.015,
50
+ * troughPenalty: 0.005,
51
+ * requireExertionAbove: 0.3,
52
+ * }));
53
+ *
54
+ * @author Alex Goldring
55
+ * @copyright Company Named Limited (c) 2026
56
+ */
57
+ export class BreathRhythmEvaluator extends MasteryEvaluator {
58
+ /**
59
+ * @param {object} [opts]
60
+ * @param {number[]} [opts.decisionPoints] Defaults to action points
61
+ * (jump, slide entry, wall-jump). Pass [GroundAccel] for the
62
+ * "running in sync" speed bonus.
63
+ * @param {number} [opts.peakBonus] Default 0.03 = +3% at exhale.
64
+ * @param {number} [opts.troughPenalty] Default 0.01 = −1% at inhale.
65
+ * @param {number} [opts.requireExertionAbove] Below this exertion
66
+ * level (default 0) the evaluator returns identity. Use ~0.3 for
67
+ * "only when breathing heavily" semantics.
68
+ */
69
+ constructor({ decisionPoints, peakBonus, troughPenalty, requireExertionAbove, }?: {
70
+ decisionPoints?: number[];
71
+ peakBonus?: number;
72
+ troughPenalty?: number;
73
+ requireExertionAbove?: number;
74
+ });
75
+ /**
76
+ * Set of decision points this evaluator answers. Default: the
77
+ * three classic "action" points.
78
+ * @type {Set<number>}
79
+ */
80
+ decisionPoints: Set<number>;
81
+ /** @type {number} */
82
+ peakBonus: number;
83
+ /** @type {number} */
84
+ troughPenalty: number;
85
+ /** @type {number} */
86
+ requireExertionAbove: number;
87
+ /** Magnitude exponent — scales the deviation around 1.0. */
88
+ flatBoost: number;
89
+ /** @private */
90
+ private _curve;
91
+ /**
92
+ * Rebuild the curve from current peakBonus/troughPenalty. Call after
93
+ * mutating those fields if you want the change to take effect.
94
+ */
95
+ rebuildCurve(): void;
96
+ evaluate(decisionPoint: any, controller: any, _runtime: any): number;
97
+ }
98
+ import { AnimationCurve } from "../../../animation/curve/AnimationCurve.js";
99
+ import { MasteryEvaluator } from "./MasteryEvaluator.js";
100
+ //# sourceMappingURL=BreathRhythmEvaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BreathRhythmEvaluator.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/control/first-person/mastery/BreathRhythmEvaluator.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,0FAQC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH;IACI;;;;;;;;;;OAUG;IACH;QAT2B,cAAc,GAA9B,MAAM,EAAE;QAGM,SAAS,GAAvB,MAAM;QACQ,aAAa,GAA3B,MAAM;QACQ,oBAAoB,GAAlC,MAAM;OAoChB;IAvBG;;;;OAIG;IACH,gBAFU,IAAI,MAAM,CAAC,CAMnB;IAEF,qBAAqB;IACrB,WADW,MAAM,CACS;IAC1B,qBAAqB;IACrB,eADW,MAAM,CACiB;IAClC,qBAAqB;IACrB,sBADW,MAAM,CAC+B;IAEhD,4DAA4D;IAC5D,kBAAoB;IAEpB,eAAe;IACf,eAA6D;IAGjE;;;OAGG;IACH,qBAEC;IAED,qEAOC;CACJ;+BApI8B,4CAA4C;iCAG1C,uBAAuB"}