@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,97 @@
|
|
|
1
|
+
import { assert } from "../../../assert.js";
|
|
2
|
+
import { INVALID_NEIGHBOUR } from "./TetrahedralMesh.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Return true if the given vertex lies on the boundary of the
|
|
6
|
+
* tetrahedral mesh — equivalently, if it sits on any face that has no
|
|
7
|
+
* neighbouring tet (INVALID_NEIGHBOUR).
|
|
8
|
+
*
|
|
9
|
+
* Used by quality-improvement passes to skip boundary vertices when
|
|
10
|
+
* smoothing or collapsing, because moving them would change the mesh's
|
|
11
|
+
* external surface (which usually represents some geometric constraint
|
|
12
|
+
* the caller wants preserved).
|
|
13
|
+
*
|
|
14
|
+
* Cost without `vertex_to_tets_map`: O(N) over the live tets, same as
|
|
15
|
+
* {@link tetrahedral_mesh_find_tets_attached_to_vertex} which it shares
|
|
16
|
+
* the same scan structure with.
|
|
17
|
+
*
|
|
18
|
+
* Cost with `vertex_to_tets_map`: O(deg(vertex)) — usually a small
|
|
19
|
+
* constant. For repeated calls over many vertices in a tight loop
|
|
20
|
+
* (e.g. a sliver-removal pass), build the map once via
|
|
21
|
+
* {@link tetrahedral_mesh_build_vertex_to_tets_map} and pass it in.
|
|
22
|
+
*
|
|
23
|
+
* Note: boundary status is invariant under interior 2-3 / 3-2 flips, so
|
|
24
|
+
* a once-per-pass cache stays valid for boundary queries even as the
|
|
25
|
+
* pass commits flips, as long as a freshly-snapshotted cache is built
|
|
26
|
+
* for each NEW pass.
|
|
27
|
+
*
|
|
28
|
+
* @param {TetrahedralMesh} mesh
|
|
29
|
+
* @param {number} vertex_id
|
|
30
|
+
* @param {Map<number, number[]>} [vertex_to_tets_map] optional cache
|
|
31
|
+
* @returns {boolean}
|
|
32
|
+
*/
|
|
33
|
+
export function tetrahedral_mesh_vertex_is_boundary(mesh, vertex_id, vertex_to_tets_map) {
|
|
34
|
+
assert.defined(mesh, 'mesh');
|
|
35
|
+
assert.isNonNegativeInteger(vertex_id, 'vertex_id');
|
|
36
|
+
|
|
37
|
+
if (vertex_to_tets_map !== undefined) {
|
|
38
|
+
const tets = vertex_to_tets_map.get(vertex_id);
|
|
39
|
+
if (tets === undefined) return false;
|
|
40
|
+
|
|
41
|
+
for (let ti = 0; ti < tets.length; ti++) {
|
|
42
|
+
const tet = tets[ti];
|
|
43
|
+
// Tets in the cache may have been deleted since it was built.
|
|
44
|
+
if (!mesh.exists(tet)) continue;
|
|
45
|
+
|
|
46
|
+
// Find the slot of vertex_id in this tet — present by
|
|
47
|
+
// construction unless a flip re-used the tet ID with
|
|
48
|
+
// different vertices, in which case skip.
|
|
49
|
+
let v_slot = -1;
|
|
50
|
+
for (let i = 0; i < 4; i++) {
|
|
51
|
+
if (mesh.getVertexIndex(tet, i) === vertex_id) {
|
|
52
|
+
v_slot = i;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (v_slot < 0) continue;
|
|
57
|
+
|
|
58
|
+
// The 3 faces containing vertex_id are the ones NOT opposite v_slot.
|
|
59
|
+
for (let j = 0; j < 4; j++) {
|
|
60
|
+
if (j === v_slot) continue;
|
|
61
|
+
if (mesh.getNeighbour(tet, j) === INVALID_NEIGHBOUR) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Slow path: scan every live tet.
|
|
70
|
+
let is_boundary = false;
|
|
71
|
+
|
|
72
|
+
mesh.forEach((tet, m) => {
|
|
73
|
+
if (is_boundary) return;
|
|
74
|
+
|
|
75
|
+
// Find the slot of vertex_id in this tet (if any).
|
|
76
|
+
let v_slot = -1;
|
|
77
|
+
for (let i = 0; i < 4; i++) {
|
|
78
|
+
if (m.getVertexIndex(tet, i) === vertex_id) {
|
|
79
|
+
v_slot = i;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (v_slot < 0) return;
|
|
84
|
+
|
|
85
|
+
// The 3 faces containing vertex_id are the ones NOT opposite v_slot.
|
|
86
|
+
// (The face opposite v_slot is the only face that excludes vertex_id.)
|
|
87
|
+
for (let j = 0; j < 4; j++) {
|
|
88
|
+
if (j === v_slot) continue;
|
|
89
|
+
if (m.getNeighbour(tet, j) === INVALID_NEIGHBOUR) {
|
|
90
|
+
is_boundary = true;
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
return is_boundary;
|
|
97
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the radius-ratio shape quality of a tetrahedron given by 4 vertex
|
|
3
|
+
* indices into the points array. Normalised so a regular tet returns 1 and
|
|
4
|
+
* a degenerate (zero-volume) tet returns 0.
|
|
5
|
+
*
|
|
6
|
+
* Formula: 3 · r_in / r_circ where
|
|
7
|
+
* r_in = inscribed-sphere radius = 3·|V| / S_total
|
|
8
|
+
* r_circ = circumscribed-sphere radius
|
|
9
|
+
* S_total = sum of the 4 face areas
|
|
10
|
+
* |V| = absolute signed volume
|
|
11
|
+
*
|
|
12
|
+
* Quality bands (rough rule of thumb for the radius-ratio metric):
|
|
13
|
+
* 1.0 regular tet
|
|
14
|
+
* ≥ 0.5 well-shaped, safe for FEM / fluid
|
|
15
|
+
* 0.1–0.5 acceptable, may slow convergence
|
|
16
|
+
* 0.01–0.1 sliver — usually a target for flipping / smoothing
|
|
17
|
+
* < 0.01 near-degenerate, almost flat
|
|
18
|
+
*
|
|
19
|
+
* Indexed form (not mesh-bound) so callers can score hypothetical tets
|
|
20
|
+
* during a flip-candidate search without committing the flip first. The
|
|
21
|
+
* existing mesh-form wrapper {@link compute_tetrahedron_quality} fetches
|
|
22
|
+
* the four vertex IDs and forwards here.
|
|
23
|
+
*
|
|
24
|
+
* @param {ArrayLike<number>} points flat (x,y,z) positions
|
|
25
|
+
* @param {number} a vertex index
|
|
26
|
+
* @param {number} b vertex index
|
|
27
|
+
* @param {number} c vertex index
|
|
28
|
+
* @param {number} d vertex index
|
|
29
|
+
* @returns {number} quality in [0, 1]
|
|
30
|
+
*/
|
|
31
|
+
export function tetrahedron_compute_quality(points: ArrayLike<number>, a: number, b: number, c: number, d: number): number;
|
|
32
|
+
//# sourceMappingURL=tetrahedron_compute_quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tetrahedron_compute_quality.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,oDAPW,UAAU,MAAM,CAAC,KACjB,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CA+BlB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { compute_triangle_area_3d } from "../triangle/compute_triangle_area_3d.js";
|
|
2
|
+
import { tetrahedron_compute_circumsphere } from "./tetrahedron_compute_circumsphere.js";
|
|
3
|
+
import { tetrahedron_compute_signed_volume } from "./tetrahedron_compute_signed_volume.js";
|
|
4
|
+
|
|
5
|
+
const circ_scratch = new Float64Array(4);
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Compute the radius-ratio shape quality of a tetrahedron given by 4 vertex
|
|
9
|
+
* indices into the points array. Normalised so a regular tet returns 1 and
|
|
10
|
+
* a degenerate (zero-volume) tet returns 0.
|
|
11
|
+
*
|
|
12
|
+
* Formula: 3 · r_in / r_circ where
|
|
13
|
+
* r_in = inscribed-sphere radius = 3·|V| / S_total
|
|
14
|
+
* r_circ = circumscribed-sphere radius
|
|
15
|
+
* S_total = sum of the 4 face areas
|
|
16
|
+
* |V| = absolute signed volume
|
|
17
|
+
*
|
|
18
|
+
* Quality bands (rough rule of thumb for the radius-ratio metric):
|
|
19
|
+
* 1.0 regular tet
|
|
20
|
+
* ≥ 0.5 well-shaped, safe for FEM / fluid
|
|
21
|
+
* 0.1–0.5 acceptable, may slow convergence
|
|
22
|
+
* 0.01–0.1 sliver — usually a target for flipping / smoothing
|
|
23
|
+
* < 0.01 near-degenerate, almost flat
|
|
24
|
+
*
|
|
25
|
+
* Indexed form (not mesh-bound) so callers can score hypothetical tets
|
|
26
|
+
* during a flip-candidate search without committing the flip first. The
|
|
27
|
+
* existing mesh-form wrapper {@link compute_tetrahedron_quality} fetches
|
|
28
|
+
* the four vertex IDs and forwards here.
|
|
29
|
+
*
|
|
30
|
+
* @param {ArrayLike<number>} points flat (x,y,z) positions
|
|
31
|
+
* @param {number} a vertex index
|
|
32
|
+
* @param {number} b vertex index
|
|
33
|
+
* @param {number} c vertex index
|
|
34
|
+
* @param {number} d vertex index
|
|
35
|
+
* @returns {number} quality in [0, 1]
|
|
36
|
+
*/
|
|
37
|
+
export function tetrahedron_compute_quality(points, a, b, c, d) {
|
|
38
|
+
const ax = points[a * 3], ay = points[a * 3 + 1], az = points[a * 3 + 2];
|
|
39
|
+
const bx = points[b * 3], by = points[b * 3 + 1], bz = points[b * 3 + 2];
|
|
40
|
+
const cx = points[c * 3], cy = points[c * 3 + 1], cz = points[c * 3 + 2];
|
|
41
|
+
const dx = points[d * 3], dy = points[d * 3 + 1], dz = points[d * 3 + 2];
|
|
42
|
+
|
|
43
|
+
// Negative signed volume → inverted tet. Treated as 0 quality so any
|
|
44
|
+
// mesh-improvement driver naturally rejects moves that would produce
|
|
45
|
+
// them. (For the radius-ratio shape value of the underlying triangle
|
|
46
|
+
// configuration, the caller would need to take abs(vol) explicitly.)
|
|
47
|
+
const signed_vol = tetrahedron_compute_signed_volume(points, a, b, c, d);
|
|
48
|
+
if (signed_vol <= 0) return 0;
|
|
49
|
+
const vol = signed_vol;
|
|
50
|
+
|
|
51
|
+
const area =
|
|
52
|
+
compute_triangle_area_3d(bx, by, bz, cx, cy, cz, dx, dy, dz) +
|
|
53
|
+
compute_triangle_area_3d(ax, ay, az, cx, cy, cz, dx, dy, dz) +
|
|
54
|
+
compute_triangle_area_3d(ax, ay, az, bx, by, bz, dx, dy, dz) +
|
|
55
|
+
compute_triangle_area_3d(ax, ay, az, bx, by, bz, cx, cy, cz);
|
|
56
|
+
|
|
57
|
+
if (area === 0) return 0;
|
|
58
|
+
|
|
59
|
+
tetrahedron_compute_circumsphere(circ_scratch, points, a, b, c, d);
|
|
60
|
+
const r_circ_sq = circ_scratch[3];
|
|
61
|
+
if (!isFinite(r_circ_sq) || r_circ_sq <= 0) return 0;
|
|
62
|
+
const r_circ = Math.sqrt(r_circ_sq);
|
|
63
|
+
|
|
64
|
+
const r_in = 3 * vol / area;
|
|
65
|
+
return 3 * r_in / r_circ;
|
|
66
|
+
}
|
|
@@ -66,12 +66,27 @@ export class BinaryElementPool implements Iterable<number> {
|
|
|
66
66
|
* @private
|
|
67
67
|
*/
|
|
68
68
|
private __capacity;
|
|
69
|
+
/**
|
|
70
|
+
* Occupancy index: bit `id` is 1 when slot `id` is allocated, 0 when
|
|
71
|
+
* free. Lets {@link is_allocated} answer in O(1) instead of scanning
|
|
72
|
+
* {@link __free}. The {@link __free} stack remains the allocator; this
|
|
73
|
+
* is purely a membership accelerator kept in lockstep with it.
|
|
74
|
+
* `preventShrink` stops the bitset reallocating smaller when top slots
|
|
75
|
+
* are cleared — its capacity tracks the pool, not the live set.
|
|
76
|
+
* @type {BitSet}
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
private __occupancy;
|
|
69
80
|
/**
|
|
70
81
|
*
|
|
71
82
|
* @param {ArrayBuffer} buffer
|
|
72
83
|
* @param {number} allocated_record_count
|
|
73
84
|
*/
|
|
74
85
|
fromArrayBuffer(buffer: ArrayBuffer, allocated_record_count?: number): void;
|
|
86
|
+
/**
|
|
87
|
+
*
|
|
88
|
+
* @returns {ArrayBuffer}
|
|
89
|
+
*/
|
|
75
90
|
get arrayBuffer(): ArrayBuffer;
|
|
76
91
|
/**
|
|
77
92
|
* Size of a single record in bytes
|
|
@@ -155,12 +170,30 @@ export class BinaryElementPool implements Iterable<number> {
|
|
|
155
170
|
* @return {number} offset where the range starts, this is your first ID basically
|
|
156
171
|
*/
|
|
157
172
|
allocate_continuous(count: number): number;
|
|
173
|
+
/**
|
|
174
|
+
* Swap the bytes of two items in-place.
|
|
175
|
+
* No-op when `a === b`.
|
|
176
|
+
* @param {number} a item ID
|
|
177
|
+
* @param {number} b item ID
|
|
178
|
+
*/
|
|
179
|
+
swap(a: number, b: number): void;
|
|
158
180
|
/**
|
|
159
181
|
* Please note that this method does not perform any checks at all.
|
|
160
182
|
* You have to make sure that the item is actually unneeded and no duplicate calls are made
|
|
161
183
|
* @param {number} id
|
|
162
184
|
*/
|
|
163
185
|
release(id: number): void;
|
|
186
|
+
/**
|
|
187
|
+
* Unsafe operation, clears the free set without any checks.
|
|
188
|
+
*/
|
|
189
|
+
clear_free_set(): void;
|
|
190
|
+
/**
|
|
191
|
+
* Reduce the used region down to `new_size` and discard the free set.
|
|
192
|
+
* Underlying memory is not reallocated; use {@link trim} for that.
|
|
193
|
+
* The caller is responsible for ensuring that no live data lives at IDs >= new_size.
|
|
194
|
+
* @param {number} new_size must not exceed the current {@link size}
|
|
195
|
+
*/
|
|
196
|
+
truncate(new_size: number): void;
|
|
164
197
|
/**
|
|
165
198
|
* Removed all data from the pool
|
|
166
199
|
* Note that initial allocation pointer is set to 0
|
|
@@ -171,6 +204,14 @@ export class BinaryElementPool implements Iterable<number> {
|
|
|
171
204
|
* @param {BinaryElementPool} other
|
|
172
205
|
*/
|
|
173
206
|
copy(other: BinaryElementPool): void;
|
|
207
|
+
/**
|
|
208
|
+
* Rebuild the occupancy index from `__size` and the current free set:
|
|
209
|
+
* every id in `[0, size)` is allocated except those held in `__free`.
|
|
210
|
+
* Used after {@link copy}, where the data buffer and free set are adopted
|
|
211
|
+
* wholesale.
|
|
212
|
+
* @private
|
|
213
|
+
*/
|
|
214
|
+
private __rebuild_occupancy_from_free;
|
|
174
215
|
/**
|
|
175
216
|
* Used for type checking
|
|
176
217
|
* @readonly
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryElementPool.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/geom/3d/topology/struct/binary/BinaryElementPool.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BinaryElementPool.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/geom/3d/topology/struct/binary/BinaryElementPool.js"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,mDAFyB,MAAM;IA0B3B;;;;;OAKG;IACH,uBAJW,MAAM,qBACN,MAAM,sBACN,OAAO,EA+DjB;IAzFD;;;;OAIG;IACH,eAAY;IAEZ;;;;;OAKG;IACH,uBAAmB;IAEnB;;;;OAIG;IACH,eAAW;IAeP;;;;OAIG;IACH,oBAA4B;IAG5B;;;;OAIG;IACH,sBAA8F;IAC9F;;;;OAIG;IACH,qBAAsD;IACtD;;;;OAIG;IACH,sBAAwD;IACxD;;;;OAIG;IACH,uBAA0D;IAC1D,oBAAiD;IAEjD;;;;OAIG;IACH,mBAAkC;IAElC;;;;;;;;;OASG;IACH,oBAA8C;IAKlD;;;;OAIG;IACH,wBAHW,WAAW,2BACX,MAAM,QA8BhB;IAED;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,wBAEC;IAED;;;;OAIG;IACH,mBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;OAGG;IACH,uBAEC;IAGD;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,iCAEC;IAED;;OAEG;IACH,aAEC;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACL,MAAM,CAMjB;IAED;;;;;OAKG;IACH,iBAHW,MAAM,GACL,MAAM,CAIjB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACL,OAAO,CAYlB;IAED;;;;OAIG;IACH,uBA2BC;IAED;;;;OAIG;IACH,wBAQC;IAED;;;OAGG;IACH,0BAFW,MAAM,QAMhB;IAGD;;;OAGG;IACH,YAFY,MAAM,CAyBjB;IAED;;;;OAIG;IACH,2BAHW,MAAM,GACL,MAAM,CAmBjB;IAED;;;;;OAKG;IACH,QAHW,MAAM,KACN,MAAM,QAiBhB;IAED;;;;OAIG;IACH,YAFW,MAAM,QAchB;IAED;;OAEG;IACH,uBAOC;IAED;;;;;OAKG;IACH,mBAFW,MAAM,QAchB;IAED;;;OAGG;IACH,cAIC;IAED;;;OAGG;IACH,YAFW,iBAAiB,QA4B3B;IAED;;;;;;OAMG;IACH,sCAaC;IAoBL;;;;OAIG;IACH,8BAFU,OAAO,CAE8B;IAvB3C;;;OAGG;IACH,qBAFY,UAAU,MAAM,CAAC,CAa5B;CACJ"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { assert } from "../../../../../assert.js";
|
|
2
2
|
import { align_4 } from "../../../../../binary/align_4.js";
|
|
3
|
+
import { BitSet } from "../../../../../binary/BitSet.js";
|
|
3
4
|
import { makeArrayBuffer } from "../../../../../binary/makeArrayBuffer.js";
|
|
5
|
+
import { array_swap } from "../../../../../collection/array/array_swap.js";
|
|
4
6
|
import { array_buffer_copy } from "../../../../../collection/array/typed/array_buffer_copy.js";
|
|
5
7
|
import { typed_array_copy } from "../../../../../collection/array/typed/typed_array_copy.js";
|
|
6
8
|
import { max3 } from "../../../../../math/max3.js";
|
|
@@ -106,6 +108,19 @@ export class BinaryElementPool {
|
|
|
106
108
|
*/
|
|
107
109
|
this.__capacity = initial_capacity;
|
|
108
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Occupancy index: bit `id` is 1 when slot `id` is allocated, 0 when
|
|
113
|
+
* free. Lets {@link is_allocated} answer in O(1) instead of scanning
|
|
114
|
+
* {@link __free}. The {@link __free} stack remains the allocator; this
|
|
115
|
+
* is purely a membership accelerator kept in lockstep with it.
|
|
116
|
+
* `preventShrink` stops the bitset reallocating smaller when top slots
|
|
117
|
+
* are cleared — its capacity tracks the pool, not the live set.
|
|
118
|
+
* @type {BitSet}
|
|
119
|
+
* @private
|
|
120
|
+
*/
|
|
121
|
+
this.__occupancy = new BitSet(this.__capacity);
|
|
122
|
+
this.__occupancy.preventShrink();
|
|
123
|
+
|
|
109
124
|
}
|
|
110
125
|
|
|
111
126
|
/**
|
|
@@ -133,8 +148,20 @@ export class BinaryElementPool {
|
|
|
133
148
|
// drop free slots
|
|
134
149
|
this.__free_pointer = 0;
|
|
135
150
|
this.__size = allocated_record_count;
|
|
151
|
+
|
|
152
|
+
// Rebuild occupancy for the adopted buffer: the free set is dropped, so
|
|
153
|
+
// exactly [0, allocated_record_count) is allocated.
|
|
154
|
+
this.__occupancy = new BitSet(capacity);
|
|
155
|
+
this.__occupancy.preventShrink();
|
|
156
|
+
if (allocated_record_count > 0) {
|
|
157
|
+
this.__occupancy.setRange(0, allocated_record_count - 1);
|
|
158
|
+
}
|
|
136
159
|
}
|
|
137
160
|
|
|
161
|
+
/**
|
|
162
|
+
*
|
|
163
|
+
* @returns {ArrayBuffer}
|
|
164
|
+
*/
|
|
138
165
|
get arrayBuffer() {
|
|
139
166
|
return this.__data_buffer;
|
|
140
167
|
}
|
|
@@ -230,18 +257,8 @@ export class BinaryElementPool {
|
|
|
230
257
|
return false;
|
|
231
258
|
}
|
|
232
259
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
for (let i = 0; i < pointer; i++) {
|
|
236
|
-
const _id = this.__free[i];
|
|
237
|
-
|
|
238
|
-
if (id === _id) {
|
|
239
|
-
// found in unallocated set
|
|
240
|
-
return false;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return true;
|
|
260
|
+
// O(1) occupancy bit read.
|
|
261
|
+
return this.__occupancy.get(id);
|
|
245
262
|
}
|
|
246
263
|
|
|
247
264
|
/**
|
|
@@ -273,6 +290,9 @@ export class BinaryElementPool {
|
|
|
273
290
|
typed_array_copy(old_data_uint8, this.__data_uint8);
|
|
274
291
|
|
|
275
292
|
this.__capacity = new_capacity;
|
|
293
|
+
|
|
294
|
+
// The bitset self-manages capacity on set(); preventShrink keeps it from
|
|
295
|
+
// dropping below the used region on clears. Nothing to do here.
|
|
276
296
|
}
|
|
277
297
|
|
|
278
298
|
/**
|
|
@@ -309,7 +329,9 @@ export class BinaryElementPool {
|
|
|
309
329
|
if (this.__free_pointer > 0) {
|
|
310
330
|
// get unused slot
|
|
311
331
|
this.__free_pointer--;
|
|
312
|
-
|
|
332
|
+
const id = this.__free[this.__free_pointer];
|
|
333
|
+
this.__occupancy.set(id, true);
|
|
334
|
+
return id;
|
|
313
335
|
}
|
|
314
336
|
|
|
315
337
|
// allocate new
|
|
@@ -323,6 +345,8 @@ export class BinaryElementPool {
|
|
|
323
345
|
|
|
324
346
|
// assert.greaterThan(this.__data_buffer.byteLength, result * this.__item_size, 'memory underflow');
|
|
325
347
|
|
|
348
|
+
this.__occupancy.set(result, true);
|
|
349
|
+
|
|
326
350
|
return result;
|
|
327
351
|
}
|
|
328
352
|
|
|
@@ -342,9 +366,37 @@ export class BinaryElementPool {
|
|
|
342
366
|
|
|
343
367
|
// assert.greaterThanOrEqual(this.__data_buffer.byteLength, (offset + count) * this.__item_size, 'memory underflow');
|
|
344
368
|
|
|
369
|
+
// Mark the whole range allocated.
|
|
370
|
+
if (count > 0) {
|
|
371
|
+
this.__occupancy.setRange(offset, offset + count - 1);
|
|
372
|
+
}
|
|
373
|
+
|
|
345
374
|
return offset;
|
|
346
375
|
}
|
|
347
376
|
|
|
377
|
+
/**
|
|
378
|
+
* Swap the bytes of two items in-place.
|
|
379
|
+
* No-op when `a === b`.
|
|
380
|
+
* @param {number} a item ID
|
|
381
|
+
* @param {number} b item ID
|
|
382
|
+
*/
|
|
383
|
+
swap(a, b) {
|
|
384
|
+
assert.isNonNegativeInteger(a, 'a');
|
|
385
|
+
assert.isNonNegativeInteger(b, 'b');
|
|
386
|
+
|
|
387
|
+
if (a === b) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
const item_size = this.__item_size;
|
|
392
|
+
|
|
393
|
+
array_swap(
|
|
394
|
+
this.__data_uint8, a * item_size,
|
|
395
|
+
this.__data_uint8, b * item_size,
|
|
396
|
+
item_size
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
|
|
348
400
|
/**
|
|
349
401
|
* Please note that this method does not perform any checks at all.
|
|
350
402
|
* You have to make sure that the item is actually unneeded and no duplicate calls are made
|
|
@@ -354,11 +406,45 @@ export class BinaryElementPool {
|
|
|
354
406
|
if (id === this.__size - 1) {
|
|
355
407
|
// releasing item at the end of the reserved region, don't have to push it into free set
|
|
356
408
|
this.__size--;
|
|
409
|
+
this.__occupancy.set(id, false);
|
|
357
410
|
} else if (id >= this.__size) {
|
|
358
411
|
// do nothing, just throw it away
|
|
359
412
|
// this should never happen
|
|
360
413
|
} else {
|
|
361
414
|
this.__free[this.__free_pointer++] = id;
|
|
415
|
+
this.__occupancy.set(id, false);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Unsafe operation, clears the free set without any checks.
|
|
421
|
+
*/
|
|
422
|
+
clear_free_set() {
|
|
423
|
+
this.__free_pointer = 0;
|
|
424
|
+
|
|
425
|
+
// With the free set empty, every slot in [0, size) is allocated again.
|
|
426
|
+
if (this.__size > 0) {
|
|
427
|
+
this.__occupancy.setRange(0, this.__size - 1);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Reduce the used region down to `new_size` and discard the free set.
|
|
433
|
+
* Underlying memory is not reallocated; use {@link trim} for that.
|
|
434
|
+
* The caller is responsible for ensuring that no live data lives at IDs >= new_size.
|
|
435
|
+
* @param {number} new_size must not exceed the current {@link size}
|
|
436
|
+
*/
|
|
437
|
+
truncate(new_size) {
|
|
438
|
+
assert.isNonNegativeInteger(new_size, 'new_size');
|
|
439
|
+
assert.lessThanOrEqual(new_size, this.__size, 'new_size must not exceed current size');
|
|
440
|
+
|
|
441
|
+
this.__size = new_size;
|
|
442
|
+
this.__free_pointer = 0;
|
|
443
|
+
|
|
444
|
+
// Free set discarded: [0, new_size) is the live region with no holes.
|
|
445
|
+
this.__occupancy.reset();
|
|
446
|
+
if (new_size > 0) {
|
|
447
|
+
this.__occupancy.setRange(0, new_size - 1);
|
|
362
448
|
}
|
|
363
449
|
}
|
|
364
450
|
|
|
@@ -369,6 +455,7 @@ export class BinaryElementPool {
|
|
|
369
455
|
clear() {
|
|
370
456
|
this.__size = 0;
|
|
371
457
|
this.__free_pointer = 0;
|
|
458
|
+
this.__occupancy.reset();
|
|
372
459
|
}
|
|
373
460
|
|
|
374
461
|
/**
|
|
@@ -399,6 +486,30 @@ export class BinaryElementPool {
|
|
|
399
486
|
|
|
400
487
|
this.__free_pointer = other.__free_pointer;
|
|
401
488
|
this.__free = other.__free.slice();
|
|
489
|
+
|
|
490
|
+
this.__rebuild_occupancy_from_free();
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Rebuild the occupancy index from `__size` and the current free set:
|
|
495
|
+
* every id in `[0, size)` is allocated except those held in `__free`.
|
|
496
|
+
* Used after {@link copy}, where the data buffer and free set are adopted
|
|
497
|
+
* wholesale.
|
|
498
|
+
* @private
|
|
499
|
+
*/
|
|
500
|
+
__rebuild_occupancy_from_free() {
|
|
501
|
+
this.__occupancy = new BitSet(Math.max(this.__capacity, this.__size));
|
|
502
|
+
this.__occupancy.preventShrink();
|
|
503
|
+
|
|
504
|
+
if (this.__size > 0) {
|
|
505
|
+
this.__occupancy.setRange(0, this.__size - 1);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const free = this.__free;
|
|
509
|
+
const pointer = this.__free_pointer;
|
|
510
|
+
for (let i = 0; i < pointer; i++) {
|
|
511
|
+
this.__occupancy.set(free[i], false);
|
|
512
|
+
}
|
|
402
513
|
}
|
|
403
514
|
|
|
404
515
|
/**
|
|
@@ -25,6 +25,20 @@ export class BinaryTopology {
|
|
|
25
25
|
* l: uint32 // The list of loops around the edge points at a Loop
|
|
26
26
|
* v1_disk_link: uint32[2] // Disk Cycle Pointers edge around vertex v1 and d2 does the same for v2.
|
|
27
27
|
* v2_disk_link: uint32[2] // see above
|
|
28
|
+
*
|
|
29
|
+
* Disk cycle convention:
|
|
30
|
+
* For every vertex v with at least one incident edge, the edges incident
|
|
31
|
+
* to v form a doubly-linked cycle threaded through their disk_link slots.
|
|
32
|
+
* Each non-self-loop edge e uses exactly ONE slot in v's cycle: the v1
|
|
33
|
+
* slot if `vertex1(e) === v`, otherwise the v2 slot. Callers select the
|
|
34
|
+
* side with `is_v1 = edge_read_vertex1(e) === v`.
|
|
35
|
+
*
|
|
36
|
+
* Self-loops (vertex1(e) === vertex2(e) === v) are represented with ONE
|
|
37
|
+
* slot too, by convention the v1 slot. The v2_disk_link of a self-loop is
|
|
38
|
+
* UNSPECIFIED -- readers must not follow it, writers must not assume any
|
|
39
|
+
* prior value. Insertion/removal helpers must be called exactly once per
|
|
40
|
+
* self-loop (not once per "endpoint"), otherwise the v1 slot is scribbled
|
|
41
|
+
* on a second time and the cycle is corrupted.
|
|
28
42
|
* @type {BinaryElementPool}
|
|
29
43
|
* @private
|
|
30
44
|
*/
|
|
@@ -51,6 +65,31 @@ export class BinaryTopology {
|
|
|
51
65
|
* @private
|
|
52
66
|
*/
|
|
53
67
|
private __face_pool;
|
|
68
|
+
/**
|
|
69
|
+
* Optional opaque per-vertex data pool. Item IDs map 1:1 with vertex IDs.
|
|
70
|
+
* Null until {@link create_vertex_data} is called.
|
|
71
|
+
* @type {BinaryElementPool|null}
|
|
72
|
+
* @private
|
|
73
|
+
*/
|
|
74
|
+
private __vertex_data_pool;
|
|
75
|
+
/**
|
|
76
|
+
* Optional opaque per-edge data pool. Item IDs map 1:1 with edge IDs.
|
|
77
|
+
* @type {BinaryElementPool|null}
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
private __edge_data_pool;
|
|
81
|
+
/**
|
|
82
|
+
* Optional opaque per-loop data pool. Item IDs map 1:1 with loop IDs.
|
|
83
|
+
* @type {BinaryElementPool|null}
|
|
84
|
+
* @private
|
|
85
|
+
*/
|
|
86
|
+
private __loop_data_pool;
|
|
87
|
+
/**
|
|
88
|
+
* Optional opaque per-face data pool. Item IDs map 1:1 with face IDs.
|
|
89
|
+
* @type {BinaryElementPool|null}
|
|
90
|
+
* @private
|
|
91
|
+
*/
|
|
92
|
+
private __face_data_pool;
|
|
54
93
|
/**
|
|
55
94
|
* Total (approximate) size of this structure in memory, in bytes
|
|
56
95
|
* @return {number}
|
|
@@ -81,6 +120,79 @@ export class BinaryTopology {
|
|
|
81
120
|
* @returns {BinaryElementPool}
|
|
82
121
|
*/
|
|
83
122
|
get faces(): BinaryElementPool;
|
|
123
|
+
/**
|
|
124
|
+
* Opaque per-vertex data. The user is responsible for encoding/decoding the bytes,
|
|
125
|
+
* and for keeping the pool's allocation in sync with {@link vertices} — typically
|
|
126
|
+
* by calling `vertex_data.allocate()` whenever a vertex is allocated.
|
|
127
|
+
* Slot at vertex ID X holds that vertex's data.
|
|
128
|
+
* @returns {BinaryElementPool|null} null when no data pool has been created
|
|
129
|
+
*/
|
|
130
|
+
get vertex_data(): BinaryElementPool;
|
|
131
|
+
/**
|
|
132
|
+
* Opaque per-edge data. See {@link vertex_data}.
|
|
133
|
+
* @returns {BinaryElementPool|null} null when no data pool has been created
|
|
134
|
+
*/
|
|
135
|
+
get edge_data(): BinaryElementPool;
|
|
136
|
+
/**
|
|
137
|
+
* Opaque per-loop data. See {@link vertex_data}.
|
|
138
|
+
* @returns {BinaryElementPool|null} null when no data pool has been created
|
|
139
|
+
*/
|
|
140
|
+
get loop_data(): BinaryElementPool;
|
|
141
|
+
/**
|
|
142
|
+
* Opaque per-face data. See {@link vertex_data}.
|
|
143
|
+
* @returns {BinaryElementPool|null} null when no data pool has been created
|
|
144
|
+
*/
|
|
145
|
+
get face_data(): BinaryElementPool;
|
|
146
|
+
/**
|
|
147
|
+
* Create an opaque per-vertex data pool. If vertices already exist, the pool is
|
|
148
|
+
* sized to match (bytes zero-initialized).
|
|
149
|
+
*
|
|
150
|
+
* After this returns, it is the caller's responsibility to keep the data pool's
|
|
151
|
+
* allocation in sync with {@link vertices} (call `vertex_data.allocate()` /
|
|
152
|
+
* `vertex_data.allocate_continuous(n)` / `vertex_data.release(id)` /
|
|
153
|
+
* `vertex_data.clear()` alongside the matching base pool calls).
|
|
154
|
+
*
|
|
155
|
+
* @param {number} item_size_bytes
|
|
156
|
+
*/
|
|
157
|
+
create_vertex_data(item_size_bytes: number): void;
|
|
158
|
+
/**
|
|
159
|
+
* Create an opaque per-edge data pool. See {@link create_vertex_data}.
|
|
160
|
+
* @param {number} item_size_bytes
|
|
161
|
+
*/
|
|
162
|
+
create_edge_data(item_size_bytes: number): void;
|
|
163
|
+
/**
|
|
164
|
+
* Create an opaque per-loop data pool. See {@link create_vertex_data}.
|
|
165
|
+
* @param {number} item_size_bytes
|
|
166
|
+
*/
|
|
167
|
+
create_loop_data(item_size_bytes: number): void;
|
|
168
|
+
/**
|
|
169
|
+
* Create an opaque per-face data pool. See {@link create_vertex_data}.
|
|
170
|
+
* @param {number} item_size_bytes
|
|
171
|
+
*/
|
|
172
|
+
create_face_data(item_size_bytes: number): void;
|
|
173
|
+
/**
|
|
174
|
+
* @returns {boolean} true if a data pool was removed, false if there was none
|
|
175
|
+
*/
|
|
176
|
+
delete_vertex_data(): boolean;
|
|
177
|
+
/**
|
|
178
|
+
* @returns {boolean} true if a data pool was removed, false if there was none
|
|
179
|
+
*/
|
|
180
|
+
delete_edge_data(): boolean;
|
|
181
|
+
/**
|
|
182
|
+
* @returns {boolean} true if a data pool was removed, false if there was none
|
|
183
|
+
*/
|
|
184
|
+
delete_loop_data(): boolean;
|
|
185
|
+
/**
|
|
186
|
+
* @returns {boolean} true if a data pool was removed, false if there was none
|
|
187
|
+
*/
|
|
188
|
+
delete_face_data(): boolean;
|
|
189
|
+
/**
|
|
190
|
+
* @param {BinaryElementPool} base
|
|
191
|
+
* @param {number} item_size_bytes
|
|
192
|
+
* @returns {BinaryElementPool}
|
|
193
|
+
* @private
|
|
194
|
+
*/
|
|
195
|
+
private __create_data_pool;
|
|
84
196
|
/**
|
|
85
197
|
* Clear the topology, removed all data
|
|
86
198
|
*/
|
|
@@ -201,6 +313,28 @@ export class BinaryTopology {
|
|
|
201
313
|
* @param {number} id edge ID
|
|
202
314
|
*/
|
|
203
315
|
edge_write_v2_disk_prev(id: number, value: number): void;
|
|
316
|
+
/**
|
|
317
|
+
* Allocate a new vertex and, if the vertex data pool exists, ensure its
|
|
318
|
+
* underlying buffer has capacity for the new ID. Tracking the data pool's
|
|
319
|
+
* __size remains the caller's responsibility.
|
|
320
|
+
* @returns {number} vertex ID
|
|
321
|
+
*/
|
|
322
|
+
vertex_create(): number;
|
|
323
|
+
/**
|
|
324
|
+
* Allocate a new edge. See {@link vertex_create}.
|
|
325
|
+
* @returns {number} edge ID
|
|
326
|
+
*/
|
|
327
|
+
edge_create(): number;
|
|
328
|
+
/**
|
|
329
|
+
* Allocate a new face. See {@link vertex_create}.
|
|
330
|
+
* @returns {number} face ID
|
|
331
|
+
*/
|
|
332
|
+
face_create(): number;
|
|
333
|
+
/**
|
|
334
|
+
* Allocate a new loop and put it into a valid initial state.
|
|
335
|
+
* See {@link vertex_create} for the data pool sync semantics.
|
|
336
|
+
* @returns {number} loop ID
|
|
337
|
+
*/
|
|
204
338
|
loop_create(): number;
|
|
205
339
|
/**
|
|
206
340
|
* Put loop into valid initial state, set all pointers to NULL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryTopology.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/geom/3d/topology/struct/binary/BinaryTopology.js"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,2BAFU,MAAM,CAEuB;AAQvC;;;GAGG;AACH;IACI;;;;;;;;OAQG;IACH,sBAA4F;IAE5F
|
|
1
|
+
{"version":3,"file":"BinaryTopology.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/geom/3d/topology/struct/binary/BinaryTopology.js"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,2BAFU,MAAM,CAEuB;AAQvC;;;GAGG;AACH;IACI;;;;;;;;OAQG;IACH,sBAA4F;IAE5F;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,oBAAsD;IAEtD;;;;;;;;;;;;OAYG;IACH,oBAAsD;IAEtD;;;;;;OAMG;IACH,oBAAsE;IAEtE;;;;;OAKG;IACH,2BAA0B;IAE1B;;;;OAIG;IACH,yBAAwB;IAExB;;;;OAIG;IACH,yBAAwB;IAExB;;;;OAIG;IACH,yBAAwB;IAGxB;;;OAGG;IACH,uBAYC;IAED;;;OAGG;IACH,aAUC;IAED;;;OAGG;IACH,kCAEC;IAED;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,+BAEC;IAED;;;OAGG;IACH,+BAEC;IAED;;;;;;OAMG;IACH,qCAEC;IAED;;;OAGG;IACH,mCAEC;IAED;;;OAGG;IACH,mCAEC;IAED;;;OAGG;IACH,mCAEC;IAED;;;;;;;;;;OAUG;IACH,oCAFW,MAAM,QAKhB;IAED;;;OAGG;IACH,kCAFW,MAAM,QAKhB;IAED;;;OAGG;IACH,kCAFW,MAAM,QAKhB;IAED;;;OAGG;IACH,kCAFW,MAAM,QAKhB;IAED;;OAEG;IACH,sBAFa,OAAO,CAQnB;IAED;;OAEG;IACH,oBAFa,OAAO,CAQnB;IAED;;OAEG;IACH,oBAFa,OAAO,CAQnB;IAED;;OAEG;IACH,oBAFa,OAAO,CAQnB;IAED;;;;;OAKG;IACH,2BAWC;IAGD;;OAEG;IACH,cAUC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,iBACvC,MAAM,MACN,MAAM,QAQhB;IAED;;;;;OAKG;IACH,4BAJW,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,gBACrB,MAAM,QAQhB;IAED;;;;;OAKG;IACH,2BAJW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,iBACvC,MAAM,MACN,MAAM,QAQhB;IAED;;;;;OAKG;IACH,wBAJW,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,gBACrB,MAAM,QAQhB;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,sBAFW,MAAM,WADN,MAAM,QAQhB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,uBAFW,MAAM,SADN,MAAM,QAQhB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,uBAFW,MAAM,SADN,MAAM,QAQhB;IAGD;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;;OAIG;IACH,oBAFW,MAAM,WADN,MAAM,QAQhB;IAED;;;OAGG;IACH,2BAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;;OAIG;IACH,4BAFW,MAAM,SADN,MAAM,QAUhB;IAED;;;OAGG;IACH,2BAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;;OAIG;IACH,4BAFW,MAAM,SADN,MAAM,QAUhB;IAED;;;OAGG;IACH,2BAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;;OAIG;IACH,4BAFW,MAAM,SADN,MAAM,QAUhB;IAED;;;OAGG;IACH,2BAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;;OAIG;IACH,4BAFW,MAAM,SADN,MAAM,QAUhB;IAED;;;;;OAKG;IACH,iBAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,eAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,eAFa,MAAM,CAQlB;IAED;;;;OAIG;IACH,eAFa,MAAM,CAUlB;IAED;;;OAGG;IACH,oBAFW,MAAM,QAOhB;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,sBAFW,MAAM,SADN,MAAM,QAQhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,MAAM,CAOlB;IAED;;;;OAIG;IACH,oBAFW,MAAM,SADN,MAAM,QAQhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,MAAM,CAOlB;IAED;;;;OAIG;IACH,oBAFW,MAAM,SADN,MAAM,QAUhB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,2BAFW,MAAM,SADN,MAAM,QAShB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;;;OAIG;IACH,2BAFW,MAAM,SADN,MAAM,QAShB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,MAAM,CAOlB;IAED;;;;OAIG;IACH,oBAFW,MAAM,SADN,MAAM,QAQhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,MAAM,CAOlB;IAED;;;;OAIG;IACH,oBAFW,MAAM,SADN,MAAM,QAQhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,MAAM,CAOlB;IAED;;;;OAIG;IACH,oBAFW,MAAM,SADN,MAAM,QAQhB;IAED;;;;OAIG;IACH,yBAJW,MAAM,EAAE,GAAC,UAAU,MAAM,CAAC,GAAC,YAAY,iBACvC,MAAM,MACN,MAAM,QAQhB;IAED;;;;OAIG;IACH,sBAJW,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,gBACrB,MAAM,QAOhB;IAED;;;OAGG;IACH,YAFW,cAAc,QA4CxB;IAED;;;OAGG;IACH,SAFa,cAAc,CAM1B;IAIL;;;;OAIG;IACH,2BAFU,OAAO,CAEwB;CAPxC;kCAp8BiC,wBAAwB"}
|