@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.
- package/package.json +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts +3 -3
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js +4 -4
- package/src/core/collection/PairUint32Map.d.ts +100 -0
- package/src/core/collection/PairUint32Map.d.ts.map +1 -0
- package/src/core/collection/PairUint32Map.js +321 -0
- package/src/core/collection/Uint32Map.d.ts +119 -0
- package/src/core/collection/Uint32Map.d.ts.map +1 -0
- package/src/core/collection/Uint32Map.js +345 -0
- package/src/core/collection/array/array_shuffle.d.ts +10 -3
- package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
- package/src/core/collection/array/array_shuffle.js +27 -22
- package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
- package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
- package/src/core/collection/heap/FibonacciHeap.js +586 -0
- package/src/core/collection/heap/Uint32Heap.js +1 -1
- package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
- package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
- package/src/core/collection/heap/Uint32Heap4.js +490 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +30 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +93 -0
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +54 -0
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +69 -0
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts +24 -2
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +24 -1
- package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
- package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +148 -0
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/HeightMapShape3D.js +451 -0
- package/src/core/geom/3d/shape/MeshShape3D.d.ts +210 -0
- package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/MeshShape3D.js +593 -0
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +46 -2
- package/src/core/geom/3d/shape/Triangle3D.d.ts +95 -0
- package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/Triangle3D.js +318 -0
- package/src/core/geom/3d/shape/UnionShape3D.js +13 -0
- package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
- package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts +30 -0
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts.map +1 -0
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +64 -0
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
- package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
- package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +671 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts +28 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_build_vertex_to_tets_map.js +48 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +387 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +35 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +140 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +31 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +97 -0
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +41 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +124 -13
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts +2 -2
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +1 -1
- package/src/core/geom/vec3/v3_dot_array_array.d.ts +3 -3
- package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_dot_array_array.js +2 -2
- package/src/core/geom/vec3/v3_negate_array.d.ts +3 -3
- package/src/core/geom/vec3/v3_negate_array.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_negate_array.js +2 -2
- package/src/core/geom/vec3/v3_quat3_apply.d.ts +29 -0
- package/src/core/geom/vec3/v3_quat3_apply.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_quat3_apply.js +39 -0
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +30 -0
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_quat3_apply_inverse.js +41 -0
- package/src/core/geom/vec3/v3_triple_cross_product.d.ts +32 -0
- package/src/core/geom/vec3/v3_triple_cross_product.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_triple_cross_product.js +45 -0
- package/src/core/graph/csr/CSRGraph.d.ts +168 -0
- package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
- package/src/core/graph/csr/CSRGraph.js +319 -0
- package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
- package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
- package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
- package/src/core/graph/metis/metis.d.ts +19 -0
- package/src/core/graph/metis/metis.d.ts.map +1 -1
- package/src/core/graph/metis/metis.js +20 -0
- package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
- package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
- package/src/core/graph/metis/metis_cluster_bs.js +11 -0
- package/src/core/graph/metis/metis_options.d.ts +17 -2
- package/src/core/graph/metis/metis_options.d.ts.map +1 -1
- package/src/core/graph/metis/metis_options.js +17 -2
- package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
- package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
- package/src/core/graph/metis/native/MetisGraph.js +212 -0
- package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
- package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
- package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
- package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
- package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
- package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
- package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
- package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
- package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
- package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
- package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
- package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
- package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
- package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
- package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
- package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
- package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
- package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
- package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
- package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
- package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
- package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
- package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
- package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
- package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
- package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
- package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
- package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
- package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
- package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
- package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
- package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
- package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
- package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
- package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
- package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
- package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
- package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
- package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
- package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/project_kway.js +43 -0
- package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
- package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
- package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
- package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
- package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
- package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
- package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
- package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
- package/src/engine/EngineHarness.d.ts +3 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +3 -0
- package/src/engine/control/first-person/DESIGN.md +30 -6
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +115 -9
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerController.js +211 -176
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +601 -8
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +349 -8
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +319 -23
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +1789 -799
- package/src/engine/control/first-person/TODO.md +173 -0
- package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
- package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/Ability.js +119 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
- package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
- package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/Mantle.js +188 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/Slide.js +166 -0
- package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
- package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/WallJump.js +131 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
- package/src/engine/control/first-person/abilities/WallRun.js +180 -0
- package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
- package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
- package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
- package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
- package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
- package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
- package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
- package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
- package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
- package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
- package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
- package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
- package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
- package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
- package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
- package/src/engine/control/first-person/math/Spring.d.ts +56 -0
- package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
- package/src/engine/control/first-person/math/Spring.js +71 -0
- package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
- package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
- package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
- package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
- package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
- package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
- package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
- package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
- package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
- package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
- package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
- package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
- package/src/engine/control/first-person/prototype_first_person_controller.js +637 -120
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
- package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
- package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
- package/src/engine/control/first-person/test/buildTestPlayer.js +36 -0
- package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
- package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/Light.js +27 -0
- package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
- package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
- package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
- package/src/engine/graphics/geometry/CapsuleGeometry.d.ts +42 -0
- package/src/engine/graphics/geometry/CapsuleGeometry.d.ts.map +1 -0
- package/src/engine/graphics/geometry/CapsuleGeometry.js +171 -0
- package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
- package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
- package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
- package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
- package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
- package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
- package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
- package/src/engine/physics/BULLET_REVIEW.md +945 -0
- package/src/engine/physics/CANNON_REVIEW.md +1300 -0
- package/src/engine/physics/JOLT_REVIEW.md +913 -0
- package/src/engine/physics/PLAN.md +461 -0
- package/src/engine/physics/RAPIER_REVIEW.md +934 -0
- package/src/engine/physics/REVIEW_001_ACTION_PLAN.md +642 -0
- package/src/engine/physics/body/BodyStorage.d.ts +187 -0
- package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
- package/src/engine/physics/body/BodyStorage.js +427 -0
- package/src/engine/physics/broadphase/PairList.d.ts +62 -0
- package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
- package/src/engine/physics/broadphase/PairList.js +97 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
- package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
- package/src/engine/physics/broadphase/generate_pairs.js +101 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts +299 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
- package/src/engine/physics/contact/ManifoldStore.js +608 -0
- package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
- package/src/engine/physics/ecs/BodyKind.js +24 -0
- package/src/engine/physics/ecs/Collider.d.ts +98 -0
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
- package/src/engine/physics/ecs/Collider.js +136 -0
- package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
- package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
- package/src/engine/physics/ecs/ColliderFlags.js +15 -0
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
- package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +628 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/PhysicsSystem.js +1301 -0
- package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
- package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBody.js +240 -0
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
- package/src/engine/physics/ecs/SleepState.d.ts +11 -0
- package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
- package/src/engine/physics/ecs/SleepState.js +12 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
- package/src/engine/physics/events/ContactEventBuffer.js +83 -0
- package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
- package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
- package/src/engine/physics/events/diff_manifolds.js +50 -0
- package/src/engine/physics/fluid/FluidField.d.ts +294 -16
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +510 -66
- package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
- package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidSimulator.js +456 -95
- package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
- package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
- package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
- package/src/engine/physics/fluid/prototype.js +102 -91
- package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
- package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
- package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
- package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
- package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +48 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +92 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +6 -6
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
- package/src/engine/physics/gjk/expanding_polytope_algorithm.js +76 -32
- package/src/engine/physics/gjk/gjk.d.ts +28 -2
- package/src/engine/physics/gjk/gjk.d.ts.map +1 -1
- package/src/engine/physics/gjk/gjk.js +421 -378
- package/src/engine/physics/gjk/minkowski_support.d.ts +37 -0
- package/src/engine/physics/gjk/minkowski_support.d.ts.map +1 -0
- package/src/engine/physics/gjk/minkowski_support.js +75 -0
- package/src/engine/physics/gjk/mpr.d.ts +56 -0
- package/src/engine/physics/gjk/mpr.d.ts.map +1 -0
- package/src/engine/physics/gjk/mpr.js +344 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +44 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
- package/src/engine/physics/inertia/world_inverse_inertia.js +77 -0
- package/src/engine/physics/integration/integrate_position.d.ts +34 -0
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
- package/src/engine/physics/integration/integrate_position.js +79 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts +55 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
- package/src/engine/physics/integration/integrate_velocity.js +160 -0
- package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
- package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
- package/src/engine/physics/integration/quat_integrate.js +62 -0
- package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
- package/src/engine/physics/island/IslandBuilder.js +411 -0
- package/src/engine/physics/island/union_find.d.ts +51 -0
- package/src/engine/physics/island/union_find.d.ts.map +1 -0
- package/src/engine/physics/island/union_find.js +76 -0
- package/src/engine/physics/narrowphase/PosedShape.d.ts +51 -0
- package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/PosedShape.js +108 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/box_box_manifold.js +639 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +30 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.js +811 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/capsule_contacts.js +462 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +71 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +375 -0
- package/src/engine/physics/narrowphase/compute_penetration.d.ts +91 -0
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/compute_penetration.js +396 -0
- package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts +35 -0
- package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.js +80 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +31 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +55 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +42 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +204 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +42 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +94 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +37 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +37 -0
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +17 -0
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/narrowphase_step.js +1422 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.js +123 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +48 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.js +143 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
- package/src/engine/physics/queries/overlap_shape.d.ts +51 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -0
- package/src/engine/physics/queries/overlap_shape.js +183 -0
- package/src/engine/physics/queries/raycast.d.ts +20 -0
- package/src/engine/physics/queries/raycast.d.ts.map +1 -0
- package/src/engine/physics/queries/raycast.js +249 -0
- package/src/engine/physics/queries/shape_cast.d.ts +56 -0
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -0
- package/src/engine/physics/queries/shape_cast.js +387 -0
- package/src/engine/physics/solver/friction_cone.d.ts +16 -0
- package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
- package/src/engine/physics/solver/friction_cone.js +37 -0
- package/src/engine/physics/solver/solve_contacts.d.ts +122 -0
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
- package/src/engine/physics/solver/solve_contacts.js +1016 -0
- package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
- package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
- package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
- package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
- package/src/engine/ecs/components/Motion.d.ts +0 -21
- package/src/engine/ecs/components/Motion.d.ts.map +0 -1
- package/src/engine/ecs/components/Motion.js +0 -27
- package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
- package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
- package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
- package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
- package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
- package/src/engine/ecs/systems/MotionSystem.js +0 -29
- package/src/engine/physics/fluid/Fluid.d.ts +0 -26
- package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
- package/src/engine/physics/fluid/Fluid.js +0 -221
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
- 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"}
|