@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,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initial bisection by BFS growth from a single random seed.
|
|
3
|
+
*
|
|
4
|
+
* All vertices start in partition 1. A random seed is picked, then BFS
|
|
5
|
+
* expansion moves vertices into partition 0 one at a time until partition 0
|
|
6
|
+
* reaches the target weight. Includes METIS's "drain" handling: if popping a
|
|
7
|
+
* vertex would underflow partition 1's minimum weight, skip it and wait for
|
|
8
|
+
* lighter candidates further down the queue.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors `GrowBisection` from libmetis/initpart.c.
|
|
11
|
+
*
|
|
12
|
+
* Writes to `graph.vertex_partition[]`. Caller is responsible for sizing
|
|
13
|
+
* `graph.partition_weights` to 2 entries (which is allocated by the standard
|
|
14
|
+
* `allocate_partition_state(2)` path).
|
|
15
|
+
*
|
|
16
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph
|
|
17
|
+
* @param {number} target_weight_for_partition_0 the bisection target — partition
|
|
18
|
+
* 0 should end up at roughly this weight
|
|
19
|
+
* @param {number} ub_factor load-imbalance factor (e.g. 1.03)
|
|
20
|
+
* @param {function():number} random
|
|
21
|
+
*/
|
|
22
|
+
export function grow_bisection(graph: import('../MetisGraph.js').MetisGraph, target_weight_for_partition_0: number, ub_factor: number, random: () => number): void;
|
|
23
|
+
//# sourceMappingURL=grow_bisection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grow_bisection.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/graph/metis/native/bisection/grow_bisection.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,sCANW,OAAO,kBAAkB,EAAE,UAAU,iCACrC,MAAM,aAEN,MAAM,gBACK,MAAM,QAmH3B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { randomIntegerBetween } from "../../../../math/random/randomIntegerBetween.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Initial bisection by BFS growth from a single random seed.
|
|
5
|
+
*
|
|
6
|
+
* All vertices start in partition 1. A random seed is picked, then BFS
|
|
7
|
+
* expansion moves vertices into partition 0 one at a time until partition 0
|
|
8
|
+
* reaches the target weight. Includes METIS's "drain" handling: if popping a
|
|
9
|
+
* vertex would underflow partition 1's minimum weight, skip it and wait for
|
|
10
|
+
* lighter candidates further down the queue.
|
|
11
|
+
*
|
|
12
|
+
* Mirrors `GrowBisection` from libmetis/initpart.c.
|
|
13
|
+
*
|
|
14
|
+
* Writes to `graph.vertex_partition[]`. Caller is responsible for sizing
|
|
15
|
+
* `graph.partition_weights` to 2 entries (which is allocated by the standard
|
|
16
|
+
* `allocate_partition_state(2)` path).
|
|
17
|
+
*
|
|
18
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph
|
|
19
|
+
* @param {number} target_weight_for_partition_0 the bisection target — partition
|
|
20
|
+
* 0 should end up at roughly this weight
|
|
21
|
+
* @param {number} ub_factor load-imbalance factor (e.g. 1.03)
|
|
22
|
+
* @param {function():number} random
|
|
23
|
+
*/
|
|
24
|
+
export function grow_bisection(graph, target_weight_for_partition_0, ub_factor, random) {
|
|
25
|
+
const vertex_count = graph.vertex_count;
|
|
26
|
+
const edge_addresses = graph.edge_addresses;
|
|
27
|
+
const adjacency = graph.adjacency;
|
|
28
|
+
const vertex_weights = graph.vertex_weights;
|
|
29
|
+
const total_vertex_weight = graph.total_vertex_weight;
|
|
30
|
+
const vertex_partition = graph.vertex_partition;
|
|
31
|
+
const partition_weights = graph.partition_weights;
|
|
32
|
+
|
|
33
|
+
const partition_1_minimum_weight = Math.floor(
|
|
34
|
+
(total_vertex_weight - target_weight_for_partition_0) / ub_factor
|
|
35
|
+
);
|
|
36
|
+
const partition_1_maximum_weight = Math.ceil(
|
|
37
|
+
(total_vertex_weight - target_weight_for_partition_0) * ub_factor
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Start with everything in partition 1.
|
|
41
|
+
vertex_partition.fill(1);
|
|
42
|
+
partition_weights[0] = 0;
|
|
43
|
+
partition_weights[1] = total_vertex_weight;
|
|
44
|
+
|
|
45
|
+
if (vertex_count === 0) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const bfs_queue = new Uint32Array(vertex_count);
|
|
50
|
+
const touched = new Uint8Array(vertex_count);
|
|
51
|
+
|
|
52
|
+
const seed_vertex = randomIntegerBetween(random, 0, vertex_count - 1);
|
|
53
|
+
bfs_queue[0] = seed_vertex;
|
|
54
|
+
touched[seed_vertex] = 1;
|
|
55
|
+
let queue_head = 0;
|
|
56
|
+
let queue_tail = 1;
|
|
57
|
+
let unclaimed_count = vertex_count - 1;
|
|
58
|
+
let in_drain_mode = false;
|
|
59
|
+
|
|
60
|
+
for (;;) {
|
|
61
|
+
if (queue_head === queue_tail) {
|
|
62
|
+
// BFS frontier exhausted before reaching the target — the graph
|
|
63
|
+
// (or this component of it) is smaller than expected. Either the
|
|
64
|
+
// graph is disconnected, or partition 0 already overflowed its
|
|
65
|
+
// target and entered drain mode permanently.
|
|
66
|
+
if (unclaimed_count === 0 || in_drain_mode) {
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
// Pick a random unclaimed vertex to seed a new BFS branch.
|
|
70
|
+
let skip = randomIntegerBetween(random, 0, unclaimed_count - 1);
|
|
71
|
+
let chosen = -1;
|
|
72
|
+
for (let candidate = 0; candidate < vertex_count; candidate++) {
|
|
73
|
+
if (touched[candidate] !== 0) continue;
|
|
74
|
+
if (skip === 0) {
|
|
75
|
+
chosen = candidate;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
skip--;
|
|
79
|
+
}
|
|
80
|
+
if (chosen === -1) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
bfs_queue[queue_tail++] = chosen;
|
|
84
|
+
touched[chosen] = 1;
|
|
85
|
+
unclaimed_count--;
|
|
86
|
+
queue_head = queue_tail - 1;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const vertex = bfs_queue[queue_head++];
|
|
90
|
+
|
|
91
|
+
// Moving this vertex would underflow partition 1's lower bound.
|
|
92
|
+
// METIS calls this "drain mode": skip the vertex and try the next.
|
|
93
|
+
if (partition_weights[0] > 0 && partition_weights[1] - vertex_weights[vertex] < partition_1_minimum_weight) {
|
|
94
|
+
in_drain_mode = true;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
vertex_partition[vertex] = 0;
|
|
99
|
+
partition_weights[0] += vertex_weights[vertex];
|
|
100
|
+
partition_weights[1] -= vertex_weights[vertex];
|
|
101
|
+
|
|
102
|
+
if (partition_weights[1] <= partition_1_maximum_weight) {
|
|
103
|
+
// Partition 1 is at or below the upper bound — partition 0 is full enough.
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
in_drain_mode = false;
|
|
108
|
+
|
|
109
|
+
const edge_start = edge_addresses[vertex];
|
|
110
|
+
const edge_end = edge_addresses[vertex + 1];
|
|
111
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
112
|
+
const neighbor = adjacency[edge_offset];
|
|
113
|
+
if (touched[neighbor] === 0) {
|
|
114
|
+
bfs_queue[queue_tail++] = neighbor;
|
|
115
|
+
touched[neighbor] = 1;
|
|
116
|
+
unclaimed_count--;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Pathological edge cases — make sure both partitions are non-empty so
|
|
122
|
+
// downstream code doesn't choke on a degenerate bisection.
|
|
123
|
+
if (partition_weights[0] === 0) {
|
|
124
|
+
const forced_seed = randomIntegerBetween(random, 0, vertex_count - 1);
|
|
125
|
+
partition_weights[0] += vertex_weights[forced_seed];
|
|
126
|
+
partition_weights[1] -= vertex_weights[forced_seed];
|
|
127
|
+
vertex_partition[forced_seed] = 0;
|
|
128
|
+
}
|
|
129
|
+
if (partition_weights[1] === 0) {
|
|
130
|
+
const forced_seed = randomIntegerBetween(random, 0, vertex_count - 1);
|
|
131
|
+
if (vertex_partition[forced_seed] === 0) {
|
|
132
|
+
partition_weights[0] -= vertex_weights[forced_seed];
|
|
133
|
+
partition_weights[1] += vertex_weights[forced_seed];
|
|
134
|
+
vertex_partition[forced_seed] = 1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Given a graph and a `vertex_partition[]` containing only 0 and 1, build the
|
|
3
|
+
* two induced subgraphs (one per side) and return them along with vertex-id
|
|
4
|
+
* mappings back to the parent.
|
|
5
|
+
*
|
|
6
|
+
* Each subgraph's CSR contains only the edges with both endpoints on the same
|
|
7
|
+
* side. Cross-edges are dropped — they represent the bisection cut and don't
|
|
8
|
+
* play a role in further recursion.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors `SplitGraphPart` from libmetis/pmetis.c, simplified.
|
|
11
|
+
*
|
|
12
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph fine graph with a 0/1
|
|
13
|
+
* `vertex_partition[]` populated by `grow_bisection` + `fm_2way`
|
|
14
|
+
* @returns {{
|
|
15
|
+
* side_0_subgraph: MetisGraph,
|
|
16
|
+
* side_1_subgraph: MetisGraph,
|
|
17
|
+
* side_0_subgraph_to_parent: Uint32Array,
|
|
18
|
+
* side_1_subgraph_to_parent: Uint32Array,
|
|
19
|
+
* }}
|
|
20
|
+
*/
|
|
21
|
+
export function split_graph_two_way(graph: import('../MetisGraph.js').MetisGraph): {
|
|
22
|
+
side_0_subgraph: MetisGraph;
|
|
23
|
+
side_1_subgraph: MetisGraph;
|
|
24
|
+
side_0_subgraph_to_parent: Uint32Array;
|
|
25
|
+
side_1_subgraph_to_parent: Uint32Array;
|
|
26
|
+
};
|
|
27
|
+
import { MetisGraph } from "../MetisGraph.js";
|
|
28
|
+
//# sourceMappingURL=split_graph_two_way.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split_graph_two_way.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/graph/metis/native/bisection/split_graph_two_way.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,2CATW,OAAO,kBAAkB,EAAE,UAAU;qBAG1B,UAAU;qBACV,UAAU;+BACA,WAAW;+BACX,WAAW;EAmG1C;2BAtH0B,kBAAkB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { MetisGraph } from "../MetisGraph.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Given a graph and a `vertex_partition[]` containing only 0 and 1, build the
|
|
5
|
+
* two induced subgraphs (one per side) and return them along with vertex-id
|
|
6
|
+
* mappings back to the parent.
|
|
7
|
+
*
|
|
8
|
+
* Each subgraph's CSR contains only the edges with both endpoints on the same
|
|
9
|
+
* side. Cross-edges are dropped — they represent the bisection cut and don't
|
|
10
|
+
* play a role in further recursion.
|
|
11
|
+
*
|
|
12
|
+
* Mirrors `SplitGraphPart` from libmetis/pmetis.c, simplified.
|
|
13
|
+
*
|
|
14
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph fine graph with a 0/1
|
|
15
|
+
* `vertex_partition[]` populated by `grow_bisection` + `fm_2way`
|
|
16
|
+
* @returns {{
|
|
17
|
+
* side_0_subgraph: MetisGraph,
|
|
18
|
+
* side_1_subgraph: MetisGraph,
|
|
19
|
+
* side_0_subgraph_to_parent: Uint32Array,
|
|
20
|
+
* side_1_subgraph_to_parent: Uint32Array,
|
|
21
|
+
* }}
|
|
22
|
+
*/
|
|
23
|
+
export function split_graph_two_way(graph) {
|
|
24
|
+
const vertex_count = graph.vertex_count;
|
|
25
|
+
const parent_edge_addresses = graph.edge_addresses;
|
|
26
|
+
const parent_adjacency = graph.adjacency;
|
|
27
|
+
const parent_edge_weights = graph.edge_weights;
|
|
28
|
+
const parent_vertex_weights = graph.vertex_weights;
|
|
29
|
+
const parent_vertex_partition = graph.vertex_partition;
|
|
30
|
+
|
|
31
|
+
// --- Count per-side vertices and assign subgraph-local ids ---
|
|
32
|
+
const parent_to_subgraph = new Uint32Array(vertex_count);
|
|
33
|
+
let side_0_vertex_count = 0;
|
|
34
|
+
let side_1_vertex_count = 0;
|
|
35
|
+
for (let vertex = 0; vertex < vertex_count; vertex++) {
|
|
36
|
+
if (parent_vertex_partition[vertex] === 0) {
|
|
37
|
+
parent_to_subgraph[vertex] = side_0_vertex_count;
|
|
38
|
+
side_0_vertex_count++;
|
|
39
|
+
} else {
|
|
40
|
+
parent_to_subgraph[vertex] = side_1_vertex_count;
|
|
41
|
+
side_1_vertex_count++;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// --- Count per-side edges (only edges with both endpoints same side) ---
|
|
46
|
+
let side_0_edge_count = 0;
|
|
47
|
+
let side_1_edge_count = 0;
|
|
48
|
+
for (let vertex = 0; vertex < vertex_count; vertex++) {
|
|
49
|
+
const my_side = parent_vertex_partition[vertex];
|
|
50
|
+
const edge_start = parent_edge_addresses[vertex];
|
|
51
|
+
const edge_end = parent_edge_addresses[vertex + 1];
|
|
52
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
53
|
+
if (parent_vertex_partition[parent_adjacency[edge_offset]] === my_side) {
|
|
54
|
+
if (my_side === 0) {
|
|
55
|
+
side_0_edge_count++;
|
|
56
|
+
} else {
|
|
57
|
+
side_1_edge_count++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// --- Allocate subgraphs and inverse-id maps ---
|
|
64
|
+
const side_0_subgraph = new MetisGraph(side_0_vertex_count, side_0_edge_count);
|
|
65
|
+
const side_1_subgraph = new MetisGraph(side_1_vertex_count, side_1_edge_count);
|
|
66
|
+
|
|
67
|
+
const side_0_subgraph_to_parent = new Uint32Array(side_0_vertex_count);
|
|
68
|
+
const side_1_subgraph_to_parent = new Uint32Array(side_1_vertex_count);
|
|
69
|
+
|
|
70
|
+
// --- Fill the subgraphs ---
|
|
71
|
+
side_0_subgraph.edge_addresses[0] = 0;
|
|
72
|
+
side_1_subgraph.edge_addresses[0] = 0;
|
|
73
|
+
let side_0_cursor = 0;
|
|
74
|
+
let side_1_cursor = 0;
|
|
75
|
+
|
|
76
|
+
for (let vertex = 0; vertex < vertex_count; vertex++) {
|
|
77
|
+
const my_side = parent_vertex_partition[vertex];
|
|
78
|
+
const subgraph_vertex = parent_to_subgraph[vertex];
|
|
79
|
+
|
|
80
|
+
const edge_start = parent_edge_addresses[vertex];
|
|
81
|
+
const edge_end = parent_edge_addresses[vertex + 1];
|
|
82
|
+
|
|
83
|
+
if (my_side === 0) {
|
|
84
|
+
side_0_subgraph_to_parent[subgraph_vertex] = vertex;
|
|
85
|
+
side_0_subgraph.vertex_weights[subgraph_vertex] = parent_vertex_weights[vertex];
|
|
86
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
87
|
+
const neighbor = parent_adjacency[edge_offset];
|
|
88
|
+
if (parent_vertex_partition[neighbor] === 0) {
|
|
89
|
+
side_0_subgraph.adjacency[side_0_cursor] = parent_to_subgraph[neighbor];
|
|
90
|
+
side_0_subgraph.edge_weights[side_0_cursor] = parent_edge_weights[edge_offset];
|
|
91
|
+
side_0_cursor++;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
side_0_subgraph.edge_addresses[subgraph_vertex + 1] = side_0_cursor;
|
|
95
|
+
} else {
|
|
96
|
+
side_1_subgraph_to_parent[subgraph_vertex] = vertex;
|
|
97
|
+
side_1_subgraph.vertex_weights[subgraph_vertex] = parent_vertex_weights[vertex];
|
|
98
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
99
|
+
const neighbor = parent_adjacency[edge_offset];
|
|
100
|
+
if (parent_vertex_partition[neighbor] === 1) {
|
|
101
|
+
side_1_subgraph.adjacency[side_1_cursor] = parent_to_subgraph[neighbor];
|
|
102
|
+
side_1_subgraph.edge_weights[side_1_cursor] = parent_edge_weights[edge_offset];
|
|
103
|
+
side_1_cursor++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
side_1_subgraph.edge_addresses[subgraph_vertex + 1] = side_1_cursor;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
side_0_subgraph.refresh_total_vertex_weight();
|
|
111
|
+
side_1_subgraph.refresh_total_vertex_weight();
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
side_0_subgraph,
|
|
115
|
+
side_1_subgraph,
|
|
116
|
+
side_0_subgraph_to_parent,
|
|
117
|
+
side_1_subgraph_to_parent
|
|
118
|
+
};
|
|
119
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drive the coarsening phase: repeatedly match + contract until the coarsest
|
|
3
|
+
* graph is small enough, or the contraction ratio drops below the threshold.
|
|
4
|
+
*
|
|
5
|
+
* On entry, `graph` is the original finest graph. On return, the result is the
|
|
6
|
+
* coarsest graph; walking `.finer_graph` repeatedly reaches the original.
|
|
7
|
+
*
|
|
8
|
+
* Mirrors `CoarsenGraph` from libmetis/coarsen.c.
|
|
9
|
+
*
|
|
10
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph
|
|
11
|
+
* @param {{random: function():number, coarsen_until_vertex_count: number}} opts
|
|
12
|
+
* `coarsen_until_vertex_count`: stop coarsening once vertex_count drops at or
|
|
13
|
+
* below this. METIS uses `max(vertex_count / (20·log2(nparts)), 30·nparts)`.
|
|
14
|
+
* @returns {import('../MetisGraph.js').MetisGraph} the coarsest graph
|
|
15
|
+
*/
|
|
16
|
+
export function coarsen_graph(graph: import('../MetisGraph.js').MetisGraph, opts: {
|
|
17
|
+
random: () => number;
|
|
18
|
+
coarsen_until_vertex_count: number;
|
|
19
|
+
}): import('../MetisGraph.js').MetisGraph;
|
|
20
|
+
//# sourceMappingURL=coarsen_graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coarsen_graph.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/graph/metis/native/coarsen/coarsen_graph.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;GAcG;AACH,qCANW,OAAO,kBAAkB,EAAE,UAAU;kBACjB,MAAM;gCAA8B,MAAM;IAG5D,OAAO,kBAAkB,EAAE,UAAU,CAgEjD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { create_coarse_graph } from "./create_coarse_graph.js";
|
|
2
|
+
import { match_shem } from "./match_shem.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* If contraction shrinks the graph by less than this much in a level, further
|
|
6
|
+
* coarsening probably won't help. Matches the COARSEN_FRACTION threshold in
|
|
7
|
+
* libmetis/defs.h.
|
|
8
|
+
*/
|
|
9
|
+
const MIN_USEFUL_CONTRACTION_RATIO = 0.85;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Safety cap: if we somehow keep contracting forever (shouldn't happen, but
|
|
13
|
+
* stops a runaway loop in pathological inputs).
|
|
14
|
+
*/
|
|
15
|
+
const MAX_COARSENING_LEVELS = 32;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Drive the coarsening phase: repeatedly match + contract until the coarsest
|
|
19
|
+
* graph is small enough, or the contraction ratio drops below the threshold.
|
|
20
|
+
*
|
|
21
|
+
* On entry, `graph` is the original finest graph. On return, the result is the
|
|
22
|
+
* coarsest graph; walking `.finer_graph` repeatedly reaches the original.
|
|
23
|
+
*
|
|
24
|
+
* Mirrors `CoarsenGraph` from libmetis/coarsen.c.
|
|
25
|
+
*
|
|
26
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph
|
|
27
|
+
* @param {{random: function():number, coarsen_until_vertex_count: number}} opts
|
|
28
|
+
* `coarsen_until_vertex_count`: stop coarsening once vertex_count drops at or
|
|
29
|
+
* below this. METIS uses `max(vertex_count / (20·log2(nparts)), 30·nparts)`.
|
|
30
|
+
* @returns {import('../MetisGraph.js').MetisGraph} the coarsest graph
|
|
31
|
+
*/
|
|
32
|
+
export function coarsen_graph(graph, opts) {
|
|
33
|
+
const random = opts.random;
|
|
34
|
+
const coarsen_until_vertex_count = opts.coarsen_until_vertex_count;
|
|
35
|
+
|
|
36
|
+
let current_level = graph;
|
|
37
|
+
let remaining_levels = MAX_COARSENING_LEVELS;
|
|
38
|
+
|
|
39
|
+
// Three vertex_count-sized buffers reused across every coarsening level.
|
|
40
|
+
// Sized to the finest graph's vertex_count; subsequent (coarser) levels
|
|
41
|
+
// only need a prefix. match_shem either refills the active range itself
|
|
42
|
+
// (`partner_of_vertex`) or overwrites every entry it reads
|
|
43
|
+
// (`visit_order` and `sort_key_degree`), so stale tail data is harmless.
|
|
44
|
+
const partner_of_vertex = new Uint32Array(graph.vertex_count);
|
|
45
|
+
const visit_order = new Uint32Array(graph.vertex_count);
|
|
46
|
+
const sort_key_degree = new Uint32Array(graph.vertex_count);
|
|
47
|
+
|
|
48
|
+
while (remaining_levels-- > 0) {
|
|
49
|
+
|
|
50
|
+
// Cap a single coarse vertex's weight at ~1.5x what one balanced
|
|
51
|
+
// partition could hold at the coarsest level. METIS uses
|
|
52
|
+
// 1.5 * total_vertex_weight / coarsen_until_vertex_count.
|
|
53
|
+
// The total is preserved across coarsening, so recomputing per level
|
|
54
|
+
// is cheap and follows the size threshold naturally.
|
|
55
|
+
const max_coarse_vertex_weight = Math.max(
|
|
56
|
+
1,
|
|
57
|
+
Math.ceil(1.5 * current_level.total_vertex_weight / coarsen_until_vertex_count)
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const coarse_vertex_count = match_shem(
|
|
61
|
+
current_level,
|
|
62
|
+
random,
|
|
63
|
+
max_coarse_vertex_weight,
|
|
64
|
+
partner_of_vertex,
|
|
65
|
+
visit_order,
|
|
66
|
+
sort_key_degree
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
if (coarse_vertex_count >= current_level.vertex_count) {
|
|
70
|
+
// Matching collapsed nothing — graph is too irregular to benefit
|
|
71
|
+
// from another level. Stop.
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const coarser = create_coarse_graph(current_level, coarse_vertex_count, partner_of_vertex);
|
|
76
|
+
const contraction_ratio = coarser.vertex_count / current_level.vertex_count;
|
|
77
|
+
|
|
78
|
+
current_level = coarser;
|
|
79
|
+
|
|
80
|
+
if (current_level.vertex_count <= coarsen_until_vertex_count) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
if (contraction_ratio > MIN_USEFUL_CONTRACTION_RATIO) {
|
|
84
|
+
// Contraction stalled; further levels offer diminishing returns.
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
if (current_level.adjacency_length < current_level.vertex_count / 2) {
|
|
88
|
+
// Graph is too sparse to benefit from another coarsening pass.
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return current_level;
|
|
94
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract a matched graph into its coarse counterpart.
|
|
3
|
+
*
|
|
4
|
+
* Each matched pair (vertex, partner) collapses to a single coarse vertex whose
|
|
5
|
+
* weight is the sum of both endpoints. Parallel edges to the same coarse
|
|
6
|
+
* neighbour merge into one edge with summed weight. Self-loops produced by
|
|
7
|
+
* collapsing the matched pair itself are dropped.
|
|
8
|
+
*
|
|
9
|
+
* Mirrors `CreateCoarseGraphNoMask` from libmetis/coarsen.c. The masked variant
|
|
10
|
+
* (open-addressing hash with a power-of-two mask) is skipped — the unmasked
|
|
11
|
+
* flat-htable path is fast enough at our scale and is simpler.
|
|
12
|
+
*
|
|
13
|
+
* Precondition: `match_shem` has run and produced `graph.coarse_vertex_map`
|
|
14
|
+
* indexed such that processing vertices in order v=0..vertex_count increments
|
|
15
|
+
* through coarse ids 0..coarse_vertex_count-1.
|
|
16
|
+
*
|
|
17
|
+
* @param {MetisGraph} graph fine graph (input)
|
|
18
|
+
* @param {number} coarse_vertex_count
|
|
19
|
+
* @param {Uint32Array} partner_of_vertex `[v]` = match partner of v, or v itself if alone
|
|
20
|
+
* @returns {MetisGraph} the coarse graph (also assigned to `graph.coarser_graph`)
|
|
21
|
+
*/
|
|
22
|
+
export function create_coarse_graph(graph: MetisGraph, coarse_vertex_count: number, partner_of_vertex: Uint32Array): MetisGraph;
|
|
23
|
+
import { MetisGraph } from "../MetisGraph.js";
|
|
24
|
+
//# sourceMappingURL=create_coarse_graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_coarse_graph.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/graph/metis/native/coarsen/create_coarse_graph.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,2CALW,UAAU,uBACV,MAAM,qBACN,WAAW,GACT,UAAU,CAuItB;2BA5J0B,kBAAkB"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { assert } from "../../../../assert.js";
|
|
2
|
+
import { MetisGraph } from "../MetisGraph.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Contract a matched graph into its coarse counterpart.
|
|
6
|
+
*
|
|
7
|
+
* Each matched pair (vertex, partner) collapses to a single coarse vertex whose
|
|
8
|
+
* weight is the sum of both endpoints. Parallel edges to the same coarse
|
|
9
|
+
* neighbour merge into one edge with summed weight. Self-loops produced by
|
|
10
|
+
* collapsing the matched pair itself are dropped.
|
|
11
|
+
*
|
|
12
|
+
* Mirrors `CreateCoarseGraphNoMask` from libmetis/coarsen.c. The masked variant
|
|
13
|
+
* (open-addressing hash with a power-of-two mask) is skipped — the unmasked
|
|
14
|
+
* flat-htable path is fast enough at our scale and is simpler.
|
|
15
|
+
*
|
|
16
|
+
* Precondition: `match_shem` has run and produced `graph.coarse_vertex_map`
|
|
17
|
+
* indexed such that processing vertices in order v=0..vertex_count increments
|
|
18
|
+
* through coarse ids 0..coarse_vertex_count-1.
|
|
19
|
+
*
|
|
20
|
+
* @param {MetisGraph} graph fine graph (input)
|
|
21
|
+
* @param {number} coarse_vertex_count
|
|
22
|
+
* @param {Uint32Array} partner_of_vertex `[v]` = match partner of v, or v itself if alone
|
|
23
|
+
* @returns {MetisGraph} the coarse graph (also assigned to `graph.coarser_graph`)
|
|
24
|
+
*/
|
|
25
|
+
export function create_coarse_graph(graph, coarse_vertex_count, partner_of_vertex) {
|
|
26
|
+
|
|
27
|
+
const vertex_count = graph.vertex_count;
|
|
28
|
+
const edge_addresses = graph.edge_addresses;
|
|
29
|
+
const adjacency = graph.adjacency;
|
|
30
|
+
const edge_weights = graph.edge_weights;
|
|
31
|
+
const vertex_weights = graph.vertex_weights;
|
|
32
|
+
const coarse_vertex_map = graph.coarse_vertex_map;
|
|
33
|
+
|
|
34
|
+
assert.equal(coarse_vertex_map !== null, true, 'graph.coarse_vertex_map must be set by match_shem before contraction');
|
|
35
|
+
|
|
36
|
+
// Worst-case sizing: every edge of the fine graph survives unmerged. The
|
|
37
|
+
// actual edge count is known only after the merge pass, so we trim at the end.
|
|
38
|
+
const coarse_graph = new MetisGraph(coarse_vertex_count, graph.adjacency_length);
|
|
39
|
+
const coarse_edge_addresses = coarse_graph.edge_addresses;
|
|
40
|
+
const coarse_adjacency = coarse_graph.adjacency;
|
|
41
|
+
const coarse_edge_weights = coarse_graph.edge_weights;
|
|
42
|
+
const coarse_vertex_weights = coarse_graph.vertex_weights;
|
|
43
|
+
|
|
44
|
+
// For each coarse neighbour id k that we've already seen while building the
|
|
45
|
+
// current super-vertex's adjacency list, `coarse_nbr_position[k]` is its
|
|
46
|
+
// slot in our local section of coarse_adjacency. -1 = not seen yet.
|
|
47
|
+
// Reset only at the touched entries per vertex (O(degree)) rather than
|
|
48
|
+
// wholesale (O(coarse_vertex_count)).
|
|
49
|
+
const coarse_nbr_position = new Int32Array(coarse_vertex_count);
|
|
50
|
+
coarse_nbr_position.fill(-1);
|
|
51
|
+
|
|
52
|
+
let next_coarse_id = 0; // must equal coarse_vertex_map[vertex] when we process it
|
|
53
|
+
let coarse_edge_cursor = 0; // running write position into coarse_adjacency / coarse_edge_weights
|
|
54
|
+
coarse_edge_addresses[0] = 0;
|
|
55
|
+
|
|
56
|
+
for (let vertex = 0; vertex < vertex_count; vertex++) {
|
|
57
|
+
const partner = partner_of_vertex[vertex];
|
|
58
|
+
if (partner < vertex) {
|
|
59
|
+
// Already handled when we processed `partner` earlier in this loop.
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
assert.equal(
|
|
64
|
+
coarse_vertex_map[vertex], next_coarse_id,
|
|
65
|
+
'coarse_vertex_map[v] should equal running coarse id counter; match_shem renumbering was skipped or wrong'
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
coarse_vertex_weights[next_coarse_id] = vertex_weights[vertex];
|
|
69
|
+
|
|
70
|
+
let coarse_nbr_count_for_this_vertex = 0;
|
|
71
|
+
|
|
72
|
+
// ----- Merge vertex's neighbours into the coarse adjacency -----
|
|
73
|
+
{
|
|
74
|
+
const edge_start = edge_addresses[vertex];
|
|
75
|
+
const edge_end = edge_addresses[vertex + 1];
|
|
76
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
77
|
+
const coarse_neighbor = coarse_vertex_map[adjacency[edge_offset]];
|
|
78
|
+
const existing_position = coarse_nbr_position[coarse_neighbor];
|
|
79
|
+
if (existing_position === -1) {
|
|
80
|
+
coarse_adjacency[coarse_edge_cursor + coarse_nbr_count_for_this_vertex] = coarse_neighbor;
|
|
81
|
+
coarse_edge_weights[coarse_edge_cursor + coarse_nbr_count_for_this_vertex] = edge_weights[edge_offset];
|
|
82
|
+
coarse_nbr_position[coarse_neighbor] = coarse_nbr_count_for_this_vertex;
|
|
83
|
+
coarse_nbr_count_for_this_vertex++;
|
|
84
|
+
} else {
|
|
85
|
+
coarse_edge_weights[coarse_edge_cursor + existing_position] += edge_weights[edge_offset];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (vertex !== partner) {
|
|
91
|
+
// ----- Add the partner's weight and merge its neighbours too -----
|
|
92
|
+
coarse_vertex_weights[next_coarse_id] += vertex_weights[partner];
|
|
93
|
+
|
|
94
|
+
const edge_start = edge_addresses[partner];
|
|
95
|
+
const edge_end = edge_addresses[partner + 1];
|
|
96
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
97
|
+
const coarse_neighbor = coarse_vertex_map[adjacency[edge_offset]];
|
|
98
|
+
const existing_position = coarse_nbr_position[coarse_neighbor];
|
|
99
|
+
if (existing_position === -1) {
|
|
100
|
+
coarse_adjacency[coarse_edge_cursor + coarse_nbr_count_for_this_vertex] = coarse_neighbor;
|
|
101
|
+
coarse_edge_weights[coarse_edge_cursor + coarse_nbr_count_for_this_vertex] = edge_weights[edge_offset];
|
|
102
|
+
coarse_nbr_position[coarse_neighbor] = coarse_nbr_count_for_this_vertex;
|
|
103
|
+
coarse_nbr_count_for_this_vertex++;
|
|
104
|
+
} else {
|
|
105
|
+
coarse_edge_weights[coarse_edge_cursor + existing_position] += edge_weights[edge_offset];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// The (vertex, partner) edge maps to (next_coarse_id, next_coarse_id):
|
|
110
|
+
// a self-loop. Drop it by swap-with-last.
|
|
111
|
+
const self_loop_position = coarse_nbr_position[next_coarse_id];
|
|
112
|
+
if (self_loop_position !== -1) {
|
|
113
|
+
const last_position = coarse_nbr_count_for_this_vertex - 1;
|
|
114
|
+
if (self_loop_position !== last_position) {
|
|
115
|
+
const moved_neighbor = coarse_adjacency[coarse_edge_cursor + last_position];
|
|
116
|
+
coarse_adjacency[coarse_edge_cursor + self_loop_position] = moved_neighbor;
|
|
117
|
+
coarse_edge_weights[coarse_edge_cursor + self_loop_position] = coarse_edge_weights[coarse_edge_cursor + last_position];
|
|
118
|
+
coarse_nbr_position[moved_neighbor] = self_loop_position;
|
|
119
|
+
}
|
|
120
|
+
coarse_nbr_count_for_this_vertex = last_position;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Reset coarse_nbr_position for just the slots we touched.
|
|
125
|
+
for (let local_position = 0; local_position < coarse_nbr_count_for_this_vertex; local_position++) {
|
|
126
|
+
coarse_nbr_position[coarse_adjacency[coarse_edge_cursor + local_position]] = -1;
|
|
127
|
+
}
|
|
128
|
+
// Self-loop slot may have been populated and popped without leaving a
|
|
129
|
+
// trace in the loop above; clear unconditionally so subsequent vertices
|
|
130
|
+
// don't see stale state.
|
|
131
|
+
coarse_nbr_position[next_coarse_id] = -1;
|
|
132
|
+
|
|
133
|
+
coarse_edge_cursor += coarse_nbr_count_for_this_vertex;
|
|
134
|
+
next_coarse_id++;
|
|
135
|
+
coarse_edge_addresses[next_coarse_id] = coarse_edge_cursor;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
assert.equal(next_coarse_id, coarse_vertex_count, 'final coarse id counter must equal coarse_vertex_count');
|
|
139
|
+
|
|
140
|
+
// Record the actual adjacency length, but DON'T truncate the underlying
|
|
141
|
+
// buffer. Truncation here would allocate a fresh shared buffer and bulk-copy
|
|
142
|
+
// four typed arrays into it just to shrink — at every coarsening level — and
|
|
143
|
+
// the immediate caller doesn't need the savings; the coarse graph is
|
|
144
|
+
// short-lived relative to the overall partitioning call.
|
|
145
|
+
//
|
|
146
|
+
// The unused tail of `adjacency` and `edge_weights` is harmless: downstream
|
|
147
|
+
// code consistently uses `adjacency_length` as the source of truth (never
|
|
148
|
+
// `.length`). Callers that genuinely need the memory back can call
|
|
149
|
+
// `truncate_adjacency` themselves once they're done filling the graph.
|
|
150
|
+
coarse_graph.adjacency_length = coarse_edge_cursor;
|
|
151
|
+
coarse_graph.refresh_total_vertex_weight();
|
|
152
|
+
|
|
153
|
+
// Link the levels for later projection back down.
|
|
154
|
+
coarse_graph.finer_graph = graph;
|
|
155
|
+
graph.coarser_graph = coarse_graph;
|
|
156
|
+
|
|
157
|
+
return coarse_graph;
|
|
158
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sorted Heavy-Edge Matching.
|
|
3
|
+
*
|
|
4
|
+
* Visits vertices in random order biased toward lower degree first, and for
|
|
5
|
+
* each unmatched vertex pairs it with the unmatched neighbour sharing the
|
|
6
|
+
* heaviest edge weight (subject to a coarse-vertex weight cap).
|
|
7
|
+
*
|
|
8
|
+
* Outputs:
|
|
9
|
+
* - `graph.coarse_vertex_map[v]` = id of the coarse vertex that vertex v
|
|
10
|
+
* collapses into. Numbered so that iterating v=0..vertex_count walks coarse
|
|
11
|
+
* ids 0..coarse_vertex_count-1 in order — this property is required by
|
|
12
|
+
* `create_coarse_graph`.
|
|
13
|
+
* - `partner_of_vertex[v]` = the partner of vertex v (or v itself if it ended
|
|
14
|
+
* up alone in the matching). Caller-provided buffer, filled in place.
|
|
15
|
+
* - returns `coarse_vertex_count`, the number of coarse vertices created.
|
|
16
|
+
*
|
|
17
|
+
* Mirrors `Match_SHEM` from libmetis/coarsen.c, single-constraint branch.
|
|
18
|
+
* The 2-hop matching escape hatch is intentionally skipped — it's a degeneracy
|
|
19
|
+
* recovery for graphs with many isolated/low-degree vertices that's not on the
|
|
20
|
+
* critical path; can add later if cluster quality bites.
|
|
21
|
+
*
|
|
22
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph
|
|
23
|
+
* @param {function():number} random seeded RNG
|
|
24
|
+
* @param {number} max_coarse_vertex_weight cap on the combined weight of a
|
|
25
|
+
* matched pair; vertices whose own weight already exceeds this are forced
|
|
26
|
+
* into singleton coarse vertices
|
|
27
|
+
* @param {Uint32Array} partner_of_vertex caller-provided buffer of length
|
|
28
|
+
* `>= graph.vertex_count`. Will be filled with each vertex's match partner
|
|
29
|
+
* (or its own id if it ended up unmatched). The first `graph.vertex_count`
|
|
30
|
+
* entries are clobbered; any tail beyond that is left untouched.
|
|
31
|
+
* @param {Uint32Array} visit_order caller-provided scratch of length
|
|
32
|
+
* `>= graph.vertex_count`. Used as the (random-shuffled, degree-sorted)
|
|
33
|
+
* visitation order during matching. Contents on entry are ignored;
|
|
34
|
+
* contents on return are undefined.
|
|
35
|
+
* @param {Uint32Array} sort_key_degree caller-provided scratch of length
|
|
36
|
+
* `>= graph.vertex_count`. Holds the per-vertex degree buckets used to sort
|
|
37
|
+
* `visit_order`. Contents on entry are ignored; contents on return are undefined.
|
|
38
|
+
* @returns {number} `coarse_vertex_count`
|
|
39
|
+
*/
|
|
40
|
+
export function match_shem(graph: import('../MetisGraph.js').MetisGraph, random: () => number, max_coarse_vertex_weight: number, partner_of_vertex: Uint32Array, visit_order: Uint32Array, sort_key_degree: Uint32Array): number;
|
|
41
|
+
//# sourceMappingURL=match_shem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match_shem.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/graph/metis/native/coarsen/match_shem.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,kCAlBW,OAAO,kBAAkB,EAAE,UAAU,gBAC1B,MAAM,4BACjB,MAAM,qBAGN,WAAW,eAIX,WAAW,mBAIX,WAAW,GAGT,MAAM,CAoIlB"}
|