@woosh/meep-engine 2.138.19 → 2.139.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 +2 -1
- 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/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/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/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/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 +673 -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 +365 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -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 +112 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -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 +55 -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 +22 -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 +49 -0
- 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/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 +6 -4
- 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 +102 -9
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
- package/src/engine/control/first-person/TODO.md +127 -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 +158 -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 +550 -119
- 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 +28 -0
- package/src/engine/ecs/EntityManager.d.ts +2 -2
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +13 -8
- package/src/engine/ecs/System.d.ts.map +1 -1
- package/src/engine/ecs/System.js +2 -2
- 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/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/PLAN.md +236 -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/aabb_transform_oriented.d.ts +30 -0
- package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
- package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -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 +226 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
- package/src/engine/physics/contact/ManifoldStore.js +499 -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 +520 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/PhysicsSystem.js +1159 -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 +455 -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_solve_pressure_unmasked_legacy.d.ts +20 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -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 +70 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
- package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
- package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
- package/src/engine/physics/integration/integrate_position.d.ts +16 -0
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
- package/src/engine/physics/integration/integrate_position.js +48 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
- package/src/engine/physics/integration/integrate_velocity.js +79 -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 +59 -0
- package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/PosedShape.js +110 -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 +543 -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 +508 -0
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/narrowphase_step.js +382 -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 +130 -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/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/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/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 +36 -0
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
- package/src/engine/physics/solver/solve_contacts.js +598 -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,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the world-space axis-aligned bounding box of a local AABB after a
|
|
3
|
+
* rigid transform (position + orientation).
|
|
4
|
+
*
|
|
5
|
+
* Math: an AABB transformed by a rotation `R` is bounded by another AABB whose
|
|
6
|
+
* centre is `R · c_local + t` and whose half-extent along each world axis `i`
|
|
7
|
+
* is `Σ_j |R_ij| · half_extent_local_j`. The element-wise-abs trick avoids
|
|
8
|
+
* rotating all 8 corners and projecting.
|
|
9
|
+
*
|
|
10
|
+
* Output layout matches existing AABB conventions: `[x0, y0, z0, x1, y1, z1]`
|
|
11
|
+
* with `(x0,y0,z0)` as the min corner.
|
|
12
|
+
*
|
|
13
|
+
* @param {number[]|Float32Array|Float64Array} result
|
|
14
|
+
* @param {number} result_offset
|
|
15
|
+
* @param {number} lx0 local min x
|
|
16
|
+
* @param {number} ly0 local min y
|
|
17
|
+
* @param {number} lz0 local min z
|
|
18
|
+
* @param {number} lx1 local max x
|
|
19
|
+
* @param {number} ly1 local max y
|
|
20
|
+
* @param {number} lz1 local max z
|
|
21
|
+
* @param {number} px translation x
|
|
22
|
+
* @param {number} py translation y
|
|
23
|
+
* @param {number} pz translation z
|
|
24
|
+
* @param {number} qx quaternion x (unit)
|
|
25
|
+
* @param {number} qy quaternion y
|
|
26
|
+
* @param {number} qz quaternion z
|
|
27
|
+
* @param {number} qw quaternion w
|
|
28
|
+
*/
|
|
29
|
+
export function aabb_transform_oriented(
|
|
30
|
+
result, result_offset,
|
|
31
|
+
lx0, ly0, lz0, lx1, ly1, lz1,
|
|
32
|
+
px, py, pz,
|
|
33
|
+
qx, qy, qz, qw
|
|
34
|
+
) {
|
|
35
|
+
// local centre and half-extent
|
|
36
|
+
const cx = (lx0 + lx1) * 0.5;
|
|
37
|
+
const cy = (ly0 + ly1) * 0.5;
|
|
38
|
+
const cz = (lz0 + lz1) * 0.5;
|
|
39
|
+
|
|
40
|
+
const ex = (lx1 - lx0) * 0.5;
|
|
41
|
+
const ey = (ly1 - ly0) * 0.5;
|
|
42
|
+
const ez = (lz1 - lz0) * 0.5;
|
|
43
|
+
|
|
44
|
+
// Rotation matrix from unit quaternion.
|
|
45
|
+
const xx = qx * qx;
|
|
46
|
+
const yy = qy * qy;
|
|
47
|
+
const zz = qz * qz;
|
|
48
|
+
const xy = qx * qy;
|
|
49
|
+
const xz = qx * qz;
|
|
50
|
+
const yz = qy * qz;
|
|
51
|
+
const wx = qw * qx;
|
|
52
|
+
const wy = qw * qy;
|
|
53
|
+
const wz = qw * qz;
|
|
54
|
+
|
|
55
|
+
const r00 = 1 - 2 * (yy + zz);
|
|
56
|
+
const r01 = 2 * (xy - wz);
|
|
57
|
+
const r02 = 2 * (xz + wy);
|
|
58
|
+
|
|
59
|
+
const r10 = 2 * (xy + wz);
|
|
60
|
+
const r11 = 1 - 2 * (xx + zz);
|
|
61
|
+
const r12 = 2 * (yz - wx);
|
|
62
|
+
|
|
63
|
+
const r20 = 2 * (xz - wy);
|
|
64
|
+
const r21 = 2 * (yz + wx);
|
|
65
|
+
const r22 = 1 - 2 * (xx + yy);
|
|
66
|
+
|
|
67
|
+
// World centre = R · c + t
|
|
68
|
+
const wcx = r00 * cx + r01 * cy + r02 * cz + px;
|
|
69
|
+
const wcy = r10 * cx + r11 * cy + r12 * cz + py;
|
|
70
|
+
const wcz = r20 * cx + r21 * cy + r22 * cz + pz;
|
|
71
|
+
|
|
72
|
+
// World half-extent = |R| · e
|
|
73
|
+
const ar00 = r00 < 0 ? -r00 : r00;
|
|
74
|
+
const ar01 = r01 < 0 ? -r01 : r01;
|
|
75
|
+
const ar02 = r02 < 0 ? -r02 : r02;
|
|
76
|
+
const ar10 = r10 < 0 ? -r10 : r10;
|
|
77
|
+
const ar11 = r11 < 0 ? -r11 : r11;
|
|
78
|
+
const ar12 = r12 < 0 ? -r12 : r12;
|
|
79
|
+
const ar20 = r20 < 0 ? -r20 : r20;
|
|
80
|
+
const ar21 = r21 < 0 ? -r21 : r21;
|
|
81
|
+
const ar22 = r22 < 0 ? -r22 : r22;
|
|
82
|
+
|
|
83
|
+
const wex = ar00 * ex + ar01 * ey + ar02 * ez;
|
|
84
|
+
const wey = ar10 * ex + ar11 * ey + ar12 * ez;
|
|
85
|
+
const wez = ar20 * ex + ar21 * ey + ar22 * ez;
|
|
86
|
+
|
|
87
|
+
result[result_offset] = wcx - wex;
|
|
88
|
+
result[result_offset + 1] = wcy - wey;
|
|
89
|
+
result[result_offset + 2] = wcz - wez;
|
|
90
|
+
result[result_offset + 3] = wcx + wex;
|
|
91
|
+
result[result_offset + 4] = wcy + wey;
|
|
92
|
+
result[result_offset + 5] = wcz + wez;
|
|
93
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the inflated world AABB of a shape under a pose, padded by both a
|
|
3
|
+
* constant slack and a velocity-proportional swept extent. The output is the
|
|
4
|
+
* thing to hand to `BVH#node_move_aabb`.
|
|
5
|
+
*
|
|
6
|
+
* @param {number[]|Float32Array|Float64Array} result
|
|
7
|
+
* @param {number} result_offset
|
|
8
|
+
* @param {AbstractShape3D} shape
|
|
9
|
+
* @param {Transform} transform
|
|
10
|
+
* @param {number} vx world linear velocity x
|
|
11
|
+
* @param {number} vy world linear velocity y
|
|
12
|
+
* @param {number} vz world linear velocity z
|
|
13
|
+
* @param {number} dt step size
|
|
14
|
+
*/
|
|
15
|
+
export function compute_fat_world_aabb(result: number[] | Float32Array | Float64Array, result_offset: number, shape: AbstractShape3D, transform: Transform, vx: number, vy: number, vz: number, dt: number): void;
|
|
16
|
+
//# sourceMappingURL=compute_fat_world_aabb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute_fat_world_aabb.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/broadphase/compute_fat_world_aabb.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;GAaG;AACH,+CATW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,oDAGN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QA6BhB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { aabb_transform_oriented } from "./aabb_transform_oriented.js";
|
|
2
|
+
|
|
3
|
+
const scratch_local = new Float64Array(6);
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Constant inflation applied to a world AABB so a small motion doesn't churn
|
|
7
|
+
* the broadphase. Tuned to Box2D / Bullet conventions.
|
|
8
|
+
* @type {number}
|
|
9
|
+
*/
|
|
10
|
+
const FAT_LINEAR = 0.05;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Per-second-of-velocity inflation. Two seconds of motion is a generous look-ahead
|
|
14
|
+
* — `node_move_aabb` only re-inserts when the inflated AABB no longer encloses
|
|
15
|
+
* the actual one, so this is a hint, not an upper bound.
|
|
16
|
+
* @type {number}
|
|
17
|
+
*/
|
|
18
|
+
const FAT_VELOCITY_MULTIPLIER = 2;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Compute the inflated world AABB of a shape under a pose, padded by both a
|
|
22
|
+
* constant slack and a velocity-proportional swept extent. The output is the
|
|
23
|
+
* thing to hand to `BVH#node_move_aabb`.
|
|
24
|
+
*
|
|
25
|
+
* @param {number[]|Float32Array|Float64Array} result
|
|
26
|
+
* @param {number} result_offset
|
|
27
|
+
* @param {AbstractShape3D} shape
|
|
28
|
+
* @param {Transform} transform
|
|
29
|
+
* @param {number} vx world linear velocity x
|
|
30
|
+
* @param {number} vy world linear velocity y
|
|
31
|
+
* @param {number} vz world linear velocity z
|
|
32
|
+
* @param {number} dt step size
|
|
33
|
+
*/
|
|
34
|
+
export function compute_fat_world_aabb(
|
|
35
|
+
result, result_offset,
|
|
36
|
+
shape, transform,
|
|
37
|
+
vx, vy, vz, dt
|
|
38
|
+
) {
|
|
39
|
+
shape.compute_bounding_box(scratch_local);
|
|
40
|
+
|
|
41
|
+
const p = transform.position;
|
|
42
|
+
const q = transform.rotation;
|
|
43
|
+
|
|
44
|
+
aabb_transform_oriented(
|
|
45
|
+
result, result_offset,
|
|
46
|
+
scratch_local[0], scratch_local[1], scratch_local[2],
|
|
47
|
+
scratch_local[3], scratch_local[4], scratch_local[5],
|
|
48
|
+
p.x, p.y, p.z,
|
|
49
|
+
q.x, q.y, q.z, q.w
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const speed = Math.sqrt(vx * vx + vy * vy + vz * vz);
|
|
53
|
+
const pad = FAT_LINEAR + FAT_VELOCITY_MULTIPLIER * speed * dt;
|
|
54
|
+
|
|
55
|
+
result[result_offset] -= pad;
|
|
56
|
+
result[result_offset + 1] -= pad;
|
|
57
|
+
result[result_offset + 2] -= pad;
|
|
58
|
+
result[result_offset + 3] += pad;
|
|
59
|
+
result[result_offset + 4] += pad;
|
|
60
|
+
result[result_offset + 5] += pad;
|
|
61
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iterate every awake body, query both BVHs from each of its attached
|
|
3
|
+
* collider leaves, dedupe via the {@link ManifoldStore}, optionally gate
|
|
4
|
+
* each candidate through a user-supplied filter, and append each surviving
|
|
5
|
+
* body-pair to `pair_list_out`.
|
|
6
|
+
*
|
|
7
|
+
* Compound-body aware: a body with multiple colliders has multiple BVH
|
|
8
|
+
* leaves (one per collider). Each leaf's AABB query may turn up the same
|
|
9
|
+
* other-body multiple times (across the multiple leaves on either side)
|
|
10
|
+
* but the per-slot touched flag collapses those into one entry in the
|
|
11
|
+
* canonical `(min, max)` pair list — narrowphase then resolves the
|
|
12
|
+
* collider-cross-product internally.
|
|
13
|
+
*
|
|
14
|
+
* Determinism: pair encounter order is fully determined by the awake-list
|
|
15
|
+
* order × per-body collider-list order × BVH leaf traversal order. All
|
|
16
|
+
* three are deterministic functions of the link/unlink sequence and the
|
|
17
|
+
* BVH state, so two worlds with the same scene history produce identical
|
|
18
|
+
* pair lists.
|
|
19
|
+
*
|
|
20
|
+
* @param {BodyStorage} storage
|
|
21
|
+
* @param {BVH} dynamic_bvh
|
|
22
|
+
* @param {BVH} static_bvh
|
|
23
|
+
* @param {ManifoldStore} manifolds
|
|
24
|
+
* @param {Array<Array<{collider: Collider, transform: Transform, entity: number, bvhNode: number}>>} body_collider_lists
|
|
25
|
+
* @param {PairList} pair_list_out cleared and filled
|
|
26
|
+
* @param {((idA: number, idB: number) => boolean) | null} pair_filter optional
|
|
27
|
+
* gate. Returning `false` rejects the pair entirely — no manifold
|
|
28
|
+
* slot, no narrowphase, no contact events. Existing cached
|
|
29
|
+
* manifolds for a rejected pair time out naturally via the
|
|
30
|
+
* manifold-store grace counter.
|
|
31
|
+
*/
|
|
32
|
+
export function generate_pairs(storage: BodyStorage, dynamic_bvh: BVH, static_bvh: BVH, manifolds: ManifoldStore, body_collider_lists: Array<Array<{
|
|
33
|
+
collider: Collider;
|
|
34
|
+
transform: Transform;
|
|
35
|
+
entity: number;
|
|
36
|
+
bvhNode: number;
|
|
37
|
+
}>>, pair_list_out: PairList, pair_filter?: (idA: number, idB: number) => boolean): void;
|
|
38
|
+
//# sourceMappingURL=generate_pairs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate_pairs.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/broadphase/generate_pairs.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,uIARW,MAAM,MAAM;IAAC,QAAQ,WAAW;IAAC,SAAS,YAAY;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC,+CAElF,MAAM,OAAO,MAAM,KAAK,OAAO,QAsEhD"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { bvh_query_user_data_overlaps_aabb } from "../../../core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js";
|
|
2
|
+
|
|
3
|
+
const scratch_aabb = new Float64Array(6);
|
|
4
|
+
const candidates = new Uint32Array(1024);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Iterate every awake body, query both BVHs from each of its attached
|
|
8
|
+
* collider leaves, dedupe via the {@link ManifoldStore}, optionally gate
|
|
9
|
+
* each candidate through a user-supplied filter, and append each surviving
|
|
10
|
+
* body-pair to `pair_list_out`.
|
|
11
|
+
*
|
|
12
|
+
* Compound-body aware: a body with multiple colliders has multiple BVH
|
|
13
|
+
* leaves (one per collider). Each leaf's AABB query may turn up the same
|
|
14
|
+
* other-body multiple times (across the multiple leaves on either side)
|
|
15
|
+
* but the per-slot touched flag collapses those into one entry in the
|
|
16
|
+
* canonical `(min, max)` pair list — narrowphase then resolves the
|
|
17
|
+
* collider-cross-product internally.
|
|
18
|
+
*
|
|
19
|
+
* Determinism: pair encounter order is fully determined by the awake-list
|
|
20
|
+
* order × per-body collider-list order × BVH leaf traversal order. All
|
|
21
|
+
* three are deterministic functions of the link/unlink sequence and the
|
|
22
|
+
* BVH state, so two worlds with the same scene history produce identical
|
|
23
|
+
* pair lists.
|
|
24
|
+
*
|
|
25
|
+
* @param {BodyStorage} storage
|
|
26
|
+
* @param {BVH} dynamic_bvh
|
|
27
|
+
* @param {BVH} static_bvh
|
|
28
|
+
* @param {ManifoldStore} manifolds
|
|
29
|
+
* @param {Array<Array<{collider: Collider, transform: Transform, entity: number, bvhNode: number}>>} body_collider_lists
|
|
30
|
+
* @param {PairList} pair_list_out cleared and filled
|
|
31
|
+
* @param {((idA: number, idB: number) => boolean) | null} pair_filter optional
|
|
32
|
+
* gate. Returning `false` rejects the pair entirely — no manifold
|
|
33
|
+
* slot, no narrowphase, no contact events. Existing cached
|
|
34
|
+
* manifolds for a rejected pair time out naturally via the
|
|
35
|
+
* manifold-store grace counter.
|
|
36
|
+
*/
|
|
37
|
+
export function generate_pairs(
|
|
38
|
+
storage,
|
|
39
|
+
dynamic_bvh,
|
|
40
|
+
static_bvh,
|
|
41
|
+
manifolds,
|
|
42
|
+
body_collider_lists,
|
|
43
|
+
pair_list_out,
|
|
44
|
+
pair_filter = null
|
|
45
|
+
) {
|
|
46
|
+
pair_list_out.clear();
|
|
47
|
+
|
|
48
|
+
const awake_count = storage.awake_count;
|
|
49
|
+
|
|
50
|
+
for (let i = 0; i < awake_count; i++) {
|
|
51
|
+
const body_idx = storage.awake_at(i);
|
|
52
|
+
const list = body_collider_lists[body_idx];
|
|
53
|
+
if (list === undefined || list.length === 0) continue;
|
|
54
|
+
|
|
55
|
+
const gen = storage.generation_at(body_idx);
|
|
56
|
+
const my_packed = (body_idx << 8) | gen;
|
|
57
|
+
|
|
58
|
+
for (let k = 0; k < list.length; k++) {
|
|
59
|
+
const node = list[k].bvhNode;
|
|
60
|
+
dynamic_bvh.node_get_aabb(node, scratch_aabb);
|
|
61
|
+
|
|
62
|
+
// Dynamic ↔ Dynamic.
|
|
63
|
+
let n = bvh_query_user_data_overlaps_aabb(
|
|
64
|
+
candidates, 0,
|
|
65
|
+
dynamic_bvh,
|
|
66
|
+
scratch_aabb
|
|
67
|
+
);
|
|
68
|
+
for (let c = 0; c < n; c++) {
|
|
69
|
+
const other = candidates[c];
|
|
70
|
+
if (other === my_packed) continue;
|
|
71
|
+
|
|
72
|
+
const idA = my_packed < other ? my_packed : other;
|
|
73
|
+
const idB = my_packed < other ? other : my_packed;
|
|
74
|
+
|
|
75
|
+
const existing = manifolds.find(idA, idB);
|
|
76
|
+
if (existing !== -1 && manifolds.is_touched(existing)) continue;
|
|
77
|
+
if (pair_filter !== null && !pair_filter(idA, idB)) continue;
|
|
78
|
+
manifolds.acquire(idA, idB);
|
|
79
|
+
pair_list_out.push(idA, idB);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Dynamic ↔ Static.
|
|
83
|
+
n = bvh_query_user_data_overlaps_aabb(
|
|
84
|
+
candidates, 0,
|
|
85
|
+
static_bvh,
|
|
86
|
+
scratch_aabb
|
|
87
|
+
);
|
|
88
|
+
for (let c = 0; c < n; c++) {
|
|
89
|
+
const other = candidates[c];
|
|
90
|
+
const idA = my_packed < other ? my_packed : other;
|
|
91
|
+
const idB = my_packed < other ? other : my_packed;
|
|
92
|
+
|
|
93
|
+
const existing = manifolds.find(idA, idB);
|
|
94
|
+
if (existing !== -1 && manifolds.is_touched(existing)) continue;
|
|
95
|
+
if (pair_filter !== null && !pair_filter(idA, idB)) continue;
|
|
96
|
+
manifolds.acquire(idA, idB);
|
|
97
|
+
pair_list_out.push(idA, idB);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maximum contact points per manifold. Four is the universal industry choice
|
|
3
|
+
* (Bullet's btPersistentManifold, Box2D, Jolt) — enough to express stable
|
|
4
|
+
* face-on-face contact, small enough to fit inertia-driven solver passes.
|
|
5
|
+
* @type {number}
|
|
6
|
+
*/
|
|
7
|
+
export const MAX_CONTACTS_PER_MANIFOLD: number;
|
|
8
|
+
/**
|
|
9
|
+
* Per-contact field stride in the data Float64Array.
|
|
10
|
+
*
|
|
11
|
+
* Layout per contact (all world-space):
|
|
12
|
+
* 0..2 : world_a (contact point on body A's surface)
|
|
13
|
+
* 3..5 : world_b (contact point on body B's surface)
|
|
14
|
+
* 6..8 : normal_w (from B toward A)
|
|
15
|
+
* 9 : depth (positive = penetration, negative = speculative gap)
|
|
16
|
+
* 10 : j_n (accumulated normal impulse, warm-start)
|
|
17
|
+
* 11 : j_t1 (accumulated tangent impulse, axis 1)
|
|
18
|
+
* 12 : j_t2 (accumulated tangent impulse, axis 2)
|
|
19
|
+
*
|
|
20
|
+
* Solver uses `(world_a + world_b) * 0.5` as the application point; storing
|
|
21
|
+
* both surface points keeps the door open for richer warm-start matching
|
|
22
|
+
* across frames in a follow-up slice.
|
|
23
|
+
*
|
|
24
|
+
* @type {number}
|
|
25
|
+
*/
|
|
26
|
+
export const CONTACT_STRIDE: number;
|
|
27
|
+
/**
|
|
28
|
+
* Per-slot Float64 stride: room for {@link MAX_CONTACTS_PER_MANIFOLD} contacts.
|
|
29
|
+
* @type {number}
|
|
30
|
+
*/
|
|
31
|
+
export const SLOT_DATA_STRIDE: number;
|
|
32
|
+
/**
|
|
33
|
+
* Sentinel for "no slot".
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
export const MANIFOLD_SLOT_ABSENT: number;
|
|
37
|
+
/**
|
|
38
|
+
* Persistent contact-manifold cache keyed by canonical body-id pairs.
|
|
39
|
+
*
|
|
40
|
+
* Owns:
|
|
41
|
+
* - the SoA `Float64Array` of contact points (per-slot stride 52),
|
|
42
|
+
* - the small meta `Uint32Array` (bodyA, bodyB, packed flags + count),
|
|
43
|
+
* - a {@link PairUint32Map} from `(idA, idB)` to slot id,
|
|
44
|
+
* - a dense `__live_slots` array of currently-allocated slot ids,
|
|
45
|
+
* - a min-heap-free-stack of released slot ids so reuse is deterministic.
|
|
46
|
+
*
|
|
47
|
+
* Lifecycle per simulation step:
|
|
48
|
+
* 1. Broadphase calls {@link acquire} for every encountered pair, which marks
|
|
49
|
+
* each touched slot as "fresh this frame".
|
|
50
|
+
* 2. Narrowphase fills in contact points via {@link set_contact} /
|
|
51
|
+
* {@link clear_contacts}.
|
|
52
|
+
* 3. End-of-step calls {@link advance_frame} to roll touched → prev_touched
|
|
53
|
+
* and evict slots that have been untouched for {@link DEFAULT_GRACE}
|
|
54
|
+
* consecutive frames.
|
|
55
|
+
*
|
|
56
|
+
* @author Alex Goldring
|
|
57
|
+
* @copyright Company Named Limited (c) 2026
|
|
58
|
+
*/
|
|
59
|
+
export class ManifoldStore {
|
|
60
|
+
/**
|
|
61
|
+
* @param {number} [initial_capacity] slots
|
|
62
|
+
*/
|
|
63
|
+
constructor(initial_capacity?: number);
|
|
64
|
+
__capacity: number;
|
|
65
|
+
__high_water: number;
|
|
66
|
+
__data: Float64Array;
|
|
67
|
+
__meta: Uint32Array;
|
|
68
|
+
__pair_index: PairUint32Map;
|
|
69
|
+
__live_slots: Uint32Array;
|
|
70
|
+
__live_pos: Int32Array;
|
|
71
|
+
__live_count: number;
|
|
72
|
+
__free_heap: Uint32Array;
|
|
73
|
+
__free_count: number;
|
|
74
|
+
/**
|
|
75
|
+
* @returns {number} number of currently-live slots
|
|
76
|
+
*/
|
|
77
|
+
get count(): number;
|
|
78
|
+
/**
|
|
79
|
+
* @returns {number} total allocated slot capacity
|
|
80
|
+
*/
|
|
81
|
+
get capacity(): number;
|
|
82
|
+
/**
|
|
83
|
+
* Look up a slot by canonical pair. Caller is responsible for ordering
|
|
84
|
+
* `(idA, idB)` such that the same pair always hashes the same way.
|
|
85
|
+
*
|
|
86
|
+
* @param {number} idA
|
|
87
|
+
* @param {number} idB
|
|
88
|
+
* @returns {number} slot id or {@link MANIFOLD_SLOT_ABSENT}
|
|
89
|
+
*/
|
|
90
|
+
find(idA: number, idB: number): number;
|
|
91
|
+
/**
|
|
92
|
+
* Acquire a slot for the pair, creating one if absent, and mark it
|
|
93
|
+
* "touched this frame". Returns the slot id. Calling `acquire` twice in
|
|
94
|
+
* the same step on the same pair is a no-op for the second call.
|
|
95
|
+
*
|
|
96
|
+
* @param {number} idA
|
|
97
|
+
* @param {number} idB
|
|
98
|
+
* @returns {number} slot id
|
|
99
|
+
*/
|
|
100
|
+
acquire(idA: number, idB: number): number;
|
|
101
|
+
/**
|
|
102
|
+
* @param {number} slot
|
|
103
|
+
* @returns {number} body A id stored at this slot
|
|
104
|
+
*/
|
|
105
|
+
bodyA(slot: number): number;
|
|
106
|
+
/**
|
|
107
|
+
* @param {number} slot
|
|
108
|
+
* @returns {number}
|
|
109
|
+
*/
|
|
110
|
+
bodyB(slot: number): number;
|
|
111
|
+
/**
|
|
112
|
+
* @param {number} slot
|
|
113
|
+
* @returns {number} 0..MAX_CONTACTS_PER_MANIFOLD
|
|
114
|
+
*/
|
|
115
|
+
contact_count(slot: number): number;
|
|
116
|
+
/**
|
|
117
|
+
* @param {number} slot
|
|
118
|
+
* @returns {boolean}
|
|
119
|
+
*/
|
|
120
|
+
is_touched(slot: number): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* @param {number} slot
|
|
123
|
+
* @returns {boolean}
|
|
124
|
+
*/
|
|
125
|
+
was_touched_prev(slot: number): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Iterate the dense list of currently-live slots without going through
|
|
128
|
+
* the pair map. `i` ranges `[0, count)`.
|
|
129
|
+
* @param {number} i
|
|
130
|
+
* @returns {number}
|
|
131
|
+
*/
|
|
132
|
+
live_at(i: number): number;
|
|
133
|
+
/**
|
|
134
|
+
* Clear the contact list for a slot (counts go to zero, warm-start
|
|
135
|
+
* impulses also reset). Used when narrowphase determines the pair is
|
|
136
|
+
* separated this frame.
|
|
137
|
+
* @param {number} slot
|
|
138
|
+
*/
|
|
139
|
+
clear_contacts(slot: number): void;
|
|
140
|
+
/**
|
|
141
|
+
* Write a contact point into a slot. Increments contact_count if `idx`
|
|
142
|
+
* exceeds the current count.
|
|
143
|
+
*
|
|
144
|
+
* @param {number} slot
|
|
145
|
+
* @param {number} idx contact index in `[0, MAX_CONTACTS_PER_MANIFOLD)`
|
|
146
|
+
* @param {number} lax
|
|
147
|
+
* @param {number} lay
|
|
148
|
+
* @param {number} laz
|
|
149
|
+
* @param {number} lbx
|
|
150
|
+
* @param {number} lby
|
|
151
|
+
* @param {number} lbz
|
|
152
|
+
* @param {number} nx normal world x (B toward A)
|
|
153
|
+
* @param {number} ny
|
|
154
|
+
* @param {number} nz
|
|
155
|
+
* @param {number} depth
|
|
156
|
+
*/
|
|
157
|
+
set_contact(slot: number, idx: number, lax: number, lay: number, laz: number, lbx: number, lby: number, lbz: number, nx: number, ny: number, nz: number, depth: number): void;
|
|
158
|
+
/**
|
|
159
|
+
* Read a contact point. Writes 10 floats: lax, lay, laz, lbx, lby, lbz, nx, ny, nz, depth.
|
|
160
|
+
* @param {number} slot
|
|
161
|
+
* @param {number} idx
|
|
162
|
+
* @param {number[]|Float64Array} out
|
|
163
|
+
* @param {number} out_offset
|
|
164
|
+
*/
|
|
165
|
+
get_contact(slot: number, idx: number, out: number[] | Float64Array, out_offset: number): void;
|
|
166
|
+
/**
|
|
167
|
+
* Get the contact-normal world x component for a given contact.
|
|
168
|
+
* Provided for testability without exposing the raw Float64Array view.
|
|
169
|
+
* @param {number} slot
|
|
170
|
+
* @param {number} idx
|
|
171
|
+
* @returns {number}
|
|
172
|
+
*/
|
|
173
|
+
contact_normal_x(slot: number, idx: number): number;
|
|
174
|
+
/** @param {number} slot @param {number} idx @returns {number} */
|
|
175
|
+
contact_normal_y(slot: number, idx: number): number;
|
|
176
|
+
/** @param {number} slot @param {number} idx @returns {number} */
|
|
177
|
+
contact_normal_z(slot: number, idx: number): number;
|
|
178
|
+
/** @param {number} slot @param {number} idx @returns {number} */
|
|
179
|
+
contact_depth(slot: number, idx: number): number;
|
|
180
|
+
/**
|
|
181
|
+
* Raw contact-point buffer. Hot-path solver code dereferences this
|
|
182
|
+
* directly via {@link slot_data_offset} + {@link CONTACT_STRIDE} to avoid
|
|
183
|
+
* per-field accessor overhead. Buffer identity is stable until grow.
|
|
184
|
+
* @returns {Float64Array}
|
|
185
|
+
*/
|
|
186
|
+
get data_buffer(): Float64Array;
|
|
187
|
+
/**
|
|
188
|
+
* Word offset into {@link data_buffer} where the first contact of `slot`
|
|
189
|
+
* begins. Subsequent contacts within the slot are at
|
|
190
|
+
* `offset + c * CONTACT_STRIDE`.
|
|
191
|
+
* @param {number} slot
|
|
192
|
+
* @returns {number}
|
|
193
|
+
*/
|
|
194
|
+
slot_data_offset(slot: number): number;
|
|
195
|
+
/**
|
|
196
|
+
* Advance touched flags by one frame and evict slots that have been
|
|
197
|
+
* untouched for {@link DEFAULT_GRACE} consecutive frames.
|
|
198
|
+
*/
|
|
199
|
+
advance_frame(): void;
|
|
200
|
+
/**
|
|
201
|
+
* @private
|
|
202
|
+
* @returns {number} newly-allocated slot id
|
|
203
|
+
*/
|
|
204
|
+
private __allocate_slot;
|
|
205
|
+
/**
|
|
206
|
+
* @private
|
|
207
|
+
* @param {number} slot
|
|
208
|
+
*/
|
|
209
|
+
private __release_slot;
|
|
210
|
+
/**
|
|
211
|
+
* @private
|
|
212
|
+
*/
|
|
213
|
+
private __grow;
|
|
214
|
+
/**
|
|
215
|
+
* @private
|
|
216
|
+
* @param {number} v
|
|
217
|
+
*/
|
|
218
|
+
private __heap_push;
|
|
219
|
+
/**
|
|
220
|
+
* @private
|
|
221
|
+
* @returns {number}
|
|
222
|
+
*/
|
|
223
|
+
private __heap_pop;
|
|
224
|
+
}
|
|
225
|
+
import { PairUint32Map } from "../../../core/collection/PairUint32Map.js";
|
|
226
|
+
//# sourceMappingURL=ManifoldStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManifoldStore.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/contact/ManifoldStore.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wCAFU,MAAM,CAE2B;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,6BAFU,MAAM,CAEiB;AAEjC;;;GAGG;AACH,+BAFU,MAAM,CAE2D;AAyB3E;;;GAGG;AACH,mCAFU,MAAM,CAEuB;AAIvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAEI;;OAEG;IACH,+BAFW,MAAM,EAqBhB;IAjBG,mBAA+C;IAC/C,qBAAqB;IAErB,qBAAkE;IAClE,oBAAiE;IAEjE,4BAA0D;IAG1D,0BAAoD;IACpD,uBAAiD;IAEjD,qBAAqB;IAGrB,yBAAmD;IACnD,qBAAqB;IAGzB;;OAEG;IACH,oBAEC;IAED;;OAEG;IACH,uBAEC;IAED;;;;;;;OAOG;IACH,UAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAKlB;IAED;;;;;;;;OAQG;IACH,aAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAwBlB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,oBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,uBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;OAKG;IACH,WAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,qBAFW,MAAM,QAQhB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,kBAbW,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,SACN,MAAM,QAqBhB;IAED;;;;;;OAMG;IACH,kBALW,MAAM,OACN,MAAM,OACN,MAAM,EAAE,GAAC,YAAY,cACrB,MAAM,QAOhB;IAED;;;;;;OAMG;IACH,uBAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAIlB;IAED,iEAAiE;IACjE,uBADY,MAAM,OAAe,MAAM,GAAgB,MAAM,CAG5D;IAED,iEAAiE;IACjE,uBADY,MAAM,OAAe,MAAM,GAAgB,MAAM,CAG5D;IAED,iEAAiE;IACjE,oBADY,MAAM,OAAe,MAAM,GAAgB,MAAM,CAG5D;IAED;;;;;OAKG;IACH,gCAEC;IAED;;;;;;OAMG;IACH,uBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,sBA6BC;IAED;;;OAGG;IACH,wBAcC;IAED;;;OAGG;IACH,uBAkBC;IAED;;OAEG;IACH,eA8BC;IAED;;;OAGG;IACH,oBAaC;IAED;;;OAGG;IACH,mBAqBC;CACJ;8BAjfqD,2CAA2C"}
|