@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,238 @@
|
|
|
1
|
+
import { combine_hash } from "../../../../core/collection/array/combine_hash.js";
|
|
2
|
+
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
3
|
+
import { FluidField } from "../FluidField.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* ECS component representing a fluid volume — one {@link FluidField} plus its placement
|
|
7
|
+
* in world space.
|
|
8
|
+
*
|
|
9
|
+
* Behaviour (stepping the simulation, dispatching effectors, re-anchoring on Transform
|
|
10
|
+
* motion) lives on {@link FluidSystem}, not here. This component is pure data.
|
|
11
|
+
*
|
|
12
|
+
* World ↔ grid mapping is uniform and axis-aligned: cell `(0,0,0)`'s center sits at
|
|
13
|
+
* {@link origin}, and cells are spaced {@link cell_size} world-units apart along each
|
|
14
|
+
* axis. For non-uniform or oriented volumes, use multiple components.
|
|
15
|
+
*
|
|
16
|
+
* **Static placement**: leave the entity without a `Transform`. Set {@link origin}
|
|
17
|
+
* directly and the system never touches it.
|
|
18
|
+
*
|
|
19
|
+
* **Moving placement**: pair the entity with a `Transform`. The system re-anchors the
|
|
20
|
+
* grid on every fixedUpdate to `quantize(transform.position, cell_size) + offset`, and
|
|
21
|
+
* when the quantization changes shifts the field by the integer cell delta (carrying
|
|
22
|
+
* fluid data along with the grid so the fluid appears to stay put in world space) and
|
|
23
|
+
* patches the newly exposed edges with a Neumann zero-gradient extrapolation. {@link
|
|
24
|
+
* origin} becomes system-managed in this case.
|
|
25
|
+
*
|
|
26
|
+
* NOTE on layout: sibling physics ECS code lives under `engine/ecs/*` (see
|
|
27
|
+
* `engine/ecs/ik/InverseKinematicsSystem.js`). This component is placed inside the
|
|
28
|
+
* fluid package because edits to the ECS folder were out-of-scope when it was first
|
|
29
|
+
* written. Moving it under `engine/ecs/fluid/` later is a pure relocation.
|
|
30
|
+
*/
|
|
31
|
+
export class FluidComponent {
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @type {FluidField}
|
|
35
|
+
*/
|
|
36
|
+
field = new FluidField();
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* World position of grid cell `(0,0,0)`'s center. For static placement (no
|
|
40
|
+
* `Transform` on the entity) the user sets this directly. For moving placement
|
|
41
|
+
* (with `Transform`) {@link FluidSystem} owns it — every fixedUpdate it computes
|
|
42
|
+
* the desired origin from the transform and either snaps on first sync or shifts
|
|
43
|
+
* the field by the integer cell delta.
|
|
44
|
+
* @type {[number, number, number]}
|
|
45
|
+
*/
|
|
46
|
+
origin = [0, 0, 0];
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* World-space offset added to the quantized `Transform.position` when computing
|
|
50
|
+
* the grid centre. Use to place the grid asymmetrically relative to the entity —
|
|
51
|
+
* e.g. `[-2, 0, 0]` puts the centre 2 world units behind the entity.
|
|
52
|
+
*
|
|
53
|
+
* Only consulted when a `Transform` is present (otherwise `origin` is fully
|
|
54
|
+
* user-controlled).
|
|
55
|
+
* @type {[number, number, number]}
|
|
56
|
+
*/
|
|
57
|
+
offset = [0, 0, 0];
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Uniform world-space spacing between adjacent cell centers.
|
|
61
|
+
* @type {number}
|
|
62
|
+
*/
|
|
63
|
+
cell_size = 1;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Half-cell extra margin (in cells) the Transform must cross before the field
|
|
67
|
+
* re-quantizes to the next cell. Without it, a Transform jittering right on the
|
|
68
|
+
* boundary between two cells would re-shift every frame, repeatedly clearing the
|
|
69
|
+
* solid mask and patching velocity edges — visible as flicker in the fluid and
|
|
70
|
+
* thrashing in any solid-voxelizer downstream of the shift.
|
|
71
|
+
*
|
|
72
|
+
* Mechanism: the system keeps the current quantized cell `q` and only re-quantizes
|
|
73
|
+
* when `|transform.position / cell_size - q| > 0.5 + hysteresis`. Crossing the
|
|
74
|
+
* threshold snaps to the new nearest cell — not the threshold position — so motion
|
|
75
|
+
* past the deadband still produces a single discrete shift.
|
|
76
|
+
*
|
|
77
|
+
* Range `[0, 0.5)`. `0` disables (snap on any boundary crossing). Default `0.1`
|
|
78
|
+
* gives a ~10%-of-a-cell deadband on each side, killing jitter while staying
|
|
79
|
+
* imperceptible at typical cell sizes.
|
|
80
|
+
*
|
|
81
|
+
* Only consulted when a `Transform` is present.
|
|
82
|
+
* @type {number}
|
|
83
|
+
*/
|
|
84
|
+
hysteresis = 0.1;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* If false, {@link FluidSystem} skips this volume's step. Use to pause fluid for
|
|
88
|
+
* culled or off-screen volumes.
|
|
89
|
+
* @type {boolean}
|
|
90
|
+
*/
|
|
91
|
+
enabled = true;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Set by {@link FluidSystem} on the first reanchor — distinguishes "snap origin
|
|
95
|
+
* to the desired position without shifting" (first sync) from "shift the field
|
|
96
|
+
* by the integer cell delta" (subsequent syncs). User code should not touch this.
|
|
97
|
+
* @type {boolean}
|
|
98
|
+
*/
|
|
99
|
+
anchored = false;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Convert a world-space point to fractional grid coordinates.
|
|
103
|
+
* @param {Float32Array|number[]} out length-3 destination
|
|
104
|
+
* @param {number} wx
|
|
105
|
+
* @param {number} wy
|
|
106
|
+
* @param {number} wz
|
|
107
|
+
* @return {Float32Array|number[]} `out`, for chaining.
|
|
108
|
+
*/
|
|
109
|
+
worldToGrid(out, wx, wy, wz) {
|
|
110
|
+
const inv = 1 / this.cell_size;
|
|
111
|
+
out[0] = (wx - this.origin[0]) * inv;
|
|
112
|
+
out[1] = (wy - this.origin[1]) * inv;
|
|
113
|
+
out[2] = (wz - this.origin[2]) * inv;
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Convert fractional grid coordinates to a world-space point.
|
|
119
|
+
* @param {Float32Array|number[]} out length-3 destination
|
|
120
|
+
* @param {number} gx
|
|
121
|
+
* @param {number} gy
|
|
122
|
+
* @param {number} gz
|
|
123
|
+
* @return {Float32Array|number[]} `out`, for chaining.
|
|
124
|
+
*/
|
|
125
|
+
gridToWorld(out, gx, gy, gz) {
|
|
126
|
+
out[0] = this.origin[0] + gx * this.cell_size;
|
|
127
|
+
out[1] = this.origin[1] + gy * this.cell_size;
|
|
128
|
+
out[2] = this.origin[2] + gz * this.cell_size;
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Sample velocity at a world-space point. The velocity values stored in the field
|
|
134
|
+
* are in "grid cells per second"; this method does NOT rescale them, on the
|
|
135
|
+
* assumption that callers (vegetation sway, dust drift) interpret the field as a
|
|
136
|
+
* direction × magnitude wind and want consistent strength regardless of the
|
|
137
|
+
* underlying cell size.
|
|
138
|
+
*
|
|
139
|
+
* If you need world-units-per-second velocity, multiply the result by `cell_size`.
|
|
140
|
+
*
|
|
141
|
+
* @param {Float32Array|number[]} out length-3 destination
|
|
142
|
+
* @param {number} wx
|
|
143
|
+
* @param {number} wy
|
|
144
|
+
* @param {number} wz
|
|
145
|
+
* @return {Float32Array|number[]} `out`, for chaining.
|
|
146
|
+
*/
|
|
147
|
+
sampleVelocityAtWorld(out, wx, wy, wz) {
|
|
148
|
+
const inv = 1 / this.cell_size;
|
|
149
|
+
const gx = (wx - this.origin[0]) * inv;
|
|
150
|
+
const gy = (wy - this.origin[1]) * inv;
|
|
151
|
+
const gz = (wz - this.origin[2]) * inv;
|
|
152
|
+
return this.field.sampleVelocity(out, gx, gy, gz);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Sample a passive scalar at a world-space point.
|
|
157
|
+
* @param {string} name
|
|
158
|
+
* @param {number} wx
|
|
159
|
+
* @param {number} wy
|
|
160
|
+
* @param {number} wz
|
|
161
|
+
* @return {number}
|
|
162
|
+
*/
|
|
163
|
+
sampleScalarAtWorld(name, wx, wy, wz) {
|
|
164
|
+
const inv = 1 / this.cell_size;
|
|
165
|
+
const gx = (wx - this.origin[0]) * inv;
|
|
166
|
+
const gy = (wy - this.origin[1]) * inv;
|
|
167
|
+
const gz = (wz - this.origin[2]) * inv;
|
|
168
|
+
return this.field.sampleScalar(name, gx, gy, gz);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* @param {FluidComponent} other
|
|
173
|
+
* @return {boolean}
|
|
174
|
+
*/
|
|
175
|
+
equals(other) {
|
|
176
|
+
if (other === this) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
if (!(other instanceof FluidComponent)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
return this.enabled === other.enabled
|
|
183
|
+
&& this.anchored === other.anchored
|
|
184
|
+
&& this.cell_size === other.cell_size
|
|
185
|
+
&& this.hysteresis === other.hysteresis
|
|
186
|
+
&& this.origin[0] === other.origin[0]
|
|
187
|
+
&& this.origin[1] === other.origin[1]
|
|
188
|
+
&& this.origin[2] === other.origin[2]
|
|
189
|
+
&& this.offset[0] === other.offset[0]
|
|
190
|
+
&& this.offset[1] === other.offset[1]
|
|
191
|
+
&& this.offset[2] === other.offset[2]
|
|
192
|
+
&& this.field.equals(other.field);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @return {number}
|
|
197
|
+
*/
|
|
198
|
+
hash() {
|
|
199
|
+
return combine_hash(
|
|
200
|
+
this.enabled ? 1 : 0,
|
|
201
|
+
this.anchored ? 1 : 0,
|
|
202
|
+
computeHashFloat(this.cell_size),
|
|
203
|
+
computeHashFloat(this.hysteresis),
|
|
204
|
+
computeHashFloat(this.origin[0]),
|
|
205
|
+
computeHashFloat(this.origin[1]),
|
|
206
|
+
computeHashFloat(this.origin[2]),
|
|
207
|
+
computeHashFloat(this.offset[0]),
|
|
208
|
+
computeHashFloat(this.offset[1]),
|
|
209
|
+
computeHashFloat(this.offset[2]),
|
|
210
|
+
this.field.hash()
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Write the field's world-space axis-aligned bounding box into `out`. Used by
|
|
216
|
+
* {@link FluidSystem} as a broad-phase target when filtering effectors. The box
|
|
217
|
+
* spans cell `(0, 0, 0)` (centred at `origin`) to cell `(res_x-1, res_y-1, res_z-1)`
|
|
218
|
+
* plus a `cell_size` margin on the far side, so a point exactly on the field's
|
|
219
|
+
* boundary cells lies inside the AABB.
|
|
220
|
+
*
|
|
221
|
+
* @param {AABB3} out
|
|
222
|
+
*/
|
|
223
|
+
getBoundingBox(out) {
|
|
224
|
+
const res = this.field.getResolution();
|
|
225
|
+
const cs = this.cell_size;
|
|
226
|
+
const ox = this.origin[0];
|
|
227
|
+
const oy = this.origin[1];
|
|
228
|
+
const oz = this.origin[2];
|
|
229
|
+
out.setBounds(
|
|
230
|
+
ox, oy, oz,
|
|
231
|
+
ox + res[0] * cs,
|
|
232
|
+
oy + res[1] * cs,
|
|
233
|
+
oz + res[2] * cs
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
FluidComponent.prototype.isFluidComponent = true;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ECS component holding effectors that contribute to fluid fields each simulation step.
|
|
3
|
+
*
|
|
4
|
+
* Effectors here are decoupled from any specific {@link FluidField} — {@link FluidSystem}
|
|
5
|
+
* gathers all effectors across all entities and applies them to every fluid field each
|
|
6
|
+
* step. Effectors that don't overlap a given field self-cull via their radius / position
|
|
7
|
+
* checks, so attachment is implicit rather than configured.
|
|
8
|
+
*
|
|
9
|
+
* Pair this component with a `Transform` on the same entity to let position-bearing
|
|
10
|
+
* effectors ({@link WakeFluidEffector}, {@link ImpulseFluidEffector}, ...) follow the
|
|
11
|
+
* entity. The system calls each effector's {@link AbstractFluidEffector.syncFromTransform}
|
|
12
|
+
* with the entity's Transform before stepping the simulator.
|
|
13
|
+
*/
|
|
14
|
+
export class FluidEffectorsComponent {
|
|
15
|
+
/**
|
|
16
|
+
* Effectors applied each simulation step.
|
|
17
|
+
* @type {AbstractFluidEffector[]}
|
|
18
|
+
*/
|
|
19
|
+
effectors: AbstractFluidEffector[];
|
|
20
|
+
/**
|
|
21
|
+
* Append an effector. The same instance may only be added once; pushing duplicates
|
|
22
|
+
* causes the effector to fire twice per step.
|
|
23
|
+
* @param {AbstractFluidEffector} effector
|
|
24
|
+
*/
|
|
25
|
+
addEffector(effector: AbstractFluidEffector): void;
|
|
26
|
+
/**
|
|
27
|
+
* Remove an effector by reference. No-op if not present.
|
|
28
|
+
* @param {AbstractFluidEffector} effector
|
|
29
|
+
*/
|
|
30
|
+
removeEffector(effector: AbstractFluidEffector): void;
|
|
31
|
+
/**
|
|
32
|
+
* Position-dependent equality: same number of effectors, each pair at the same
|
|
33
|
+
* index `.equals` each other. Re-ordering counts as a change.
|
|
34
|
+
* @param {FluidEffectorsComponent} other
|
|
35
|
+
* @return {boolean}
|
|
36
|
+
*/
|
|
37
|
+
equals(other: FluidEffectorsComponent): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Order-dependent hash, FNV-like fold over child effector hashes.
|
|
40
|
+
* @return {number}
|
|
41
|
+
*/
|
|
42
|
+
hash(): number;
|
|
43
|
+
isFluidEffectorsComponent: boolean;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=FluidEffectorsComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FluidEffectorsComponent.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidEffectorsComponent.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH;IAEI;;;OAGG;IACH,WAFU,uBAAuB,CAElB;IAEf;;;;OAIG;IACH,mDAIC;IAED;;;OAGG;IACH,sDAKC;IAED;;;;;OAKG;IACH,cAHW,uBAAuB,GACtB,OAAO,CAqBlB;IAED;;;OAGG;IACH,QAFY,MAAM,CAWjB;IAGL,mCAA2D;CAF1D"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ECS component holding effectors that contribute to fluid fields each simulation step.
|
|
5
|
+
*
|
|
6
|
+
* Effectors here are decoupled from any specific {@link FluidField} — {@link FluidSystem}
|
|
7
|
+
* gathers all effectors across all entities and applies them to every fluid field each
|
|
8
|
+
* step. Effectors that don't overlap a given field self-cull via their radius / position
|
|
9
|
+
* checks, so attachment is implicit rather than configured.
|
|
10
|
+
*
|
|
11
|
+
* Pair this component with a `Transform` on the same entity to let position-bearing
|
|
12
|
+
* effectors ({@link WakeFluidEffector}, {@link ImpulseFluidEffector}, ...) follow the
|
|
13
|
+
* entity. The system calls each effector's {@link AbstractFluidEffector.syncFromTransform}
|
|
14
|
+
* with the entity's Transform before stepping the simulator.
|
|
15
|
+
*/
|
|
16
|
+
export class FluidEffectorsComponent {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Effectors applied each simulation step.
|
|
20
|
+
* @type {AbstractFluidEffector[]}
|
|
21
|
+
*/
|
|
22
|
+
effectors = [];
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Append an effector. The same instance may only be added once; pushing duplicates
|
|
26
|
+
* causes the effector to fire twice per step.
|
|
27
|
+
* @param {AbstractFluidEffector} effector
|
|
28
|
+
*/
|
|
29
|
+
addEffector(effector) {
|
|
30
|
+
assert.defined(effector, "effector");
|
|
31
|
+
assert.notNull(effector, "effector");
|
|
32
|
+
this.effectors.push(effector);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Remove an effector by reference. No-op if not present.
|
|
37
|
+
* @param {AbstractFluidEffector} effector
|
|
38
|
+
*/
|
|
39
|
+
removeEffector(effector) {
|
|
40
|
+
const i = this.effectors.indexOf(effector);
|
|
41
|
+
if (i !== -1) {
|
|
42
|
+
this.effectors.splice(i, 1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Position-dependent equality: same number of effectors, each pair at the same
|
|
48
|
+
* index `.equals` each other. Re-ordering counts as a change.
|
|
49
|
+
* @param {FluidEffectorsComponent} other
|
|
50
|
+
* @return {boolean}
|
|
51
|
+
*/
|
|
52
|
+
equals(other) {
|
|
53
|
+
if (other === this) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (!(other instanceof FluidEffectorsComponent)) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const a = this.effectors;
|
|
60
|
+
const b = other.effectors;
|
|
61
|
+
const n = a.length;
|
|
62
|
+
if (n !== b.length) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
for (let i = 0; i < n; i++) {
|
|
66
|
+
if (!a[i].equals(b[i])) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Order-dependent hash, FNV-like fold over child effector hashes.
|
|
75
|
+
* @return {number}
|
|
76
|
+
*/
|
|
77
|
+
hash() {
|
|
78
|
+
const a = this.effectors;
|
|
79
|
+
const n = a.length;
|
|
80
|
+
let h = n;
|
|
81
|
+
for (let i = 0; i < n; i++) {
|
|
82
|
+
h = ((h << 5) - h) + a[i].hash();
|
|
83
|
+
h |= 0;
|
|
84
|
+
}
|
|
85
|
+
return h;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
FluidEffectorsComponent.prototype.isFluidEffectorsComponent = true;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ECS system that steps every {@link FluidComponent} on a fixed timestep.
|
|
3
|
+
*
|
|
4
|
+
* Effectors live on a separate {@link FluidEffectorsComponent}, decoupled from any
|
|
5
|
+
* specific fluid field. Each step the system:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Re-anchor moving fields.** For every (FluidComponent, Transform) tuple,
|
|
8
|
+
* compute the desired grid origin as
|
|
9
|
+
* `quantize(transform.position, cell_size) + offset`
|
|
10
|
+
* where the grid is then centred at that point. On the first sync this is just
|
|
11
|
+
* snapped (no shift), on subsequent syncs the integer cell delta is computed and
|
|
12
|
+
* the field is shifted to follow — fluid data moves with the world so the volume
|
|
13
|
+
* appears stationary while the grid hops between cells.
|
|
14
|
+
* 2. Walks every (FluidEffectorsComponent, Transform) entity and calls
|
|
15
|
+
* {@link AbstractFluidEffector.syncFromTransform} on each effector so position-
|
|
16
|
+
* bearing effectors (wakes, splats) follow their owning entity.
|
|
17
|
+
* 3. For each enabled {@link FluidComponent}:
|
|
18
|
+
* a. Builds the world-to-grid matrix from the component's `origin` + `cell_size`.
|
|
19
|
+
* b. Broad-phase filters effectors via {@link AbstractFluidEffector.getBoundingBox}
|
|
20
|
+
* vs {@link FluidComponent.getBoundingBox} — only effectors whose world-space
|
|
21
|
+
* AABB intersects the field's AABB are passed through.
|
|
22
|
+
* c. Calls the owned simulator's `step(field, dt, visible_effectors, world_to_grid)`.
|
|
23
|
+
*
|
|
24
|
+
* The broad-phase is cheap (AABB-AABB intersect, 6 comparisons) and skips the expensive
|
|
25
|
+
* per-cell splat work for effectors that wouldn't have hit anything anyway. Gather +
|
|
26
|
+
* filter happens per field; effectors that overlap multiple fields are evaluated
|
|
27
|
+
* multiple times — fine for the typical "few fields" case, optimise to a cached
|
|
28
|
+
* per-effector AABB pass if you find yourself with many fields.
|
|
29
|
+
*
|
|
30
|
+
* Uses `fixedUpdate` rather than `update` because fluid stability and the warm-started
|
|
31
|
+
* pressure solve both depend on consistent dt. Variable timesteps cause visible
|
|
32
|
+
* pulsing as projection convergence varies.
|
|
33
|
+
*/
|
|
34
|
+
export class FluidSystem extends System<any, any, any, any, any> {
|
|
35
|
+
/**
|
|
36
|
+
* Visitor for the (effectors, transform) traversal — calls syncFromTransform on
|
|
37
|
+
* every effector in the component.
|
|
38
|
+
* @param {FluidEffectorsComponent} effectors_component
|
|
39
|
+
* @param {Transform} transform
|
|
40
|
+
*/
|
|
41
|
+
static "__#135@#sync_effectors_from_transform"(effectors_component: FluidEffectorsComponent, transform: Transform): void;
|
|
42
|
+
/**
|
|
43
|
+
* Visitor for the (FluidComponent, Transform) traversal — keeps the field's
|
|
44
|
+
* grid origin locked to a cell-aligned position near the transform.
|
|
45
|
+
*
|
|
46
|
+
* Centre formula: `q * cell_size + offset`, where `q` is the cell index along
|
|
47
|
+
* each axis. Origin is then the centre minus half the grid extent so the centre
|
|
48
|
+
* lands at the geometric middle of the grid.
|
|
49
|
+
*
|
|
50
|
+
* Hysteresis: instead of recomputing `q` from the raw position every frame
|
|
51
|
+
* (which would re-shift on every boundary crossing for a Transform jittering on
|
|
52
|
+
* a cell edge), we recover the current `q` from the existing origin and only
|
|
53
|
+
* advance to a new cell when the raw position has drifted more than
|
|
54
|
+
* `0.5 + hysteresis` cells from it. Crossing the threshold snaps to the new
|
|
55
|
+
* nearest cell, so a single large move still produces a single discrete shift.
|
|
56
|
+
*
|
|
57
|
+
* First sync (`anchored = false`): snap origin to the desired value, no shift.
|
|
58
|
+
* Subsequent syncs: per-axis hysteretic quantization, then `field.shift` if the
|
|
59
|
+
* integer delta is non-zero.
|
|
60
|
+
*
|
|
61
|
+
* @param {FluidComponent} component
|
|
62
|
+
* @param {Transform} transform
|
|
63
|
+
*/
|
|
64
|
+
static "__#135@#reanchor_field"(component: FluidComponent, transform: Transform): void;
|
|
65
|
+
/**
|
|
66
|
+
* Write the world-to-grid affine for a FluidComponent into `out`. Axis-aligned,
|
|
67
|
+
* uniform-scale, so the matrix is sparse:
|
|
68
|
+
*
|
|
69
|
+
* [ 1/cs 0 0 -ox/cs ]
|
|
70
|
+
* [ 0 1/cs 0 -oy/cs ]
|
|
71
|
+
* [ 0 0 1/cs -oz/cs ]
|
|
72
|
+
* [ 0 0 0 1 ]
|
|
73
|
+
*
|
|
74
|
+
* Stored column-major (matches the convention of {@link v3_matrix4_multiply}).
|
|
75
|
+
*
|
|
76
|
+
* @param {Float32Array} out length-16
|
|
77
|
+
* @param {FluidComponent} component
|
|
78
|
+
*/
|
|
79
|
+
static "__#135@#build_world_to_grid"(out: Float32Array, component: FluidComponent): void;
|
|
80
|
+
constructor();
|
|
81
|
+
dependencies: (typeof FluidComponent)[];
|
|
82
|
+
/**
|
|
83
|
+
* Components the system traverses each step but does not own as the linking
|
|
84
|
+
* tuple. Lets the engine validate registration order and schedule reads.
|
|
85
|
+
*
|
|
86
|
+
* - `FluidEffectorsComponent` — read every step to gather effectors and to
|
|
87
|
+
* deliver Transform sync hooks.
|
|
88
|
+
* - `Transform` — read every step (paired with FluidEffectorsComponent) so
|
|
89
|
+
* position-bearing effectors can follow their entity.
|
|
90
|
+
*/
|
|
91
|
+
components_used: (ResourceAccessSpecification<typeof Transform> | ResourceAccessSpecification<typeof FluidComponent> | ResourceAccessSpecification<typeof FluidEffectorsComponent>)[];
|
|
92
|
+
/**
|
|
93
|
+
* Single simulator drives every fluid field — it carries only transient scratch,
|
|
94
|
+
* which {@link FluidSimulator.#ensure_scratch} grows to fit the largest field
|
|
95
|
+
* encountered.
|
|
96
|
+
* @type {FluidSimulator}
|
|
97
|
+
*/
|
|
98
|
+
simulator: FluidSimulator;
|
|
99
|
+
#private;
|
|
100
|
+
}
|
|
101
|
+
import { System } from "../../../ecs/System.js";
|
|
102
|
+
import { FluidComponent } from "./FluidComponent.js";
|
|
103
|
+
import { Transform } from "../../../ecs/transform/Transform.js";
|
|
104
|
+
import { ResourceAccessSpecification } from "../../../../core/model/ResourceAccessSpecification.js";
|
|
105
|
+
import { FluidEffectorsComponent } from "./FluidEffectorsComponent.js";
|
|
106
|
+
import { FluidSimulator } from "../FluidSimulator.js";
|
|
107
|
+
//# sourceMappingURL=FluidSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FluidSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidSystem.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;IA+GI;;;;;OAKG;IACH,oEAHW,uBAAuB,aACvB,SAAS,QAOnB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,2CAHW,cAAc,aACd,SAAS,QA4DnB;IAED;;;;;;;;;;;;;OAaG;IACH,0CAHW,YAAY,aACZ,cAAc,QAexB;IAlRe,cAAmB;IA2CnC,wCAAgC;IAEhC;;;;;;;;OAQG;IACH,sLAME;IAEF;;;;;OAKG;IACH,WAFU,cAAc,CAES;;CA+MpC;uBAjRsB,wBAAwB;+BAEhB,qBAAqB;0BAD1B,qCAAqC;4CAFnB,uDAAuD;wCAI3D,8BAA8B;+BACvC,sBAAsB"}
|