@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,278 @@
|
|
|
1
|
+
import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
|
|
2
|
+
import { aabb3_intersects_aabb3 } from "../../../../core/geom/3d/aabb/aabb3_intersects_aabb3.js";
|
|
3
|
+
import { ResourceAccessKind } from "../../../../core/model/ResourceAccessKind.js";
|
|
4
|
+
import { ResourceAccessSpecification } from "../../../../core/model/ResourceAccessSpecification.js";
|
|
5
|
+
import { System } from "../../../ecs/System.js";
|
|
6
|
+
import { Transform } from "../../../ecs/transform/Transform.js";
|
|
7
|
+
import { FluidComponent } from "./FluidComponent.js";
|
|
8
|
+
import { FluidEffectorsComponent } from "./FluidEffectorsComponent.js";
|
|
9
|
+
import { FluidSimulator } from "../FluidSimulator.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* ECS system that steps every {@link FluidComponent} on a fixed timestep.
|
|
13
|
+
*
|
|
14
|
+
* Effectors live on a separate {@link FluidEffectorsComponent}, decoupled from any
|
|
15
|
+
* specific fluid field. Each step the system:
|
|
16
|
+
*
|
|
17
|
+
* 1. **Re-anchor moving fields.** For every (FluidComponent, Transform) tuple,
|
|
18
|
+
* compute the desired grid origin as
|
|
19
|
+
* `quantize(transform.position, cell_size) + offset`
|
|
20
|
+
* where the grid is then centred at that point. On the first sync this is just
|
|
21
|
+
* snapped (no shift), on subsequent syncs the integer cell delta is computed and
|
|
22
|
+
* the field is shifted to follow — fluid data moves with the world so the volume
|
|
23
|
+
* appears stationary while the grid hops between cells.
|
|
24
|
+
* 2. Walks every (FluidEffectorsComponent, Transform) entity and calls
|
|
25
|
+
* {@link AbstractFluidEffector.syncFromTransform} on each effector so position-
|
|
26
|
+
* bearing effectors (wakes, splats) follow their owning entity.
|
|
27
|
+
* 3. For each enabled {@link FluidComponent}:
|
|
28
|
+
* a. Builds the world-to-grid matrix from the component's `origin` + `cell_size`.
|
|
29
|
+
* b. Broad-phase filters effectors via {@link AbstractFluidEffector.getBoundingBox}
|
|
30
|
+
* vs {@link FluidComponent.getBoundingBox} — only effectors whose world-space
|
|
31
|
+
* AABB intersects the field's AABB are passed through.
|
|
32
|
+
* c. Calls the owned simulator's `step(field, dt, visible_effectors, world_to_grid)`.
|
|
33
|
+
*
|
|
34
|
+
* The broad-phase is cheap (AABB-AABB intersect, 6 comparisons) and skips the expensive
|
|
35
|
+
* per-cell splat work for effectors that wouldn't have hit anything anyway. Gather +
|
|
36
|
+
* filter happens per field; effectors that overlap multiple fields are evaluated
|
|
37
|
+
* multiple times — fine for the typical "few fields" case, optimise to a cached
|
|
38
|
+
* per-effector AABB pass if you find yourself with many fields.
|
|
39
|
+
*
|
|
40
|
+
* Uses `fixedUpdate` rather than `update` because fluid stability and the warm-started
|
|
41
|
+
* pressure solve both depend on consistent dt. Variable timesteps cause visible
|
|
42
|
+
* pulsing as projection convergence varies.
|
|
43
|
+
*/
|
|
44
|
+
export class FluidSystem extends System {
|
|
45
|
+
|
|
46
|
+
dependencies = [FluidComponent];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Components the system traverses each step but does not own as the linking
|
|
50
|
+
* tuple. Lets the engine validate registration order and schedule reads.
|
|
51
|
+
*
|
|
52
|
+
* - `FluidEffectorsComponent` — read every step to gather effectors and to
|
|
53
|
+
* deliver Transform sync hooks.
|
|
54
|
+
* - `Transform` — read every step (paired with FluidEffectorsComponent) so
|
|
55
|
+
* position-bearing effectors can follow their entity.
|
|
56
|
+
*/
|
|
57
|
+
components_used = [
|
|
58
|
+
// FluidComponent is also in `dependencies`, but reanchor + step write to it
|
|
59
|
+
// (origin, anchored, field buffers). Declared again with explicit Write.
|
|
60
|
+
ResourceAccessSpecification.from(FluidComponent, ResourceAccessKind.Read | ResourceAccessKind.Write),
|
|
61
|
+
ResourceAccessSpecification.from(FluidEffectorsComponent, ResourceAccessKind.Read),
|
|
62
|
+
ResourceAccessSpecification.from(Transform, ResourceAccessKind.Read),
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Single simulator drives every fluid field — it carries only transient scratch,
|
|
67
|
+
* which {@link FluidSimulator.#ensure_scratch} grows to fit the largest field
|
|
68
|
+
* encountered.
|
|
69
|
+
* @type {FluidSimulator}
|
|
70
|
+
*/
|
|
71
|
+
simulator = new FluidSimulator();
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Per-field filtered effector list, rebuilt at the top of each field's step.
|
|
75
|
+
* Held as an instance field so we don't allocate per frame.
|
|
76
|
+
* @type {AbstractFluidEffector[]}
|
|
77
|
+
*/
|
|
78
|
+
#visible_effectors = [];
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Reusable column-major 4×4 buffer for the world-to-grid matrix; rewritten per
|
|
82
|
+
* field per step.
|
|
83
|
+
* @type {Float32Array}
|
|
84
|
+
*/
|
|
85
|
+
#world_to_grid = new Float32Array(16);
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Reusable AABB scratch for the current field being stepped.
|
|
89
|
+
* @type {AABB3}
|
|
90
|
+
*/
|
|
91
|
+
#field_aabb = new AABB3();
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Reusable AABB scratch reused for every effector during broad-phase filtering.
|
|
95
|
+
* @type {AABB3}
|
|
96
|
+
*/
|
|
97
|
+
#effector_aabb = new AABB3();
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @param {number} time_delta_seconds
|
|
101
|
+
*/
|
|
102
|
+
fixedUpdate(time_delta_seconds) {
|
|
103
|
+
const em = this.entityManager;
|
|
104
|
+
if (em === null) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const ecd = em.dataset;
|
|
108
|
+
if (ecd === null) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// 1. Re-anchor moving fields. Field origin tracks quantize(transform) + offset;
|
|
113
|
+
// when the quantization changes, the field is shifted to follow the world.
|
|
114
|
+
ecd.traverseEntities([FluidComponent, Transform], FluidSystem.#reanchor_field);
|
|
115
|
+
|
|
116
|
+
// 2. Sync every effector that wants to follow its entity's Transform.
|
|
117
|
+
ecd.traverseEntities([FluidEffectorsComponent, Transform], FluidSystem.#sync_effectors_from_transform);
|
|
118
|
+
|
|
119
|
+
// 2. Step each fluid field, with broad-phase effector filtering per field.
|
|
120
|
+
const sim = this.simulator;
|
|
121
|
+
const world_to_grid = this.#world_to_grid;
|
|
122
|
+
const field_aabb = this.#field_aabb;
|
|
123
|
+
const effector_aabb = this.#effector_aabb;
|
|
124
|
+
const visible = this.#visible_effectors;
|
|
125
|
+
|
|
126
|
+
ecd.traverseComponents(FluidComponent, function (component) {
|
|
127
|
+
if (!component.enabled) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
component.getBoundingBox(field_aabb);
|
|
132
|
+
FluidSystem.#build_world_to_grid(world_to_grid, component);
|
|
133
|
+
|
|
134
|
+
visible.length = 0;
|
|
135
|
+
ecd.traverseComponents(FluidEffectorsComponent, function (effectors_component) {
|
|
136
|
+
const arr = effectors_component.effectors;
|
|
137
|
+
for (let i = 0; i < arr.length; i++) {
|
|
138
|
+
const e = arr[i];
|
|
139
|
+
e.getBoundingBox(effector_aabb);
|
|
140
|
+
if (aabb3_intersects_aabb3(
|
|
141
|
+
effector_aabb.x0, effector_aabb.y0, effector_aabb.z0,
|
|
142
|
+
effector_aabb.x1, effector_aabb.y1, effector_aabb.z1,
|
|
143
|
+
field_aabb.x0, field_aabb.y0, field_aabb.z0,
|
|
144
|
+
field_aabb.x1, field_aabb.y1, field_aabb.z1
|
|
145
|
+
)) {
|
|
146
|
+
visible.push(e);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
sim.step(component.field, time_delta_seconds, visible, world_to_grid);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Visitor for the (effectors, transform) traversal — calls syncFromTransform on
|
|
157
|
+
* every effector in the component.
|
|
158
|
+
* @param {FluidEffectorsComponent} effectors_component
|
|
159
|
+
* @param {Transform} transform
|
|
160
|
+
*/
|
|
161
|
+
static #sync_effectors_from_transform(effectors_component, transform) {
|
|
162
|
+
const effectors = effectors_component.effectors;
|
|
163
|
+
for (let i = 0; i < effectors.length; i++) {
|
|
164
|
+
effectors[i].syncFromTransform(transform);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Visitor for the (FluidComponent, Transform) traversal — keeps the field's
|
|
170
|
+
* grid origin locked to a cell-aligned position near the transform.
|
|
171
|
+
*
|
|
172
|
+
* Centre formula: `q * cell_size + offset`, where `q` is the cell index along
|
|
173
|
+
* each axis. Origin is then the centre minus half the grid extent so the centre
|
|
174
|
+
* lands at the geometric middle of the grid.
|
|
175
|
+
*
|
|
176
|
+
* Hysteresis: instead of recomputing `q` from the raw position every frame
|
|
177
|
+
* (which would re-shift on every boundary crossing for a Transform jittering on
|
|
178
|
+
* a cell edge), we recover the current `q` from the existing origin and only
|
|
179
|
+
* advance to a new cell when the raw position has drifted more than
|
|
180
|
+
* `0.5 + hysteresis` cells from it. Crossing the threshold snaps to the new
|
|
181
|
+
* nearest cell, so a single large move still produces a single discrete shift.
|
|
182
|
+
*
|
|
183
|
+
* First sync (`anchored = false`): snap origin to the desired value, no shift.
|
|
184
|
+
* Subsequent syncs: per-axis hysteretic quantization, then `field.shift` if the
|
|
185
|
+
* integer delta is non-zero.
|
|
186
|
+
*
|
|
187
|
+
* @param {FluidComponent} component
|
|
188
|
+
* @param {Transform} transform
|
|
189
|
+
*/
|
|
190
|
+
static #reanchor_field(component, transform) {
|
|
191
|
+
const cs = component.cell_size;
|
|
192
|
+
const p = transform.position;
|
|
193
|
+
const offset = component.offset;
|
|
194
|
+
const hyst = component.hysteresis;
|
|
195
|
+
|
|
196
|
+
const res = component.field.getResolution();
|
|
197
|
+
const half_extent_x = (res[0] - 1) * cs * 0.5;
|
|
198
|
+
const half_extent_y = (res[1] - 1) * cs * 0.5;
|
|
199
|
+
const half_extent_z = (res[2] - 1) * cs * 0.5;
|
|
200
|
+
|
|
201
|
+
const origin = component.origin;
|
|
202
|
+
|
|
203
|
+
if (!component.anchored) {
|
|
204
|
+
// First sync — adopt the freshly-quantized origin without shifting.
|
|
205
|
+
// Subsequent frames will see integer-cs differences and shift instead.
|
|
206
|
+
const q_x = Math.round(p.x / cs);
|
|
207
|
+
const q_y = Math.round(p.y / cs);
|
|
208
|
+
const q_z = Math.round(p.z / cs);
|
|
209
|
+
origin[0] = q_x * cs + offset[0] - half_extent_x;
|
|
210
|
+
origin[1] = q_y * cs + offset[1] - half_extent_y;
|
|
211
|
+
origin[2] = q_z * cs + offset[2] - half_extent_z;
|
|
212
|
+
component.anchored = true;
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Recover the current quantized cell index per axis from the existing origin.
|
|
217
|
+
// origin_axis = q_curr * cs + offset - half_extent →
|
|
218
|
+
// q_curr = (origin_axis + half_extent - offset) / cs.
|
|
219
|
+
// Round defends against floating drift; the value should already be integer.
|
|
220
|
+
const q_curr_x = Math.round((origin[0] + half_extent_x - offset[0]) / cs);
|
|
221
|
+
const q_curr_y = Math.round((origin[1] + half_extent_y - offset[1]) / cs);
|
|
222
|
+
const q_curr_z = Math.round((origin[2] + half_extent_z - offset[2]) / cs);
|
|
223
|
+
|
|
224
|
+
// Raw (fractional) cell coordinate the Transform sits at right now.
|
|
225
|
+
const raw_x = p.x / cs;
|
|
226
|
+
const raw_y = p.y / cs;
|
|
227
|
+
const raw_z = p.z / cs;
|
|
228
|
+
|
|
229
|
+
// Hysteretic re-quantize: only adopt a new cell when raw has drifted past
|
|
230
|
+
// 0.5 + hyst from the current one. Snap to the new nearest, not the threshold.
|
|
231
|
+
const threshold = 0.5 + hyst;
|
|
232
|
+
const q_new_x = Math.abs(raw_x - q_curr_x) > threshold ? Math.round(raw_x) : q_curr_x;
|
|
233
|
+
const q_new_y = Math.abs(raw_y - q_curr_y) > threshold ? Math.round(raw_y) : q_curr_y;
|
|
234
|
+
const q_new_z = Math.abs(raw_z - q_curr_z) > threshold ? Math.round(raw_z) : q_curr_z;
|
|
235
|
+
|
|
236
|
+
const shift_x = q_new_x - q_curr_x;
|
|
237
|
+
const shift_y = q_new_y - q_curr_y;
|
|
238
|
+
const shift_z = q_new_z - q_curr_z;
|
|
239
|
+
|
|
240
|
+
if (shift_x === 0 && shift_y === 0 && shift_z === 0) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
component.field.shift(shift_x, shift_y, shift_z);
|
|
245
|
+
origin[0] = q_new_x * cs + offset[0] - half_extent_x;
|
|
246
|
+
origin[1] = q_new_y * cs + offset[1] - half_extent_y;
|
|
247
|
+
origin[2] = q_new_z * cs + offset[2] - half_extent_z;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Write the world-to-grid affine for a FluidComponent into `out`. Axis-aligned,
|
|
252
|
+
* uniform-scale, so the matrix is sparse:
|
|
253
|
+
*
|
|
254
|
+
* [ 1/cs 0 0 -ox/cs ]
|
|
255
|
+
* [ 0 1/cs 0 -oy/cs ]
|
|
256
|
+
* [ 0 0 1/cs -oz/cs ]
|
|
257
|
+
* [ 0 0 0 1 ]
|
|
258
|
+
*
|
|
259
|
+
* Stored column-major (matches the convention of {@link v3_matrix4_multiply}).
|
|
260
|
+
*
|
|
261
|
+
* @param {Float32Array} out length-16
|
|
262
|
+
* @param {FluidComponent} component
|
|
263
|
+
*/
|
|
264
|
+
static #build_world_to_grid(out, component) {
|
|
265
|
+
const inv_cs = 1 / component.cell_size;
|
|
266
|
+
const ox = component.origin[0];
|
|
267
|
+
const oy = component.origin[1];
|
|
268
|
+
const oz = component.origin[2];
|
|
269
|
+
|
|
270
|
+
out[0] = inv_cs; out[1] = 0; out[2] = 0; out[3] = 0;
|
|
271
|
+
out[4] = 0; out[5] = inv_cs; out[6] = 0; out[7] = 0;
|
|
272
|
+
out[8] = 0; out[9] = 0; out[10] = inv_cs; out[11] = 0;
|
|
273
|
+
out[12] = -ox * inv_cs;
|
|
274
|
+
out[13] = -oy * inv_cs;
|
|
275
|
+
out[14] = -oz * inv_cs;
|
|
276
|
+
out[15] = 1;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
@@ -1,6 +1,67 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* External force source applied to a {@link FluidField} once per simulation step.
|
|
3
|
+
*
|
|
4
|
+
* Subclasses override {@link apply} to mutate the field's velocity (and, optionally,
|
|
5
|
+
* scalar attributes). The simulator calls `apply(field, dt, world_to_grid)` for every
|
|
6
|
+
* effector at the start of each step, before diffusion / projection / advection.
|
|
7
|
+
*
|
|
8
|
+
* Effectors are configured in WORLD coordinates. The `world_to_grid` matrix supplied
|
|
9
|
+
* to {@link apply} converts a world-space point into the target field's grid space.
|
|
10
|
+
* The same effector instance can therefore be applied to any number of fluid fields
|
|
11
|
+
* across a single step — the system iterates fields and re-supplies the matching
|
|
12
|
+
* matrix each time.
|
|
13
|
+
*
|
|
14
|
+
* Effectors should be idempotent given the same `dt`, field state, and
|
|
15
|
+
* `world_to_grid` — they are pure functions of (their own configured state, field,
|
|
16
|
+
* dt, matrix). They must not retain references to field buffers between calls (the
|
|
17
|
+
* field's buffer references are stable, but caching them across resolution changes
|
|
18
|
+
* would break).
|
|
3
19
|
*/
|
|
4
20
|
export class AbstractFluidEffector {
|
|
21
|
+
/**
|
|
22
|
+
* @param {FluidField} field
|
|
23
|
+
* @param {number} dt seconds
|
|
24
|
+
* @param {Float32Array|number[]} world_to_grid Column-major 4×4 affine sending
|
|
25
|
+
* world-space points into the target
|
|
26
|
+
* field's grid space.
|
|
27
|
+
*/
|
|
28
|
+
apply(field: FluidField, dt: number, world_to_grid: Float32Array | number[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* Optional hook called by {@link FluidSystem} once per step on each effector whose
|
|
31
|
+
* entity also has a `Transform` component. Default: no-op. Effectors that should
|
|
32
|
+
* follow an entity override this to pull world-space position / orientation /
|
|
33
|
+
* velocity off the transform.
|
|
34
|
+
*
|
|
35
|
+
* @param {Transform} transform
|
|
36
|
+
*/
|
|
37
|
+
syncFromTransform(transform: Transform): void;
|
|
38
|
+
/**
|
|
39
|
+
* Strict value equality. The base implementation collapses to reference equality
|
|
40
|
+
* — every concrete effector class overrides this to compare its own configured
|
|
41
|
+
* state.
|
|
42
|
+
* @param {AbstractFluidEffector} other
|
|
43
|
+
* @return {boolean}
|
|
44
|
+
*/
|
|
45
|
+
equals(other: AbstractFluidEffector): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Fast hash. The base implementation returns a constant — concrete effectors
|
|
48
|
+
* override to hash their own state. Should stay cheap (a few `combine_hash` calls
|
|
49
|
+
* over scalar fields).
|
|
50
|
+
* @return {number}
|
|
51
|
+
*/
|
|
52
|
+
hash(): number;
|
|
53
|
+
/**
|
|
54
|
+
* Write the effector's world-space axis-aligned bounding box into `out`. Used by
|
|
55
|
+
* {@link FluidSystem} as a broad-phase culling primitive: if the effector's box
|
|
56
|
+
* doesn't intersect a fluid field's box, the effector is skipped for that field
|
|
57
|
+
* entirely.
|
|
58
|
+
*
|
|
59
|
+
* The base implementation writes infinite bounds — i.e. "could affect anything".
|
|
60
|
+
* Safe (never produces false negatives) but defeats the broad-phase. Concrete
|
|
61
|
+
* effectors override with tight bounds.
|
|
62
|
+
*
|
|
63
|
+
* @param {AABB3} out destination, mutated in place
|
|
64
|
+
*/
|
|
65
|
+
getBoundingBox(out: AABB3): void;
|
|
5
66
|
}
|
|
6
67
|
//# sourceMappingURL=AbstractFluidEffector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/AbstractFluidEffector.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"AbstractFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/AbstractFluidEffector.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IACI;;;;;;OAMG;IACH,6BALW,MAAM,iBACN,YAAY,GAAC,MAAM,EAAE,QAO/B;IAED;;;;;;;OAOG;IACH,8CAEC;IAED;;;;;;OAMG;IACH,cAHW,qBAAqB,GACpB,OAAO,CAIlB;IAED;;;;;OAKG;IACH,QAFY,MAAM,CAIjB;IAED;;;;;;;;;;;OAWG;IACH,iCAEC;CACJ"}
|
|
@@ -1,6 +1,81 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
/**
|
|
2
|
+
* External force source applied to a {@link FluidField} once per simulation step.
|
|
3
|
+
*
|
|
4
|
+
* Subclasses override {@link apply} to mutate the field's velocity (and, optionally,
|
|
5
|
+
* scalar attributes). The simulator calls `apply(field, dt, world_to_grid)` for every
|
|
6
|
+
* effector at the start of each step, before diffusion / projection / advection.
|
|
7
|
+
*
|
|
8
|
+
* Effectors are configured in WORLD coordinates. The `world_to_grid` matrix supplied
|
|
9
|
+
* to {@link apply} converts a world-space point into the target field's grid space.
|
|
10
|
+
* The same effector instance can therefore be applied to any number of fluid fields
|
|
11
|
+
* across a single step — the system iterates fields and re-supplies the matching
|
|
12
|
+
* matrix each time.
|
|
13
|
+
*
|
|
14
|
+
* Effectors should be idempotent given the same `dt`, field state, and
|
|
15
|
+
* `world_to_grid` — they are pure functions of (their own configured state, field,
|
|
16
|
+
* dt, matrix). They must not retain references to field buffers between calls (the
|
|
17
|
+
* field's buffer references are stable, but caching them across resolution changes
|
|
18
|
+
* would break).
|
|
19
|
+
*/
|
|
20
|
+
export class AbstractFluidEffector {
|
|
21
|
+
/**
|
|
22
|
+
* @param {FluidField} field
|
|
23
|
+
* @param {number} dt seconds
|
|
24
|
+
* @param {Float32Array|number[]} world_to_grid Column-major 4×4 affine sending
|
|
25
|
+
* world-space points into the target
|
|
26
|
+
* field's grid space.
|
|
27
|
+
*/
|
|
28
|
+
apply(field, dt, world_to_grid) {
|
|
29
|
+
// Default no-op so a partially-built effector doesn't crash the sim. Subclasses
|
|
30
|
+
// must override to do useful work.
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Optional hook called by {@link FluidSystem} once per step on each effector whose
|
|
35
|
+
* entity also has a `Transform` component. Default: no-op. Effectors that should
|
|
36
|
+
* follow an entity override this to pull world-space position / orientation /
|
|
37
|
+
* velocity off the transform.
|
|
38
|
+
*
|
|
39
|
+
* @param {Transform} transform
|
|
40
|
+
*/
|
|
41
|
+
syncFromTransform(transform) {
|
|
42
|
+
// override as needed
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Strict value equality. The base implementation collapses to reference equality
|
|
47
|
+
* — every concrete effector class overrides this to compare its own configured
|
|
48
|
+
* state.
|
|
49
|
+
* @param {AbstractFluidEffector} other
|
|
50
|
+
* @return {boolean}
|
|
51
|
+
*/
|
|
52
|
+
equals(other) {
|
|
53
|
+
return other === this;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Fast hash. The base implementation returns a constant — concrete effectors
|
|
58
|
+
* override to hash their own state. Should stay cheap (a few `combine_hash` calls
|
|
59
|
+
* over scalar fields).
|
|
60
|
+
* @return {number}
|
|
61
|
+
*/
|
|
62
|
+
hash() {
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Write the effector's world-space axis-aligned bounding box into `out`. Used by
|
|
68
|
+
* {@link FluidSystem} as a broad-phase culling primitive: if the effector's box
|
|
69
|
+
* doesn't intersect a fluid field's box, the effector is skipped for that field
|
|
70
|
+
* entirely.
|
|
71
|
+
*
|
|
72
|
+
* The base implementation writes infinite bounds — i.e. "could affect anything".
|
|
73
|
+
* Safe (never produces false negatives) but defeats the broad-phase. Concrete
|
|
74
|
+
* effectors override with tight bounds.
|
|
75
|
+
*
|
|
76
|
+
* @param {AABB3} out destination, mutated in place
|
|
77
|
+
*/
|
|
78
|
+
getBoundingBox(out) {
|
|
79
|
+
out.setInfiniteBounds();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Adds the same acceleration to every fluid cell each step (gravity, ambient wind).
|
|
3
|
+
*
|
|
4
|
+
* `force` is in WORLD units per second squared. The `world_to_grid` matrix is applied
|
|
5
|
+
* (as a direction transform — translation ignored) inside {@link apply} to convert
|
|
6
|
+
* the force into the target field's grid-cell units before depositing. The same
|
|
7
|
+
* GlobalFluidEffector applied to fields with different `cell_size` therefore produces
|
|
8
|
+
* the same world-space acceleration on each — gravity stays gravity.
|
|
9
|
+
*
|
|
10
|
+
* Solid cells are left untouched — the projection step would zero them anyway, but
|
|
11
|
+
* skipping the write is slightly cheaper and keeps the solid mask authoritative for
|
|
12
|
+
* effectors as well as the solver.
|
|
3
13
|
*/
|
|
4
14
|
export class GlobalFluidEffector extends AbstractFluidEffector {
|
|
5
15
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
16
|
+
* Acceleration vector in WORLD units per second squared (e.g. `[0, -9.8, 0]` for
|
|
17
|
+
* Earth gravity in metres-and-seconds). Per-step deposit into the velocity field
|
|
18
|
+
* is `world_to_grid · force × dt`.
|
|
19
|
+
*
|
|
20
|
+
* @type {[number, number, number]}
|
|
8
21
|
*/
|
|
9
|
-
force: number
|
|
22
|
+
force: [number, number, number];
|
|
10
23
|
}
|
|
11
24
|
import { AbstractFluidEffector } from "./AbstractFluidEffector.js";
|
|
12
25
|
//# sourceMappingURL=GlobalFluidEffector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/GlobalFluidEffector.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GlobalFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/GlobalFluidEffector.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH;IAEI;;;;;;OAMG;IACH,OAFU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEhB;CA8ErB;sCAtGqC,4BAA4B"}
|
|
@@ -1,12 +1,105 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { combine_hash } from "../../../../core/collection/array/combine_hash.js";
|
|
2
|
+
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
3
|
+
import { AbstractFluidEffector } from "./AbstractFluidEffector.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Adds the same acceleration to every fluid cell each step (gravity, ambient wind).
|
|
7
|
+
*
|
|
8
|
+
* `force` is in WORLD units per second squared. The `world_to_grid` matrix is applied
|
|
9
|
+
* (as a direction transform — translation ignored) inside {@link apply} to convert
|
|
10
|
+
* the force into the target field's grid-cell units before depositing. The same
|
|
11
|
+
* GlobalFluidEffector applied to fields with different `cell_size` therefore produces
|
|
12
|
+
* the same world-space acceleration on each — gravity stays gravity.
|
|
13
|
+
*
|
|
14
|
+
* Solid cells are left untouched — the projection step would zero them anyway, but
|
|
15
|
+
* skipping the write is slightly cheaper and keeps the solid mask authoritative for
|
|
16
|
+
* effectors as well as the solver.
|
|
17
|
+
*/
|
|
18
|
+
export class GlobalFluidEffector extends AbstractFluidEffector {
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Acceleration vector in WORLD units per second squared (e.g. `[0, -9.8, 0]` for
|
|
22
|
+
* Earth gravity in metres-and-seconds). Per-step deposit into the velocity field
|
|
23
|
+
* is `world_to_grid · force × dt`.
|
|
24
|
+
*
|
|
25
|
+
* @type {[number, number, number]}
|
|
26
|
+
*/
|
|
27
|
+
force = [0, 0, 0];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @param {FluidField} field
|
|
31
|
+
* @param {number} dt
|
|
32
|
+
* @param {Float32Array|number[]} world_to_grid Column-major 4×4 affine; only the
|
|
33
|
+
* linear (upper-left 3×3) part is
|
|
34
|
+
* used since force is a direction.
|
|
35
|
+
*/
|
|
36
|
+
apply(field, dt, world_to_grid) {
|
|
37
|
+
const wfx = this.force[0];
|
|
38
|
+
const wfy = this.force[1];
|
|
39
|
+
const wfz = this.force[2];
|
|
40
|
+
|
|
41
|
+
if (wfx === 0 && wfy === 0 && wfz === 0) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Direction-transform: apply the linear part of world_to_grid (translation in
|
|
46
|
+
// m[12..14] is for points, not directions). For the axis-aligned uniform-scale
|
|
47
|
+
// matrices built by FluidSystem this collapses to division by cell_size, so
|
|
48
|
+
// world m/s² becomes grid cells/s².
|
|
49
|
+
const m = world_to_grid;
|
|
50
|
+
const fx = (m[0] * wfx + m[4] * wfy + m[8] * wfz) * dt;
|
|
51
|
+
const fy = (m[1] * wfx + m[5] * wfy + m[9] * wfz) * dt;
|
|
52
|
+
const fz = (m[2] * wfx + m[6] * wfy + m[10] * wfz) * dt;
|
|
53
|
+
|
|
54
|
+
const vx = field.velocity_x;
|
|
55
|
+
const vy = field.velocity_y;
|
|
56
|
+
const vz = field.velocity_z;
|
|
57
|
+
const solid = field.solid;
|
|
58
|
+
const n = vx.length;
|
|
59
|
+
|
|
60
|
+
for (let i = 0; i < n; i++) {
|
|
61
|
+
if (solid[i] !== 0) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
vx[i] += fx;
|
|
65
|
+
vy[i] += fy;
|
|
66
|
+
vz[i] += fz;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @param {AbstractFluidEffector} other
|
|
72
|
+
* @return {boolean}
|
|
73
|
+
*/
|
|
74
|
+
equals(other) {
|
|
75
|
+
if (other === this) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
if (!(other instanceof GlobalFluidEffector)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
return this.force[0] === other.force[0]
|
|
82
|
+
&& this.force[1] === other.force[1]
|
|
83
|
+
&& this.force[2] === other.force[2];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @return {number}
|
|
88
|
+
*/
|
|
89
|
+
hash() {
|
|
90
|
+
return combine_hash(
|
|
91
|
+
computeHashFloat(this.force[0]),
|
|
92
|
+
computeHashFloat(this.force[1]),
|
|
93
|
+
computeHashFloat(this.force[2])
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Position-free — applies to every cell of any field. Infinite bounds means the
|
|
99
|
+
* broad-phase will never cull this effector.
|
|
100
|
+
* @param {AABB3} out
|
|
101
|
+
*/
|
|
102
|
+
getBoundingBox(out) {
|
|
103
|
+
out.setInfiniteBounds();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splats a velocity impulse into a spherical region around a world-space position
|
|
3
|
+
* each step. Useful for fans, jets, point explosions, and unit-testing the projection
|
|
4
|
+
* step.
|
|
5
|
+
*
|
|
6
|
+
* Falloff is quadratic in the normalized distance — `(1 - r/R)²` — giving a smooth
|
|
7
|
+
* brush profile with zero gradient at the boundary, which projects more cleanly than a
|
|
8
|
+
* hard sphere.
|
|
9
|
+
*
|
|
10
|
+
* Everything is in WORLD units: {@link position} (point), {@link force} (direction
|
|
11
|
+
* vector), {@link radius} (scalar length). The `world_to_grid` matrix supplied to
|
|
12
|
+
* {@link apply} converts them at splat time. Works at any user-supplied radius
|
|
13
|
+
* including sub-cell: the effective kernel radius is internally floored at 1 grid
|
|
14
|
+
* cell so a small world-space radius still produces a roughly one-cell-wide splat
|
|
15
|
+
* instead of silently missing every cell.
|
|
16
|
+
*
|
|
17
|
+
* For moving sources that should leave a trail, see {@link WakeFluidEffector}.
|
|
18
|
+
*/
|
|
19
|
+
export class ImpulseFluidEffector extends AbstractFluidEffector {
|
|
20
|
+
/**
|
|
21
|
+
* Position in world coordinates.
|
|
22
|
+
* @type {[number, number, number]}
|
|
23
|
+
*/
|
|
24
|
+
position: [number, number, number];
|
|
25
|
+
/**
|
|
26
|
+
* Acceleration vector in WORLD units per second squared. Per-step deposit is
|
|
27
|
+
* `world_to_grid · force × dt × falloff_weight`. Same world-units convention as
|
|
28
|
+
* {@link GlobalFluidEffector.force} — gravity stays gravity across fields with
|
|
29
|
+
* different `cell_size`.
|
|
30
|
+
* @type {[number, number, number]}
|
|
31
|
+
*/
|
|
32
|
+
force: [number, number, number];
|
|
33
|
+
/**
|
|
34
|
+
* Influence radius in WORLD units. Cells past `radius` from the splat point are
|
|
35
|
+
* unaffected by the falloff. Internally floored to 1 grid cell so sub-cell
|
|
36
|
+
* world-radii still hit cells (the alternative is silently dropping the splat
|
|
37
|
+
* at fractional positions — see class docstring).
|
|
38
|
+
* @type {number}
|
|
39
|
+
*/
|
|
40
|
+
radius: number;
|
|
41
|
+
}
|
|
42
|
+
import { AbstractFluidEffector } from "./AbstractFluidEffector.js";
|
|
43
|
+
//# sourceMappingURL=ImpulseFluidEffector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImpulseFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/ImpulseFluidEffector.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;GAiBG;AACH;IAEI;;;OAGG;IACH,UAFU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEb;IAErB;;;;;;OAMG;IACH,OAFU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEhB;IAElB;;;;;;OAMG;IACH,QAFU,MAAM,CAEL;CAgKd;sCA9MqC,4BAA4B"}
|