@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,175 @@
|
|
|
1
|
+
import { array_quick_sort_by_lookup_uint } from "../../../../collection/array/array_quick_sort_by_lookup_uint.js";
|
|
2
|
+
import { array_shuffle } from "../../../../collection/array/array_shuffle.js";
|
|
3
|
+
|
|
4
|
+
const UNMATCHED = 0xFFFFFFFF;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Sorted Heavy-Edge Matching.
|
|
8
|
+
*
|
|
9
|
+
* Visits vertices in random order biased toward lower degree first, and for
|
|
10
|
+
* each unmatched vertex pairs it with the unmatched neighbour sharing the
|
|
11
|
+
* heaviest edge weight (subject to a coarse-vertex weight cap).
|
|
12
|
+
*
|
|
13
|
+
* Outputs:
|
|
14
|
+
* - `graph.coarse_vertex_map[v]` = id of the coarse vertex that vertex v
|
|
15
|
+
* collapses into. Numbered so that iterating v=0..vertex_count walks coarse
|
|
16
|
+
* ids 0..coarse_vertex_count-1 in order — this property is required by
|
|
17
|
+
* `create_coarse_graph`.
|
|
18
|
+
* - `partner_of_vertex[v]` = the partner of vertex v (or v itself if it ended
|
|
19
|
+
* up alone in the matching). Caller-provided buffer, filled in place.
|
|
20
|
+
* - returns `coarse_vertex_count`, the number of coarse vertices created.
|
|
21
|
+
*
|
|
22
|
+
* Mirrors `Match_SHEM` from libmetis/coarsen.c, single-constraint branch.
|
|
23
|
+
* The 2-hop matching escape hatch is intentionally skipped — it's a degeneracy
|
|
24
|
+
* recovery for graphs with many isolated/low-degree vertices that's not on the
|
|
25
|
+
* critical path; can add later if cluster quality bites.
|
|
26
|
+
*
|
|
27
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph
|
|
28
|
+
* @param {function():number} random seeded RNG
|
|
29
|
+
* @param {number} max_coarse_vertex_weight cap on the combined weight of a
|
|
30
|
+
* matched pair; vertices whose own weight already exceeds this are forced
|
|
31
|
+
* into singleton coarse vertices
|
|
32
|
+
* @param {Uint32Array} partner_of_vertex caller-provided buffer of length
|
|
33
|
+
* `>= graph.vertex_count`. Will be filled with each vertex's match partner
|
|
34
|
+
* (or its own id if it ended up unmatched). The first `graph.vertex_count`
|
|
35
|
+
* entries are clobbered; any tail beyond that is left untouched.
|
|
36
|
+
* @param {Uint32Array} visit_order caller-provided scratch of length
|
|
37
|
+
* `>= graph.vertex_count`. Used as the (random-shuffled, degree-sorted)
|
|
38
|
+
* visitation order during matching. Contents on entry are ignored;
|
|
39
|
+
* contents on return are undefined.
|
|
40
|
+
* @param {Uint32Array} sort_key_degree caller-provided scratch of length
|
|
41
|
+
* `>= graph.vertex_count`. Holds the per-vertex degree buckets used to sort
|
|
42
|
+
* `visit_order`. Contents on entry are ignored; contents on return are undefined.
|
|
43
|
+
* @returns {number} `coarse_vertex_count`
|
|
44
|
+
*/
|
|
45
|
+
export function match_shem(
|
|
46
|
+
graph,
|
|
47
|
+
random,
|
|
48
|
+
max_coarse_vertex_weight,
|
|
49
|
+
partner_of_vertex,
|
|
50
|
+
visit_order,
|
|
51
|
+
sort_key_degree
|
|
52
|
+
) {
|
|
53
|
+
|
|
54
|
+
const vertex_count = graph.vertex_count;
|
|
55
|
+
const edge_addresses = graph.edge_addresses;
|
|
56
|
+
const adjacency = graph.adjacency;
|
|
57
|
+
const edge_weights = graph.edge_weights;
|
|
58
|
+
const vertex_weights = graph.vertex_weights;
|
|
59
|
+
|
|
60
|
+
const coarse_vertex_map = graph.coarse_vertex_map !== null && graph.coarse_vertex_map.length === vertex_count
|
|
61
|
+
? graph.coarse_vertex_map
|
|
62
|
+
: new Uint32Array(vertex_count);
|
|
63
|
+
graph.coarse_vertex_map = coarse_vertex_map;
|
|
64
|
+
|
|
65
|
+
partner_of_vertex.fill(UNMATCHED, 0, vertex_count);
|
|
66
|
+
|
|
67
|
+
if (vertex_count === 0) {
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Visitation order: random permutation, then sorted ascending by capped
|
|
72
|
+
// degree so low-degree (harder to match) vertices get first pick.
|
|
73
|
+
for (let v = 0; v < vertex_count; v++) {
|
|
74
|
+
visit_order[v] = v;
|
|
75
|
+
}
|
|
76
|
+
array_shuffle(random, visit_order, vertex_count);
|
|
77
|
+
|
|
78
|
+
// Visitation order key: bucket vertices by sqrt(1 + degree), capped at
|
|
79
|
+
// 4× average degree. Mirrors master's heuristic — much more permissive
|
|
80
|
+
// than 5.1.0's raw-degree + 0.7× cap. Effect: visitation order is roughly
|
|
81
|
+
// logarithmic in degree, so isolated high-degree outliers don't dominate
|
|
82
|
+
// the ordering. For graphs with degree variance (real meshes have these),
|
|
83
|
+
// this gives more uniform matching coverage.
|
|
84
|
+
const total_adjacency_length = edge_addresses[vertex_count];
|
|
85
|
+
const average_degree = Math.max(1, Math.floor(4.0 * (total_adjacency_length / vertex_count)));
|
|
86
|
+
|
|
87
|
+
for (let v = 0; v < vertex_count; v++) {
|
|
88
|
+
const degree = edge_addresses[v + 1] - edge_addresses[v];
|
|
89
|
+
const bucket = Math.floor(Math.sqrt(1 + degree));
|
|
90
|
+
sort_key_degree[v] = bucket > average_degree ? average_degree : bucket;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (vertex_count > 1) {
|
|
94
|
+
array_quick_sort_by_lookup_uint(visit_order, sort_key_degree, 0, vertex_count - 1);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// --- Pass 1: matching --------------------------------------------------
|
|
98
|
+
let next_unmatched_search_start = 0;
|
|
99
|
+
|
|
100
|
+
for (let visit_position = 0; visit_position < vertex_count; visit_position++) {
|
|
101
|
+
const vertex = visit_order[visit_position];
|
|
102
|
+
|
|
103
|
+
if (partner_of_vertex[vertex] !== UNMATCHED) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
let best_partner = vertex; // self-match if no candidate is found
|
|
108
|
+
let best_partner_edge_weight = -1;
|
|
109
|
+
|
|
110
|
+
if (vertex_weights[vertex] < max_coarse_vertex_weight) {
|
|
111
|
+
|
|
112
|
+
const edge_start = edge_addresses[vertex];
|
|
113
|
+
const edge_end = edge_addresses[vertex + 1];
|
|
114
|
+
|
|
115
|
+
if (edge_start === edge_end) {
|
|
116
|
+
// Isolated vertex: forward-scan visit_order for any other unmatched
|
|
117
|
+
// vertex. Mirrors METIS's "island" path, which ignores the weight cap
|
|
118
|
+
// for these pairings.
|
|
119
|
+
if (next_unmatched_search_start < visit_position) {
|
|
120
|
+
next_unmatched_search_start = visit_position;
|
|
121
|
+
}
|
|
122
|
+
next_unmatched_search_start++;
|
|
123
|
+
while (next_unmatched_search_start < vertex_count) {
|
|
124
|
+
const candidate = visit_order[next_unmatched_search_start];
|
|
125
|
+
if (partner_of_vertex[candidate] === UNMATCHED) {
|
|
126
|
+
best_partner = candidate;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
next_unmatched_search_start++;
|
|
130
|
+
}
|
|
131
|
+
} else {
|
|
132
|
+
// Heavy-edge: pick the unmatched neighbour whose edge has the
|
|
133
|
+
// greatest weight, subject to the coarse-weight cap.
|
|
134
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
135
|
+
const neighbor = adjacency[edge_offset];
|
|
136
|
+
const weight = edge_weights[edge_offset];
|
|
137
|
+
if (
|
|
138
|
+
partner_of_vertex[neighbor] === UNMATCHED &&
|
|
139
|
+
weight > best_partner_edge_weight &&
|
|
140
|
+
vertex_weights[vertex] + vertex_weights[neighbor] <= max_coarse_vertex_weight
|
|
141
|
+
) {
|
|
142
|
+
best_partner = neighbor;
|
|
143
|
+
best_partner_edge_weight = weight;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (best_partner !== vertex) {
|
|
150
|
+
partner_of_vertex[vertex] = best_partner;
|
|
151
|
+
partner_of_vertex[best_partner] = vertex;
|
|
152
|
+
}
|
|
153
|
+
// else: leave UNMATCHED; the renumbering pass below will self-match it.
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// --- Pass 2: renumber coarse_vertex_map in vertex-id order -------------
|
|
157
|
+
// `create_coarse_graph` requires that when it processes vertices in order
|
|
158
|
+
// v = 0..vertex_count, coarse_vertex_map[v] equals the running count of
|
|
159
|
+
// coarse vertices produced so far. Also self-match anything still UNMATCHED.
|
|
160
|
+
let coarse_vertex_count = 0;
|
|
161
|
+
for (let vertex = 0; vertex < vertex_count; vertex++) {
|
|
162
|
+
const partner = partner_of_vertex[vertex];
|
|
163
|
+
if (partner === UNMATCHED) {
|
|
164
|
+
partner_of_vertex[vertex] = vertex;
|
|
165
|
+
coarse_vertex_map[vertex] = coarse_vertex_count;
|
|
166
|
+
coarse_vertex_count++;
|
|
167
|
+
} else if (vertex <= partner) {
|
|
168
|
+
coarse_vertex_map[vertex] = coarse_vertex_count;
|
|
169
|
+
coarse_vertex_map[partner] = coarse_vertex_count;
|
|
170
|
+
coarse_vertex_count++;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return coarse_vertex_count;
|
|
175
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initial k-way partition via simultaneous BFS from k random seed vertices.
|
|
3
|
+
*
|
|
4
|
+
* Each seed grows its partition outward by FIFO BFS, claiming any neighbour
|
|
5
|
+
* that hasn't been claimed yet. A partition stops growing once its accumulated
|
|
6
|
+
* vertex weight crosses the per-partition target. Any vertices left unassigned
|
|
7
|
+
* — typically because their component was fully consumed by a partition that
|
|
8
|
+
* then hit its cap, or because the graph has more than k components — get
|
|
9
|
+
* assigned to whichever partition is currently lightest.
|
|
10
|
+
*
|
|
11
|
+
* This is a quality-vs-simplicity trade-off relative to METIS's recursive
|
|
12
|
+
* bisection on the coarsest graph. Bisection produces lower edge cuts but
|
|
13
|
+
* costs roughly 5× the code. FM uncoarsening recovers a large fraction of the
|
|
14
|
+
* quality difference, so we ship BFS-growth first and revisit if needed.
|
|
15
|
+
*
|
|
16
|
+
* Writes to `graph.vertex_partition[]` and `graph.partition_weights[]`. Both
|
|
17
|
+
* must already be allocated (call `graph.allocate_partition_state(partition_count)`).
|
|
18
|
+
*
|
|
19
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph the coarsest graph
|
|
20
|
+
* @param {number} partition_count
|
|
21
|
+
* @param {function():number} random
|
|
22
|
+
*/
|
|
23
|
+
export function initial_kway_bfs(graph: import('../MetisGraph.js').MetisGraph, partition_count: number, random: () => number): void;
|
|
24
|
+
//# sourceMappingURL=initial_kway_bfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initial_kway_bfs.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/graph/metis/native/initial/initial_kway_bfs.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wCAJW,OAAO,kBAAkB,EAAE,UAAU,mBACrC,MAAM,gBACK,MAAM,QAyF3B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { array_shuffle } from "../../../../collection/array/array_shuffle.js";
|
|
2
|
+
|
|
3
|
+
const UNASSIGNED = 0xFFFFFFFF;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Fractional overshoot allowed for a partition's weight during BFS growth.
|
|
7
|
+
* Once a partition crosses `target_weight × this`, it stops claiming new
|
|
8
|
+
* neighbours. A small slack avoids starving a partition that hits the target
|
|
9
|
+
* exactly mid-step.
|
|
10
|
+
*/
|
|
11
|
+
const GROWTH_OVERSHOOT_FRACTION = 1.05;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Initial k-way partition via simultaneous BFS from k random seed vertices.
|
|
15
|
+
*
|
|
16
|
+
* Each seed grows its partition outward by FIFO BFS, claiming any neighbour
|
|
17
|
+
* that hasn't been claimed yet. A partition stops growing once its accumulated
|
|
18
|
+
* vertex weight crosses the per-partition target. Any vertices left unassigned
|
|
19
|
+
* — typically because their component was fully consumed by a partition that
|
|
20
|
+
* then hit its cap, or because the graph has more than k components — get
|
|
21
|
+
* assigned to whichever partition is currently lightest.
|
|
22
|
+
*
|
|
23
|
+
* This is a quality-vs-simplicity trade-off relative to METIS's recursive
|
|
24
|
+
* bisection on the coarsest graph. Bisection produces lower edge cuts but
|
|
25
|
+
* costs roughly 5× the code. FM uncoarsening recovers a large fraction of the
|
|
26
|
+
* quality difference, so we ship BFS-growth first and revisit if needed.
|
|
27
|
+
*
|
|
28
|
+
* Writes to `graph.vertex_partition[]` and `graph.partition_weights[]`. Both
|
|
29
|
+
* must already be allocated (call `graph.allocate_partition_state(partition_count)`).
|
|
30
|
+
*
|
|
31
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph the coarsest graph
|
|
32
|
+
* @param {number} partition_count
|
|
33
|
+
* @param {function():number} random
|
|
34
|
+
*/
|
|
35
|
+
export function initial_kway_bfs(graph, partition_count, random) {
|
|
36
|
+
const vertex_count = graph.vertex_count;
|
|
37
|
+
const edge_addresses = graph.edge_addresses;
|
|
38
|
+
const adjacency = graph.adjacency;
|
|
39
|
+
const vertex_weights = graph.vertex_weights;
|
|
40
|
+
const total_vertex_weight = graph.total_vertex_weight;
|
|
41
|
+
const vertex_partition = graph.vertex_partition;
|
|
42
|
+
const partition_weights = graph.partition_weights;
|
|
43
|
+
|
|
44
|
+
vertex_partition.fill(UNASSIGNED);
|
|
45
|
+
partition_weights.fill(0);
|
|
46
|
+
|
|
47
|
+
if (vertex_count === 0 || partition_count === 0) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const partition_weight_cap = Math.ceil((total_vertex_weight / partition_count) * GROWTH_OVERSHOOT_FRACTION);
|
|
52
|
+
|
|
53
|
+
// Pick k distinct seeds by shuffling all vertex ids and taking the prefix.
|
|
54
|
+
// Cheaper alternatives exist for k << vertex_count but this is simple and
|
|
55
|
+
// unambiguously correct.
|
|
56
|
+
const shuffled_vertex_ids = new Uint32Array(vertex_count);
|
|
57
|
+
for (let v = 0; v < vertex_count; v++) {
|
|
58
|
+
shuffled_vertex_ids[v] = v;
|
|
59
|
+
}
|
|
60
|
+
array_shuffle(random, shuffled_vertex_ids);
|
|
61
|
+
|
|
62
|
+
// Shared (vertex, partition) FIFO queue. We claim a vertex by writing to
|
|
63
|
+
// vertex_partition at push time, so every vertex is pushed at most once
|
|
64
|
+
// and 2*vertex_count bounds the queue size.
|
|
65
|
+
const bfs_queue = new Uint32Array(vertex_count * 2);
|
|
66
|
+
let queue_head = 0;
|
|
67
|
+
let queue_tail = 0;
|
|
68
|
+
|
|
69
|
+
const seed_count = Math.min(partition_count, vertex_count);
|
|
70
|
+
for (let partition = 0; partition < seed_count; partition++) {
|
|
71
|
+
const seed_vertex = shuffled_vertex_ids[partition];
|
|
72
|
+
vertex_partition[seed_vertex] = partition;
|
|
73
|
+
partition_weights[partition] = vertex_weights[seed_vertex];
|
|
74
|
+
bfs_queue[queue_tail++] = seed_vertex;
|
|
75
|
+
bfs_queue[queue_tail++] = partition;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
while (queue_head < queue_tail) {
|
|
79
|
+
const vertex = bfs_queue[queue_head++];
|
|
80
|
+
const partition = bfs_queue[queue_head++];
|
|
81
|
+
|
|
82
|
+
if (partition_weights[partition] >= partition_weight_cap) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const edge_start = edge_addresses[vertex];
|
|
87
|
+
const edge_end = edge_addresses[vertex + 1];
|
|
88
|
+
for (let edge_offset = edge_start; edge_offset < edge_end; edge_offset++) {
|
|
89
|
+
const neighbor = adjacency[edge_offset];
|
|
90
|
+
if (vertex_partition[neighbor] !== UNASSIGNED) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
vertex_partition[neighbor] = partition;
|
|
94
|
+
partition_weights[partition] += vertex_weights[neighbor];
|
|
95
|
+
bfs_queue[queue_tail++] = neighbor;
|
|
96
|
+
bfs_queue[queue_tail++] = partition;
|
|
97
|
+
if (partition_weights[partition] >= partition_weight_cap) {
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Mop up vertices left unassigned (disconnected components, or stranded
|
|
104
|
+
// because every neighbour was claimed before the BFS reached them and the
|
|
105
|
+
// claiming partition then hit its cap). Assign each to the currently
|
|
106
|
+
// lightest partition.
|
|
107
|
+
for (let vertex = 0; vertex < vertex_count; vertex++) {
|
|
108
|
+
if (vertex_partition[vertex] !== UNASSIGNED) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
let lightest_partition = 0;
|
|
112
|
+
let lightest_partition_weight = partition_weights[0];
|
|
113
|
+
for (let partition = 1; partition < partition_count; partition++) {
|
|
114
|
+
if (partition_weights[partition] < lightest_partition_weight) {
|
|
115
|
+
lightest_partition_weight = partition_weights[partition];
|
|
116
|
+
lightest_partition = partition;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
vertex_partition[vertex] = lightest_partition;
|
|
120
|
+
partition_weights[lightest_partition] += vertex_weights[vertex];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initial k-way partitioning via multilevel recursive bisection (MLRB) — the
|
|
3
|
+
* approach described in Karypis & Kumar 1998, §2.2.
|
|
4
|
+
*
|
|
5
|
+
* Quality-wise this is the algorithm the paper actually advocates for the
|
|
6
|
+
* initial-partition phase. We split the graph in two with weights proportional
|
|
7
|
+
* to the k-way target, recurse on each half, then project the resulting
|
|
8
|
+
* sub-partitions back as a 0..k-1 assignment on the parent.
|
|
9
|
+
*
|
|
10
|
+
* Compared to `initial_kway_bfs`, MLRB produces meaningfully better initial
|
|
11
|
+
* cuts at the cost of more work at this phase. Since refinement dominates total
|
|
12
|
+
* runtime, the overall slowdown is small while the cut improvement is large.
|
|
13
|
+
*
|
|
14
|
+
* Mirrors `MlevelRecursiveBisection` from libmetis/pmetis.c, sans the inner
|
|
15
|
+
* coarsening loop — at this point our caller has already coarsened the graph
|
|
16
|
+
* and we operate on the coarsest level only.
|
|
17
|
+
*
|
|
18
|
+
* Writes to `graph.vertex_partition[]` (sized for `partition_count` partitions,
|
|
19
|
+
* values in [0, partition_count)). On entry `graph.vertex_partition` may be
|
|
20
|
+
* unallocated; we install fresh state.
|
|
21
|
+
*
|
|
22
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph the coarsest graph from
|
|
23
|
+
* the outer multilevel pipeline
|
|
24
|
+
* @param {number} partition_count k
|
|
25
|
+
* @param {number} ub_factor load-imbalance factor (typically 1.03)
|
|
26
|
+
* @param {function():number} random
|
|
27
|
+
*/
|
|
28
|
+
export function initial_kway_recursive_bisection(graph: import('../MetisGraph.js').MetisGraph, partition_count: number, ub_factor: number, random: () => number): void;
|
|
29
|
+
//# sourceMappingURL=initial_kway_recursive_bisection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initial_kway_recursive_bisection.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wDANW,OAAO,kBAAkB,EAAE,UAAU,mBAErC,MAAM,aACN,MAAM,gBACK,MAAM,QAgB3B"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { BisectionScratch } from "../bisection/BisectionScratch.js";
|
|
2
|
+
import { bisect_graph } from "../bisection/bisect_graph.js";
|
|
3
|
+
import { split_graph_two_way } from "../bisection/split_graph_two_way.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* How many independent bisection trials to run per recursive level.
|
|
7
|
+
* METIS uses 4-5; we settle on 4 as a reasonable speed/quality tradeoff.
|
|
8
|
+
*/
|
|
9
|
+
const BISECTION_TRIALS_PER_LEVEL = 4;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* FM passes per bisection trial. METIS uses 10.
|
|
13
|
+
*/
|
|
14
|
+
const FM_PASSES_PER_TRIAL = 10;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Initial k-way partitioning via multilevel recursive bisection (MLRB) — the
|
|
18
|
+
* approach described in Karypis & Kumar 1998, §2.2.
|
|
19
|
+
*
|
|
20
|
+
* Quality-wise this is the algorithm the paper actually advocates for the
|
|
21
|
+
* initial-partition phase. We split the graph in two with weights proportional
|
|
22
|
+
* to the k-way target, recurse on each half, then project the resulting
|
|
23
|
+
* sub-partitions back as a 0..k-1 assignment on the parent.
|
|
24
|
+
*
|
|
25
|
+
* Compared to `initial_kway_bfs`, MLRB produces meaningfully better initial
|
|
26
|
+
* cuts at the cost of more work at this phase. Since refinement dominates total
|
|
27
|
+
* runtime, the overall slowdown is small while the cut improvement is large.
|
|
28
|
+
*
|
|
29
|
+
* Mirrors `MlevelRecursiveBisection` from libmetis/pmetis.c, sans the inner
|
|
30
|
+
* coarsening loop — at this point our caller has already coarsened the graph
|
|
31
|
+
* and we operate on the coarsest level only.
|
|
32
|
+
*
|
|
33
|
+
* Writes to `graph.vertex_partition[]` (sized for `partition_count` partitions,
|
|
34
|
+
* values in [0, partition_count)). On entry `graph.vertex_partition` may be
|
|
35
|
+
* unallocated; we install fresh state.
|
|
36
|
+
*
|
|
37
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph the coarsest graph from
|
|
38
|
+
* the outer multilevel pipeline
|
|
39
|
+
* @param {number} partition_count k
|
|
40
|
+
* @param {number} ub_factor load-imbalance factor (typically 1.03)
|
|
41
|
+
* @param {function():number} random
|
|
42
|
+
*/
|
|
43
|
+
export function initial_kway_recursive_bisection(graph, partition_count, ub_factor, random) {
|
|
44
|
+
if (partition_count === 1) {
|
|
45
|
+
if (graph.vertex_partition === null) {
|
|
46
|
+
graph.vertex_partition = new Uint32Array(graph.vertex_count);
|
|
47
|
+
}
|
|
48
|
+
graph.vertex_partition.fill(0);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Single scratch allocation reused by every recursive bisect_graph call.
|
|
53
|
+
// Sized to the coarsest graph; subgraphs only ever touch [0, sub_vertex_count).
|
|
54
|
+
const scratch = new BisectionScratch(graph.vertex_count);
|
|
55
|
+
|
|
56
|
+
recursive_bisect_into_range(graph, 0, partition_count, ub_factor, random, scratch);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Recursively bisect `graph` so that on return `graph.vertex_partition[v]`
|
|
61
|
+
* holds an integer in `[first_partition_id, first_partition_id + partition_count)`.
|
|
62
|
+
*
|
|
63
|
+
* Each call takes one vertex_partition slot from the scratch pool, uses it as
|
|
64
|
+
* the graph's partition assignment, and releases it on return. Pool depth is
|
|
65
|
+
* bounded by recursion depth (= log2(k)), so at most ~log2(k) slots are ever
|
|
66
|
+
* live simultaneously — one per stack frame.
|
|
67
|
+
*
|
|
68
|
+
* @param {import('../MetisGraph.js').MetisGraph} graph
|
|
69
|
+
* @param {number} first_partition_id offset into the parent's partition id space
|
|
70
|
+
* @param {number} partition_count how many partitions to split this graph into
|
|
71
|
+
* @param {number} ub_factor
|
|
72
|
+
* @param {function():number} random
|
|
73
|
+
* @param {import('../bisection/BisectionScratch.js').BisectionScratch} scratch
|
|
74
|
+
*/
|
|
75
|
+
function recursive_bisect_into_range(graph, first_partition_id, partition_count, ub_factor, random, scratch) {
|
|
76
|
+
if (partition_count === 1) {
|
|
77
|
+
// Leaf: assign every vertex of this subgraph to `first_partition_id`.
|
|
78
|
+
// Borrow a slot from the pool — same as non-leaf calls so the projection
|
|
79
|
+
// step in the parent can read it back uniformly.
|
|
80
|
+
const vertex_partition = scratch.take_vertex_partition_slot(graph.vertex_count);
|
|
81
|
+
if (first_partition_id !== 0) {
|
|
82
|
+
vertex_partition.fill(first_partition_id, 0, graph.vertex_count);
|
|
83
|
+
}
|
|
84
|
+
graph.vertex_partition = vertex_partition;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Split k into left_count + right_count such that left_count weights the
|
|
89
|
+
// bisection target proportionally. For an odd k we put the extra partition
|
|
90
|
+
// on the right; this is arbitrary but matches METIS's convention.
|
|
91
|
+
const left_partition_count = Math.floor(partition_count / 2);
|
|
92
|
+
const right_partition_count = partition_count - left_partition_count;
|
|
93
|
+
|
|
94
|
+
// Bisection target: partition 0 gets `left_partition_count / partition_count`
|
|
95
|
+
// of the total vertex weight, so that subsequent recursion produces evenly
|
|
96
|
+
// weighted leaves overall.
|
|
97
|
+
const target_weight_for_partition_0 = Math.round(
|
|
98
|
+
graph.total_vertex_weight * left_partition_count / partition_count
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const vertex_partition = scratch.take_vertex_partition_slot(graph.vertex_count);
|
|
102
|
+
|
|
103
|
+
bisect_graph(
|
|
104
|
+
graph,
|
|
105
|
+
vertex_partition,
|
|
106
|
+
target_weight_for_partition_0,
|
|
107
|
+
BISECTION_TRIALS_PER_LEVEL,
|
|
108
|
+
FM_PASSES_PER_TRIAL,
|
|
109
|
+
ub_factor,
|
|
110
|
+
random,
|
|
111
|
+
scratch
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
if (partition_count === 2) {
|
|
115
|
+
// Base case: the bisection result IS the final k=2 assignment,
|
|
116
|
+
// just shifted into the right id range.
|
|
117
|
+
if (first_partition_id !== 0) {
|
|
118
|
+
const n = graph.vertex_count;
|
|
119
|
+
for (let v = 0; v < n; v++) {
|
|
120
|
+
vertex_partition[v] += first_partition_id;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Don't release the slot here — the caller's projection step needs to
|
|
124
|
+
// read graph.vertex_partition. The parent's recursive_bisect_into_range
|
|
125
|
+
// releases it after projecting.
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// General case: split the graph into two subgraphs, recurse on each, then
|
|
130
|
+
// project the sub-partitions back into `graph.vertex_partition`.
|
|
131
|
+
const {
|
|
132
|
+
side_0_subgraph,
|
|
133
|
+
side_1_subgraph,
|
|
134
|
+
side_0_subgraph_to_parent,
|
|
135
|
+
side_1_subgraph_to_parent
|
|
136
|
+
} = split_graph_two_way(graph);
|
|
137
|
+
|
|
138
|
+
recursive_bisect_into_range(
|
|
139
|
+
side_0_subgraph,
|
|
140
|
+
first_partition_id,
|
|
141
|
+
left_partition_count,
|
|
142
|
+
ub_factor,
|
|
143
|
+
random,
|
|
144
|
+
scratch
|
|
145
|
+
);
|
|
146
|
+
recursive_bisect_into_range(
|
|
147
|
+
side_1_subgraph,
|
|
148
|
+
first_partition_id + left_partition_count,
|
|
149
|
+
right_partition_count,
|
|
150
|
+
ub_factor,
|
|
151
|
+
random,
|
|
152
|
+
scratch
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
// Project assignments back into our own slot.
|
|
156
|
+
const side_0_partition = side_0_subgraph.vertex_partition;
|
|
157
|
+
const side_1_partition = side_1_subgraph.vertex_partition;
|
|
158
|
+
|
|
159
|
+
for (let sub_v = 0; sub_v < side_0_subgraph.vertex_count; sub_v++) {
|
|
160
|
+
vertex_partition[side_0_subgraph_to_parent[sub_v]] = side_0_partition[sub_v];
|
|
161
|
+
}
|
|
162
|
+
for (let sub_v = 0; sub_v < side_1_subgraph.vertex_count; sub_v++) {
|
|
163
|
+
vertex_partition[side_1_subgraph_to_parent[sub_v]] = side_1_partition[sub_v];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Children's vertex_partition slots are now free — release them in LIFO
|
|
167
|
+
// order (side_1 was taken last, so it pops first).
|
|
168
|
+
scratch.release_vertex_partition_slot(); // side_1
|
|
169
|
+
scratch.release_vertex_partition_slot(); // side_0
|
|
170
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure-JS k-way graph partitioning, drop-in compatible with the existing
|
|
3
|
+
* `micron_partition(...)` WASM-backed entry point.
|
|
4
|
+
*
|
|
5
|
+
* Implements the multilevel pipeline: coarsen → initial partition → uncoarsen
|
|
6
|
+
* with refinement at every level. Scope matches the subset that meep's
|
|
7
|
+
* `metis_cluster_bs` actually uses:
|
|
8
|
+
* - cut-objective only
|
|
9
|
+
* - single balance constraint, all vertex weights = 1
|
|
10
|
+
* - uniform target partition weights
|
|
11
|
+
* - no minconn / contig / volume / multi-constraint paths
|
|
12
|
+
*
|
|
13
|
+
* @param {number} vertex_count
|
|
14
|
+
* @param {number} partition_count
|
|
15
|
+
* @param {Uint32Array} edge_addresses CSR row pointers, length vertex_count + 1
|
|
16
|
+
* @param {Uint32Array} adjacency CSR column indices, length edge_addresses[vertex_count]
|
|
17
|
+
* @param {Uint32Array} edge_weights parallel to adjacency
|
|
18
|
+
* @param {{
|
|
19
|
+
* seed?: number,
|
|
20
|
+
* niter?: number,
|
|
21
|
+
* ufactor?: number,
|
|
22
|
+
* initial_partition_strategy?: 'recursive_bisection' | 'bfs',
|
|
23
|
+
* }} [options]
|
|
24
|
+
* Only a small slice of `metis_options` is wired; everything else uses METIS
|
|
25
|
+
* defaults.
|
|
26
|
+
* - `ufactor`: load imbalance factor in METIS units (per-mille over 1.0;
|
|
27
|
+
* ufactor = 30 → ub_factor = 1.03). Default 30.
|
|
28
|
+
* - `niter`: number of FM passes per level. Default 10.
|
|
29
|
+
* - `seed`: RNG seed; same seed + same input ⇒ same partition. Default 0.
|
|
30
|
+
* - `initial_partition_strategy`: 'recursive_bisection' (Karypis-Kumar §2.2,
|
|
31
|
+
* higher quality) or 'bfs' (simpler, faster initial phase, weaker cut).
|
|
32
|
+
* Default 'recursive_bisection'.
|
|
33
|
+
* @returns {Uint32Array} partition assignment per vertex, values in [0, partition_count)
|
|
34
|
+
*/
|
|
35
|
+
export function metis_partition_kway(vertex_count: number, partition_count: number, edge_addresses: Uint32Array, adjacency: Uint32Array, edge_weights: Uint32Array, options?: {
|
|
36
|
+
seed?: number;
|
|
37
|
+
niter?: number;
|
|
38
|
+
ufactor?: number;
|
|
39
|
+
initial_partition_strategy?: 'recursive_bisection' | 'bfs';
|
|
40
|
+
}): Uint32Array;
|
|
41
|
+
//# sourceMappingURL=metis_partition_kway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metis_partition_kway.d.ts","sourceRoot":"","sources":["../../../../../../src/core/graph/metis/native/metis_partition_kway.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,mDAtBW,MAAM,mBACN,MAAM,kBACN,WAAW,aACX,WAAW,gBACX,WAAW;WAEV,MAAM;YACL,MAAM;cACJ,MAAM;iCACa,qBAAqB,GAAG,KAAK;IAWlD,WAAW,CAoFvB"}
|