@woosh/meep-engine 2.156.0 → 2.158.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/README.md +1 -3
- package/editor/view/ecs/components/common/AutoCanvasView.js +100 -53
- package/editor/view/ecs/components/common/TextController.js +59 -0
- package/editor/view/node-graph/NodeGraphCamera.js +90 -0
- package/editor/view/node-graph/NodeGraphEditorView.js +121 -22
- package/editor/view/node-graph/NodeGraphSelection.js +89 -0
- package/editor/view/node-graph/NodeGraphView.js +669 -453
- package/editor/view/node-graph/NodeView.js +211 -135
- package/editor/view/node-graph/actions/ConnectionCreateAction.js +53 -0
- package/editor/view/node-graph/actions/ConnectionDeleteAction.js +36 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.js +88 -0
- package/editor/view/node-graph/actions/NodeParameterSetAction.js +52 -0
- package/editor/view/node-graph/actions/NodesMoveAction.js +41 -0
- package/editor/view/node-graph/actions/SelectionSetAction.js +60 -0
- package/editor/view/node-graph/connection_wire_geometry.js +107 -0
- package/package.json +1 -1
- package/samples/generation/SampleGenerator0.js +8 -1
- package/src/core/binary/reinterpret_float32_as_uint32.d.ts +7 -0
- package/src/core/binary/reinterpret_float32_as_uint32.d.ts.map +1 -0
- package/src/core/binary/reinterpret_float32_as_uint32.js +13 -0
- package/src/core/binary/reinterpret_uint32_as_float32.d.ts +7 -0
- package/src/core/binary/reinterpret_uint32_as_float32.d.ts.map +1 -0
- package/src/core/binary/reinterpret_uint32_as_float32.js +14 -0
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +1 -3
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts +12 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts.map +1 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.js +92 -0
- package/src/core/bvh8/BVH8.d.ts +127 -0
- package/src/core/bvh8/BVH8.d.ts.map +1 -0
- package/src/core/bvh8/BVH8.js +436 -0
- package/src/core/bvh8/NOTES.md +63 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts +59 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -0
- package/src/core/bvh8/build/BVH8Converter.js +588 -0
- package/src/core/bvh8/build/NodeProxy.d.ts +66 -0
- package/src/core/bvh8/build/NodeProxy.d.ts.map +1 -0
- package/src/core/bvh8/build/NodeProxy.js +308 -0
- package/src/core/bvh8/build/TriangleCluster.d.ts +29 -0
- package/src/core/bvh8/build/TriangleCluster.d.ts.map +1 -0
- package/src/core/bvh8/build/TriangleCluster.js +123 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts +8 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts.map +1 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.js +29 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts +10 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts.map +1 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.js +18 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts +10 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.js +303 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts +9 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_from_proxy.js +256 -0
- package/src/core/bvh8/build/byte.d.ts +7 -0
- package/src/core/bvh8/build/byte.d.ts.map +1 -0
- package/src/core/bvh8/build/byte.js +10 -0
- package/src/core/bvh8/build/encode_bounds_e.d.ts +9 -0
- package/src/core/bvh8/build/encode_bounds_e.d.ts.map +1 -0
- package/src/core/bvh8/build/encode_bounds_e.js +12 -0
- package/src/core/bvh8/bvh8_convert_to_dot.d.ts +11 -0
- package/src/core/bvh8/bvh8_convert_to_dot.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_convert_to_dot.js +133 -0
- package/src/core/bvh8/bvh8_count_primitives.d.ts +22 -0
- package/src/core/bvh8/bvh8_count_primitives.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_count_primitives.js +98 -0
- package/src/core/bvh8/bvh8_geometry_validate.d.ts +16 -0
- package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_geometry_validate.js +149 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts +16 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.js +177 -0
- package/src/core/bvh8/bvh8_get_node_bounds.d.ts +9 -0
- package/src/core/bvh8/bvh8_get_node_bounds.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_get_node_bounds.js +35 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts +10 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.js +53 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.d.ts +9 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.js +18 -0
- package/src/core/bvh8/bvh8_node_count_triangles.d.ts +8 -0
- package/src/core/bvh8/bvh8_node_count_triangles.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_node_count_triangles.js +28 -0
- package/src/core/bvh8/bvh8_quality.d.ts +8 -0
- package/src/core/bvh8/bvh8_quality.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_quality.js +73 -0
- package/src/core/bvh8/bvh8_validate_structure.d.ts +15 -0
- package/src/core/bvh8/bvh8_validate_structure.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_validate_structure.js +87 -0
- package/src/core/collection/Uint32MinHeap.d.ts +56 -0
- package/src/core/collection/Uint32MinHeap.d.ts.map +1 -0
- package/src/core/collection/Uint32MinHeap.js +109 -0
- package/src/core/collection/list/FilteredListProjection.js +1 -1
- package/src/{engine/physics/island → core/collection/union-find}/union_find.d.ts +8 -5
- package/src/core/collection/union-find/union_find.d.ts.map +1 -0
- package/src/{engine/physics/island → core/collection/union-find}/union_find.js +8 -5
- package/src/core/dom/isImageBitmap.d.ts +7 -0
- package/src/core/dom/isImageBitmap.d.ts.map +1 -0
- package/src/core/dom/isImageBitmap.js +12 -0
- package/src/core/function/frameThrottle.d.ts +8 -0
- package/src/core/function/frameThrottle.d.ts.map +1 -0
- package/src/core/function/frameThrottle.js +23 -0
- package/src/{engine/physics/narrowphase/clip_against_axis_uv.d.ts → core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts} +3 -3
- package/src/core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/clip_against_axis_uv.js → core/geom/2d/polygon/polygon2_clip_axis_halfplane.js} +51 -51
- package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts → core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts} +9 -7
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.js → core/geom/3d/aabb/aabb3_transform_oriented_inverse.js} +9 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +12 -0
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +46 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.d.ts +28 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.d.ts.map +1 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.js +35 -0
- package/src/core/geom/3d/frustum/read_cluster_frustum_corners.js +1 -1
- package/src/core/geom/3d/frustum/read_frustum_corner.d.ts +9 -0
- package/src/core/geom/3d/frustum/read_frustum_corner.d.ts.map +1 -0
- package/src/core/geom/3d/frustum/read_frustum_corner.js +14 -0
- package/src/core/geom/3d/gjk/gjk.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/gjk.js +430 -372
- package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.d.ts +8 -5
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.js +520 -544
- package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.d.ts +5 -4
- package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.js +71 -70
- package/src/{engine/physics → core/geom/3d}/gjk/mpr.d.ts +3 -3
- package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/mpr.js +368 -362
- package/src/{engine/physics/integration/quat_integrate.d.ts → core/geom/3d/quaternion/quat3_integrate.d.ts} +2 -2
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -0
- package/src/{engine/physics/integration/quat_integrate.js → core/geom/3d/quaternion/quat3_integrate.js} +1 -1
- package/src/{engine/physics/narrowphase/PosedShape.d.ts → core/geom/3d/shape/PosedShape3D.d.ts} +26 -8
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/PosedShape.js → core/geom/3d/shape/PosedShape3D.js} +60 -9
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +15 -11
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +1 -1
- package/src/core/geom/vec3/v3_quat3_apply_inverse.js +1 -1
- package/src/core/math/complex/complex_add.d.ts +1 -1
- package/src/core/math/complex/complex_add.d.ts.map +1 -1
- package/src/core/math/complex/complex_add.js +12 -3
- package/src/core/math/complex/complex_div.d.ts +1 -1
- package/src/core/math/complex/complex_div.d.ts.map +1 -1
- package/src/core/math/complex/complex_div.js +11 -4
- package/src/core/math/complex/complex_mul.d.ts +1 -1
- package/src/core/math/complex/complex_mul.d.ts.map +1 -1
- package/src/core/math/complex/complex_mul.js +10 -3
- package/src/core/math/complex/complex_sub.d.ts +1 -1
- package/src/core/math/complex/complex_sub.d.ts.map +1 -1
- package/src/core/math/complex/complex_sub.js +12 -3
- package/src/{engine/physics/fluid/solver/optimal_sor_omega.d.ts → core/math/linalg/sor_optimal_omega.d.ts} +4 -3
- package/src/core/math/linalg/sor_optimal_omega.d.ts.map +1 -0
- package/src/{engine/physics/fluid/solver/optimal_sor_omega.js → core/math/linalg/sor_optimal_omega.js} +4 -3
- package/src/core/math/lookup/ParameterLookupTable.d.ts +123 -0
- package/src/core/math/lookup/ParameterLookupTable.d.ts.map +1 -0
- package/src/core/math/lookup/ParameterLookupTable.js +495 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.d.ts +5 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.d.ts.map +1 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.js +6 -0
- package/src/core/math/physics/kinematics/computeInterceptPoint.d.ts.map +1 -0
- package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.js +79 -79
- package/src/core/math/physics/mie/ri_air.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_air.js +1 -3
- package/src/core/math/physics/mie/ri_ammonium_sulfate.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_ammonium_sulfate.js +1 -3
- package/src/core/math/physics/mie/ri_brine.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_brine.js +1 -3
- package/src/core/math/physics/mie/ri_dust.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_dust.js +1 -3
- package/src/core/math/physics/mie/ri_pollen.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_pollen.js +1 -3
- package/src/core/math/physics/mie/ri_smoke.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_smoke.js +1 -3
- package/src/core/math/physics/mie/ri_soot.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_soot.js +1 -3
- package/src/core/math/physics/mie/ri_water.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_water.js +1 -3
- package/src/core/math/random/random_pick_weighted_index.d.ts +10 -0
- package/src/core/math/random/random_pick_weighted_index.d.ts.map +1 -0
- package/src/core/math/random/random_pick_weighted_index.js +26 -0
- package/src/core/model/node-graph/NodeGraph.d.ts +9 -0
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +38 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +23 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +54 -0
- package/src/core/path/convertPathToURL.d.ts +9 -0
- package/src/core/path/convertPathToURL.d.ts.map +1 -0
- package/src/core/path/convertPathToURL.js +107 -0
- package/src/core/process/worker/WorkerBuilder.js +1 -1
- package/src/core/process/worker/extractTransferables.js +1 -1
- package/src/engine/animation/curve/draw/build_tangent_editor.d.ts.map +1 -1
- package/src/engine/animation/curve/draw/build_tangent_editor.js +8 -1
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.js +11 -5
- package/src/engine/asset/Asset.d.ts.map +1 -1
- package/src/engine/asset/Asset.js +16 -6
- package/src/engine/asset/AssetManager.d.ts +61 -52
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetManager.js +1411 -1045
- package/src/engine/asset/AssetRequest.d.ts +1 -1
- package/src/engine/asset/AssetRequest.d.ts.map +1 -1
- package/src/engine/asset/AssetRequest.js +1 -1
- package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
- package/src/engine/asset/AssetRequestScope.js +7 -0
- package/src/engine/asset/PendingAsset.d.ts +32 -1
- package/src/engine/asset/PendingAsset.d.ts.map +1 -1
- package/src/engine/asset/PendingAsset.js +108 -61
- package/src/engine/asset/loaders/ArrayBufferLoader.js +2 -2
- package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/AssetLoader.js +19 -2
- package/src/engine/asset/loaders/GLTFAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/GLTFAssetLoader.js +123 -114
- package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts +1 -1
- package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/JavascriptAssetLoader.js +31 -47
- package/src/engine/asset/loaders/JsonAssetLoader.js +1 -1
- package/src/engine/asset/loaders/SVGAssetLoader.js +2 -2
- package/src/engine/asset/loaders/SoundAssetLoader.js +1 -1
- package/src/engine/asset/loaders/TextAssetLoader.js +2 -2
- package/src/{core → engine/asset/loaders}/font/FontAsset.d.ts +1 -1
- package/src/engine/asset/loaders/font/FontAsset.d.ts.map +1 -0
- package/src/{core → engine/asset/loaders}/font/FontAsset.js +21 -21
- package/src/{core → engine/asset/loaders}/font/FontAssetLoader.d.ts +1 -1
- package/src/engine/asset/loaders/font/FontAssetLoader.d.ts.map +1 -0
- package/src/{core → engine/asset/loaders}/font/FontAssetLoader.js +20 -20
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +11 -20
- package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/texture/TextureAssetLoader.js +8 -2
- package/src/engine/asset/preloader/AssetPreloader.js +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts.map +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.js +19 -22
- package/src/engine/graphics/FrameThrottle.d.ts +1 -7
- package/src/engine/graphics/FrameThrottle.d.ts.map +1 -1
- package/src/engine/graphics/FrameThrottle.js +2 -24
- package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.d.ts +1 -1
- package/src/engine/graphics/debug/shape_to_visual_entity.d.ts.map +1 -0
- package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.js +159 -159
- package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.d.ts +1 -1
- package/src/engine/graphics/debug/visualize_tetrahedral_mesh.d.ts.map +1 -0
- package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.js +46 -46
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts.map +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.js +22 -32
- package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2D.js +21 -0
- package/src/engine/graphics/ecs/trail2d/Trail2DFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/trail2d/Trail2DFlags.js +9 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +2 -76
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -427
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +1 -4
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +2 -6
- package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts +1 -8
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts.map +1 -1
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +2 -14
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts +1 -11
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +2 -46
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +27 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +81 -0
- package/src/engine/graphics/texture/isImageBitmap.d.ts +1 -6
- package/src/engine/graphics/texture/isImageBitmap.d.ts.map +1 -1
- package/src/engine/graphics/texture/isImageBitmap.js +2 -12
- package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.d.ts +2 -2
- package/src/engine/intelligence/behavior/util/AsynchronousDelayAction.d.ts.map +1 -0
- package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.js +55 -55
- package/src/engine/network/NetworkSession.d.ts +12 -1
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +52 -1
- package/src/engine/network/README.md +45 -0
- package/src/engine/network/convertPathToURL.d.ts +1 -8
- package/src/engine/network/convertPathToURL.d.ts.map +1 -1
- package/src/engine/network/convertPathToURL.js +2 -107
- package/src/engine/network/core/quantize/quantize_float.d.ts.map +1 -1
- package/src/engine/network/core/quantize/quantize_float.js +7 -0
- package/src/engine/network/core/quantize/quantize_position.d.ts.map +1 -1
- package/src/engine/network/core/quantize/quantize_position.js +12 -1
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.js +15 -1
- package/src/engine/network/replication/Replicator.d.ts +8 -0
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +48 -0
- package/src/engine/network/transport/Channel.d.ts.map +1 -1
- package/src/engine/network/transport/Channel.js +46 -12
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts +16 -0
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
- package/src/engine/network/transport/ReliableCommandPipeline.js +29 -0
- package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/NodeUDPTransport.js +7 -1
- package/src/engine/network/transport/fragments/packet_size.d.ts +5 -5
- package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/packet_size.js +5 -5
- package/src/engine/physics/BULLET_REVIEW.md +1 -1
- package/src/engine/physics/JOLT_REVIEW.md +2 -2
- package/src/engine/physics/PLAN.md +1094 -945
- package/src/engine/physics/RAPIER_REVIEW.md +2 -2
- package/src/engine/physics/body/BodyStorage.d.ts +2 -12
- package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
- package/src/engine/physics/body/BodyStorage.js +406 -452
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +12 -3
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +28 -3
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +60 -24
- package/src/engine/physics/broadphase/generate_pairs.d.ts +9 -5
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
- package/src/engine/physics/broadphase/generate_pairs.js +52 -37
- package/src/engine/physics/ccd/linear_sweep.d.ts +15 -5
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +122 -40
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +830 -805
- package/src/engine/physics/contact/ManifoldStore.d.ts +91 -16
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +204 -60
- package/src/engine/physics/ecs/BodyKind.d.ts +7 -3
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +29 -25
- package/src/engine/physics/ecs/Collider.d.ts +7 -0
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.js +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +110 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +467 -45
- package/src/engine/physics/ecs/RigidBody.d.ts +20 -5
- package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBody.js +307 -286
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts +6 -3
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodyFlags.js +31 -28
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +12 -4
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +19 -5
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts +10 -0
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.js +37 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts +28 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts.map +1 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +76 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts +11 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
- package/src/engine/physics/events/ContactEventBuffer.js +40 -0
- package/src/engine/physics/events/diff_manifolds.d.ts +30 -13
- package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -1
- package/src/engine/physics/events/diff_manifolds.js +87 -50
- package/src/engine/physics/fluid/FluidField.d.ts +98 -26
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +684 -570
- package/src/engine/physics/fluid/FluidSimulator.d.ts +157 -6
- package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidSimulator.js +450 -83
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +243 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +4 -3
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +4 -3
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +72 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +97 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +117 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +348 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +62 -12
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +135 -38
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +85 -38
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +27 -8
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +171 -68
- package/src/engine/physics/fluid/prototype.js +25 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +136 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts +37 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +169 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts +36 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +100 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +6 -0
- 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 +6 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +7 -2
- 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 +17 -12
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +131 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +32 -22
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +43 -26
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts +31 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.js +77 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +30 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +92 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +26 -19
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +46 -42
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +38 -10
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +158 -75
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +22 -17
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +108 -96
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +319 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts +53 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +236 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts +46 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +217 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts +40 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.js +165 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts +44 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.js +95 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts +38 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.js +77 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts +52 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.js +131 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts +38 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.js +104 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +30 -1
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +160 -116
- package/src/engine/physics/integration/integrate_position.js +97 -97
- package/src/engine/physics/island/IslandBuilder.d.ts +49 -8
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +93 -14
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +683 -673
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +899 -749
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +27 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +624 -459
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +58 -38
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +369 -325
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +3 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +568 -422
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +6 -3
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +66 -10
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +4 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +97 -94
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -117
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +1738 -1739
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +14 -7
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +74 -69
- package/src/engine/physics/persistence/solver_caches.d.ts +20 -0
- package/src/engine/physics/persistence/solver_caches.d.ts.map +1 -0
- package/src/engine/physics/persistence/solver_caches.js +309 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +187 -184
- package/src/engine/physics/queries/raycast.d.ts +3 -2
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +37 -11
- package/src/engine/physics/queries/shape_cast.d.ts +18 -5
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +417 -393
- package/src/engine/physics/solver/solve_contacts.d.ts +22 -6
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +1482 -1338
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +344 -339
- package/src/engine/ui/DraggableAspect.d.ts +12 -3
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +115 -83
- package/src/generation/COORDINATES.md +54 -0
- package/src/generation/GridTaskGroup.js +2 -2
- package/src/generation/REVIEW_01_ACTION_PLAN.md +628 -0
- package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts +9 -1
- package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts.map +1 -1
- package/src/generation/automata/CaveGeneratorCellularAutomata.js +79 -59
- package/src/generation/automata/CellularAutomata.d.ts +6 -3
- package/src/generation/automata/CellularAutomata.d.ts.map +1 -1
- package/src/generation/automata/CellularAutomata.js +22 -19
- package/src/generation/filtering/CellFilter.d.ts +17 -0
- package/src/generation/filtering/CellFilter.d.ts.map +1 -1
- package/src/generation/filtering/CellFilter.js +117 -77
- package/src/generation/filtering/CellFilterCellMatcher.d.ts.map +1 -1
- package/src/generation/filtering/CellFilterCellMatcher.js +2 -0
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts +5 -0
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts.map +1 -1
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.js +15 -0
- package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterBinaryOperation.js +37 -50
- package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterOperationTertiary.js +43 -59
- package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterUnaryOperation.js +29 -33
- package/src/generation/filtering/numeric/CellFilterCache.d.ts +1 -0
- package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts +3 -2
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +9 -35
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.js +19 -43
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +2 -6
- package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +9 -12
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +2 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.js +2 -6
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts +5 -4
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts.map +1 -1
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.js +5 -4
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts +17 -0
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts.map +1 -0
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.js +42 -0
- package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.d.ts.map +1 -1
- package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +7 -1
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts.map +1 -1
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +7 -10
- package/src/generation/filtering/numeric/util/sampler_from_filter.d.ts.map +1 -1
- package/src/generation/filtering/numeric/util/sampler_from_filter.js +2 -1
- package/src/generation/grid/GridData.d.ts.map +1 -1
- package/src/generation/grid/GridData.js +14 -1
- package/src/generation/grid/actions/ContinuousGridCellAction.d.ts +10 -3
- package/src/generation/grid/actions/ContinuousGridCellAction.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellAction.js +18 -3
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts +11 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +13 -3
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +2 -2
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +4 -6
- package/src/generation/grid/coords/grid_to_texel.d.ts +9 -0
- package/src/generation/grid/coords/grid_to_texel.d.ts.map +1 -0
- package/src/generation/grid/coords/grid_to_texel.js +10 -0
- package/src/generation/grid/coords/texel_to_grid.d.ts +9 -0
- package/src/generation/grid/coords/texel_to_grid.d.ts.map +1 -0
- package/src/generation/grid/coords/texel_to_grid.js +10 -0
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts +2 -2
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskApplyActionToCells.js +10 -6
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +20 -21
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts +7 -0
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.js +18 -10
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.js +16 -7
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts +5 -3
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +26 -23
- package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +10 -1
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.d.ts.map +1 -1
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.js +4 -0
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts +15 -8
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +89 -92
- package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
- package/src/generation/markers/GridActionRuleSet.js +10 -2
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts +11 -0
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarker.js +20 -3
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +3 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +9 -2
- package/src/generation/markers/MarkerNode.d.ts +8 -3
- package/src/generation/markers/MarkerNode.d.ts.map +1 -1
- package/src/generation/markers/MarkerNode.js +12 -5
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +2 -2
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.js +2 -2
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +6 -4
- package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.d.ts.map +1 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.js +1 -3
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.js +12 -11
- package/src/generation/markers/matcher/MarkerNodeMatcherAnd.js +2 -2
- package/src/generation/markers/transform/MarkerNodeTransformer.d.ts +4 -1
- package/src/generation/markers/transform/MarkerNodeTransformer.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformer.js +4 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +1 -3
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts +5 -0
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +15 -0
- package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.js +1 -3
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +2 -4
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +1 -3
- package/src/generation/placement/GridCellPlacementRule.d.ts.map +1 -1
- package/src/generation/placement/GridCellPlacementRule.js +1 -3
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.d.ts.map +1 -1
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +8 -10
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.d.ts.map +1 -1
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +6 -4
- package/src/generation/placement/action/random/weighted/WeightedGridCellAction.d.ts.map +1 -1
- package/src/generation/placement/action/random/weighted/WeightedGridCellAction.js +1 -3
- package/src/generation/rules/CellMatcher.d.ts +3 -1
- package/src/generation/rules/CellMatcher.d.ts.map +1 -1
- package/src/generation/rules/CellMatcher.js +3 -1
- package/src/generation/rules/CellMatcherFromFilter.d.ts.map +1 -1
- package/src/generation/rules/CellMatcherFromFilter.js +1 -3
- package/src/generation/rules/CellMatcherLayerBitMaskTest.d.ts.map +1 -1
- package/src/generation/rules/CellMatcherLayerBitMaskTest.js +6 -20
- package/src/generation/test_support/executeTaskTreeSync.d.ts +9 -0
- package/src/generation/test_support/executeTaskTreeSync.d.ts.map +1 -0
- package/src/generation/test_support/executeTaskTreeSync.js +78 -0
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts +2 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts.map +1 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.js +9 -6
- package/src/generation/theme/Theme.d.ts +1 -1
- package/src/generation/theme/Theme.d.ts.map +1 -1
- package/src/generation/theme/Theme.js +2 -2
- package/src/generation/theme/ThemeEngine.d.ts +3 -3
- package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
- package/src/generation/theme/ThemeEngine.js +26 -16
- package/src/generation/theme/cell/CellProcessingRule.d.ts +3 -3
- package/src/generation/theme/cell/CellProcessingRule.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRule.js +6 -10
- package/src/generation/theme/cell/CellProcessingRuleSet.d.ts +1 -1
- package/src/generation/theme/cell/CellProcessingRuleSet.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRuleSet.js +2 -2
- package/src/view/common/ListView.js +1 -1
- package/src/view/elements/BottomLeftResizeHandleView.d.ts.map +1 -1
- package/src/view/elements/BottomLeftResizeHandleView.js +13 -5
- package/src/core/font/FontAsset.d.ts.map +0 -1
- package/src/core/font/FontAssetLoader.d.ts.map +0 -1
- package/src/core/geom/3d/shape/util/shape_to_visual_entity.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +0 -1
- package/src/core/process/action/AsynchronousDelayAction.d.ts.map +0 -1
- package/src/engine/physics/computeInterceptPoint.d.ts.map +0 -1
- package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +0 -1
- package/src/engine/physics/gjk/gjk.d.ts.map +0 -1
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +0 -1
- package/src/engine/physics/gjk/minkowski_support.d.ts.map +0 -1
- package/src/engine/physics/gjk/mpr.d.ts.map +0 -1
- package/src/engine/physics/integration/quat_integrate.d.ts.map +0 -1
- package/src/engine/physics/island/union_find.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/PosedShape.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/clip_against_axis_uv.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +0 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts +0 -21
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts.map +0 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +0 -68
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts +0 -10
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts.map +0 -1
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.js +0 -17
- /package/src/{engine/physics → core/geom/3d}/gjk/NOTES.md +0 -0
- /package/src/{engine/physics → core/geom/3d}/gjk/gjk.d.ts +0 -0
- /package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.d.ts +0 -0
|
@@ -15,8 +15,25 @@ const scratch_b = new Float32Array(3);
|
|
|
15
15
|
* `world_to_grid` converts both endpoints into the target field's grid space, and the
|
|
16
16
|
* effector splats `(position - previous_position) / dt * strength` into every fluid
|
|
17
17
|
* cell within the kernel of that grid-space segment, weighted by a smooth
|
|
18
|
-
* `(1 - d/R)²` falloff.
|
|
19
|
-
*
|
|
18
|
+
* `(1 - d/R)²` falloff.
|
|
19
|
+
*
|
|
20
|
+
* Trail advancement (copying `position` into `previous_position`) depends on who
|
|
21
|
+
* drives the effector:
|
|
22
|
+
*
|
|
23
|
+
* - **Transform-managed** (entity has a `Transform`; {@link FluidSystem} calls
|
|
24
|
+
* {@link syncFromTransform} once per fixed update): the trail advances inside
|
|
25
|
+
* the sync, NOT inside {@link apply}. The segment is "movement since the last
|
|
26
|
+
* tick", and `apply` is a pure read — the same instance can be applied to any
|
|
27
|
+
* number of overlapping fluid fields in one step and every field receives the
|
|
28
|
+
* same wake. (Advancing in `apply` would hand the whole segment to whichever
|
|
29
|
+
* field stepped first and a zero segment to the rest.)
|
|
30
|
+
*
|
|
31
|
+
* - **Manually driven** (user code sets {@link position} directly; no sync):
|
|
32
|
+
* `apply` advances the trail after splatting, so consecutive applies follow
|
|
33
|
+
* the moving source. With multiple fields this mode gives the segment to the
|
|
34
|
+
* first field only — pair manual driving with a single field, or call
|
|
35
|
+
* {@link syncFromTransform}-style bookkeeping yourself by resetting
|
|
36
|
+
* {@link previous_position} between steps.
|
|
20
37
|
*
|
|
21
38
|
* Works at any user-supplied {@link radius}, including sub-cell. The kernel is
|
|
22
39
|
* internally floored at `1` grid cell — small user radii (bullets, arrows) still
|
|
@@ -46,9 +63,10 @@ export class WakeFluidEffector extends AbstractFluidEffector {
|
|
|
46
63
|
position = [0, 0, 0];
|
|
47
64
|
|
|
48
65
|
/**
|
|
49
|
-
* Position at the start of the swept segment, world space.
|
|
50
|
-
* `position`
|
|
51
|
-
*
|
|
66
|
+
* Position at the start of the swept segment, world space. Advanced to
|
|
67
|
+
* `position` by {@link syncFromTransform} (transform-managed mode) or at the
|
|
68
|
+
* end of {@link apply} (manual mode) — see the class docstring. Caller
|
|
69
|
+
* normally doesn't touch it directly.
|
|
52
70
|
* @type {[number, number, number]}
|
|
53
71
|
*/
|
|
54
72
|
previous_position = [0, 0, 0];
|
|
@@ -70,31 +88,57 @@ export class WakeFluidEffector extends AbstractFluidEffector {
|
|
|
70
88
|
strength = 1;
|
|
71
89
|
|
|
72
90
|
/**
|
|
73
|
-
* True
|
|
74
|
-
*
|
|
91
|
+
* True when a sync has adopted a position since construction / the last
|
|
92
|
+
* {@link reset_trail}. While false, the next {@link syncFromTransform} seeds
|
|
93
|
+
* `previous_position = position` instead of advancing the trail — suppressing
|
|
94
|
+
* a spurious wake from the origin or across a teleport.
|
|
75
95
|
* @type {boolean}
|
|
76
96
|
*/
|
|
77
97
|
#initialized = false;
|
|
78
98
|
|
|
79
99
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
100
|
+
* True once {@link syncFromTransform} has ever been called — the effector is
|
|
101
|
+
* driven by an entity Transform via {@link FluidSystem}. In this mode the
|
|
102
|
+
* trail advances in the sync (once per tick) and {@link apply} becomes a pure
|
|
103
|
+
* read, so one instance can serve any number of fluid fields per step.
|
|
104
|
+
* @type {boolean}
|
|
105
|
+
*/
|
|
106
|
+
#transform_managed = false;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Snap {@link previous_position} to {@link position} and mark the trail as
|
|
110
|
+
* needing a re-seed. Call after manual initial placement and after any
|
|
111
|
+
* teleport (in either driving mode) so the next splat doesn't sweep a wake
|
|
112
|
+
* across the jump.
|
|
83
113
|
*/
|
|
84
114
|
reset_trail() {
|
|
85
115
|
this.previous_position[0] = this.position[0];
|
|
86
116
|
this.previous_position[1] = this.position[1];
|
|
87
117
|
this.previous_position[2] = this.position[2];
|
|
88
|
-
this.#initialized =
|
|
118
|
+
this.#initialized = false;
|
|
89
119
|
}
|
|
90
120
|
|
|
91
121
|
/**
|
|
92
|
-
* Pull world-space position off the entity Transform
|
|
93
|
-
*
|
|
122
|
+
* Pull world-space position off the entity Transform and advance the trail:
|
|
123
|
+
* `previous_position` takes the position adopted on the LAST sync, `position`
|
|
124
|
+
* takes the transform's current one. Called by {@link FluidSystem} once per
|
|
125
|
+
* fixed update, before any field is stepped — so every field stepped this
|
|
126
|
+
* tick sees the same one-tick segment.
|
|
127
|
+
*
|
|
128
|
+
* The first call (and the first after {@link reset_trail}) seeds
|
|
129
|
+
* `previous_position = position` instead, suppressing a wake from the origin
|
|
130
|
+
* or across a teleport.
|
|
131
|
+
*
|
|
94
132
|
* @param {Transform} transform
|
|
95
133
|
*/
|
|
96
134
|
syncFromTransform(transform) {
|
|
97
135
|
const p = transform.position;
|
|
136
|
+
this.#transform_managed = true;
|
|
137
|
+
if (this.#initialized) {
|
|
138
|
+
this.previous_position[0] = this.position[0];
|
|
139
|
+
this.previous_position[1] = this.position[1];
|
|
140
|
+
this.previous_position[2] = this.position[2];
|
|
141
|
+
}
|
|
98
142
|
this.position[0] = p.x;
|
|
99
143
|
this.position[1] = p.y;
|
|
100
144
|
this.position[2] = p.z;
|
|
@@ -160,79 +204,138 @@ export class WakeFluidEffector extends AbstractFluidEffector {
|
|
|
160
204
|
const res_x = res[0];
|
|
161
205
|
const res_y = res[1];
|
|
162
206
|
const res_z = res[2];
|
|
163
|
-
const slice_size = res_x * res_y;
|
|
164
207
|
|
|
165
|
-
|
|
166
|
-
const
|
|
167
|
-
const x_max = Math.min(res_x - 1, Math.ceil(Math.max(ax, bx) + r));
|
|
168
|
-
const y_min = Math.max(0, Math.floor(Math.min(ay, by) - r));
|
|
169
|
-
const y_max = Math.min(res_y - 1, Math.ceil(Math.max(ay, by) + r));
|
|
170
|
-
const z_min = Math.max(0, Math.floor(Math.min(az, bz) - r));
|
|
171
|
-
const z_max = Math.min(res_z - 1, Math.ceil(Math.max(az, bz) + r));
|
|
208
|
+
const r_inv = 1 / r;
|
|
209
|
+
const inv_seg_len_sq = 1 / seg_len_sq;
|
|
172
210
|
|
|
173
|
-
|
|
211
|
+
// Conservative AABB of the swept tube in cell coordinates; each face
|
|
212
|
+
// lattice clips it to its own index range below.
|
|
213
|
+
const box_x_min = Math.min(ax, bx) - r;
|
|
214
|
+
const box_x_max = Math.max(ax, bx) + r;
|
|
215
|
+
const box_y_min = Math.min(ay, by) - r;
|
|
216
|
+
const box_y_max = Math.max(ay, by) + r;
|
|
217
|
+
const box_z_min = Math.min(az, bz) - r;
|
|
218
|
+
const box_z_max = Math.max(az, bz) + r;
|
|
219
|
+
|
|
220
|
+
if (Math.max(0, Math.floor(box_x_min)) > Math.min(res_x, Math.ceil(box_x_max))
|
|
221
|
+
|| Math.max(0, Math.floor(box_y_min)) > Math.min(res_y, Math.ceil(box_y_max))
|
|
222
|
+
|| Math.max(0, Math.floor(box_z_min)) > Math.min(res_z, Math.ceil(box_z_max))) {
|
|
174
223
|
// Swept tube doesn't intersect the field at all.
|
|
175
|
-
this.#
|
|
224
|
+
this.#advance_trail_if_manual();
|
|
176
225
|
return;
|
|
177
226
|
}
|
|
178
227
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
228
|
+
// Weight of the (1 − d/R)² falloff at a query position, or 0 outside
|
|
229
|
+
// the tube.
|
|
230
|
+
const tube_weight = (qx, qy, qz) => {
|
|
231
|
+
const dx = qx - ax;
|
|
232
|
+
const dy = qy - ay;
|
|
233
|
+
const dz = qz - az;
|
|
234
|
+
let t = (dx * seg_dx + dy * seg_dy + dz * seg_dz) * inv_seg_len_sq;
|
|
235
|
+
if (t < 0) t = 0;
|
|
236
|
+
else if (t > 1) t = 1;
|
|
237
|
+
const ndx = dx - t * seg_dx;
|
|
238
|
+
const ndy = dy - t * seg_dy;
|
|
239
|
+
const ndz = dz - t * seg_dz;
|
|
240
|
+
const tt = Math.sqrt(ndx * ndx + ndy * ndy + ndz * ndz) * r_inv;
|
|
241
|
+
if (tt >= 1) return 0;
|
|
242
|
+
const fall = 1 - tt;
|
|
243
|
+
return fall * fall;
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Each component deposits onto its own face lattice at face positions
|
|
247
|
+
// (offset −0.5 on its own axis). Pinned faces are skipped.
|
|
248
|
+
|
|
249
|
+
// u (x-faces).
|
|
250
|
+
{
|
|
251
|
+
const vu = field.velocity_x;
|
|
252
|
+
const pin = field.face_solid_x;
|
|
253
|
+
const sx = res_x + 1;
|
|
254
|
+
const x_min = Math.max(0, Math.floor(box_x_min + 0.5));
|
|
255
|
+
const x_max = Math.min(res_x, Math.ceil(box_x_max + 0.5));
|
|
256
|
+
const y_min = Math.max(0, Math.floor(box_y_min));
|
|
257
|
+
const y_max = Math.min(res_y - 1, Math.ceil(box_y_max));
|
|
258
|
+
const z_min = Math.max(0, Math.floor(box_z_min));
|
|
259
|
+
const z_max = Math.min(res_z - 1, Math.ceil(box_z_max));
|
|
260
|
+
for (let z = z_min; z <= z_max; z++) {
|
|
261
|
+
const z_off = z * sx * res_y;
|
|
262
|
+
for (let y = y_min; y <= y_max; y++) {
|
|
263
|
+
const y_off = z_off + y * sx;
|
|
264
|
+
for (let x = x_min; x <= x_max; x++) {
|
|
265
|
+
const w = tube_weight(x - 0.5, y, z);
|
|
266
|
+
if (w === 0) continue;
|
|
267
|
+
const f = y_off + x;
|
|
268
|
+
if (pin[f] !== 0) continue;
|
|
269
|
+
vu[f] += impulse_x * w;
|
|
212
270
|
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
213
274
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
275
|
+
// v (y-faces).
|
|
276
|
+
{
|
|
277
|
+
const vv = field.velocity_y;
|
|
278
|
+
const pin = field.face_solid_y;
|
|
279
|
+
const x_min = Math.max(0, Math.floor(box_x_min));
|
|
280
|
+
const x_max = Math.min(res_x - 1, Math.ceil(box_x_max));
|
|
281
|
+
const y_min = Math.max(0, Math.floor(box_y_min + 0.5));
|
|
282
|
+
const y_max = Math.min(res_y, Math.ceil(box_y_max + 0.5));
|
|
283
|
+
const z_min = Math.max(0, Math.floor(box_z_min));
|
|
284
|
+
const z_max = Math.min(res_z - 1, Math.ceil(box_z_max));
|
|
285
|
+
for (let z = z_min; z <= z_max; z++) {
|
|
286
|
+
const z_off = z * res_x * (res_y + 1);
|
|
287
|
+
for (let y = y_min; y <= y_max; y++) {
|
|
288
|
+
const y_off = z_off + y * res_x;
|
|
289
|
+
for (let x = x_min; x <= x_max; x++) {
|
|
290
|
+
const w = tube_weight(x, y - 0.5, z);
|
|
291
|
+
if (w === 0) continue;
|
|
292
|
+
const f = y_off + x;
|
|
293
|
+
if (pin[f] !== 0) continue;
|
|
294
|
+
vv[f] += impulse_y * w;
|
|
219
295
|
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
220
299
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
300
|
+
// w (z-faces).
|
|
301
|
+
{
|
|
302
|
+
const vw = field.velocity_z;
|
|
303
|
+
const pin = field.face_solid_z;
|
|
304
|
+
const slice = res_x * res_y;
|
|
305
|
+
const x_min = Math.max(0, Math.floor(box_x_min));
|
|
306
|
+
const x_max = Math.min(res_x - 1, Math.ceil(box_x_max));
|
|
307
|
+
const y_min = Math.max(0, Math.floor(box_y_min));
|
|
308
|
+
const y_max = Math.min(res_y - 1, Math.ceil(box_y_max));
|
|
309
|
+
const z_min = Math.max(0, Math.floor(box_z_min + 0.5));
|
|
310
|
+
const z_max = Math.min(res_z, Math.ceil(box_z_max + 0.5));
|
|
311
|
+
for (let z = z_min; z <= z_max; z++) {
|
|
312
|
+
const z_off = z * slice;
|
|
313
|
+
for (let y = y_min; y <= y_max; y++) {
|
|
314
|
+
const y_off = z_off + y * res_x;
|
|
315
|
+
for (let x = x_min; x <= x_max; x++) {
|
|
316
|
+
const w = tube_weight(x, y, z - 0.5);
|
|
317
|
+
if (w === 0) continue;
|
|
318
|
+
const f = y_off + x;
|
|
319
|
+
if (pin[f] !== 0) continue;
|
|
320
|
+
vw[f] += impulse_z * w;
|
|
321
|
+
}
|
|
224
322
|
}
|
|
225
323
|
}
|
|
226
324
|
}
|
|
227
325
|
|
|
228
|
-
this.#
|
|
326
|
+
this.#advance_trail_if_manual();
|
|
229
327
|
}
|
|
230
328
|
|
|
231
329
|
/**
|
|
232
|
-
*
|
|
233
|
-
* one left off.
|
|
330
|
+
* Manual-mode trail bookkeeping: shift `previous_position` to `position` so
|
|
331
|
+
* the next apply() picks up where this one left off. Transform-managed
|
|
332
|
+
* effectors skip this — their trail advances in {@link syncFromTransform},
|
|
333
|
+
* keeping apply() pure so the same segment serves every field in the step.
|
|
234
334
|
*/
|
|
235
|
-
#
|
|
335
|
+
#advance_trail_if_manual() {
|
|
336
|
+
if (this.#transform_managed) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
236
339
|
this.previous_position[0] = this.position[0];
|
|
237
340
|
this.previous_position[1] = this.position[1];
|
|
238
341
|
this.previous_position[2] = this.position[2];
|
|
@@ -67,12 +67,35 @@ function main(engine) {
|
|
|
67
67
|
new Entity().add(effectors).build(ecd);
|
|
68
68
|
|
|
69
69
|
// Debug visualisation — a per-frame behavior, separate from the fluid stepping.
|
|
70
|
+
// The MAC velocity lives on three face lattices of different sizes; the
|
|
71
|
+
// visualiser wants cell-resolution channels, so sample to cell centers
|
|
72
|
+
// into cached buffers each frame.
|
|
73
|
+
const cell_count = field.cellCount();
|
|
74
|
+
const view_vx = new Float32Array(cell_count);
|
|
75
|
+
const view_vy = new Float32Array(cell_count);
|
|
76
|
+
const view_vz = new Float32Array(cell_count);
|
|
77
|
+
const sample_scratch = new Float32Array(3);
|
|
78
|
+
|
|
79
|
+
function refresh_velocity_views() {
|
|
80
|
+
for (let z = 0; z < RES_Z; z++) {
|
|
81
|
+
for (let y = 0; y < RES_Y; y++) {
|
|
82
|
+
for (let x = 0; x < RES_X; x++) {
|
|
83
|
+
field.sampleVelocity(sample_scratch, x, y, z);
|
|
84
|
+
const c = field.cellIndex(x, y, z);
|
|
85
|
+
view_vx[c] = sample_scratch[0];
|
|
86
|
+
view_vy[c] = sample_scratch[1];
|
|
87
|
+
view_vz[c] = sample_scratch[2];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
70
93
|
const slice_view = new SliceVisualiser();
|
|
71
94
|
slice_view.size.set(RES_X * 6, RES_Y * 2);
|
|
72
95
|
slice_view.scale.setScalar(2);
|
|
73
96
|
slice_view.transformOrigin.set(0, 0);
|
|
74
97
|
slice_view.setChannels(
|
|
75
|
-
[
|
|
98
|
+
[view_vx, view_vy, view_vz, field.getScalarData("dye")],
|
|
76
99
|
field.getResolution()
|
|
77
100
|
);
|
|
78
101
|
|
|
@@ -81,6 +104,7 @@ function main(engine) {
|
|
|
81
104
|
// FluidSystem.fixedUpdate is what advances the sim; we just observe and
|
|
82
105
|
// time the draw cost here.
|
|
83
106
|
const t0 = performance.now();
|
|
107
|
+
refresh_velocity_views();
|
|
84
108
|
slice_view.draw();
|
|
85
109
|
metrics.get('sim').record(performance.now() - t0);
|
|
86
110
|
}))
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unconditionally stable MacCormack advection of a scalar field — second-order
|
|
3
|
+
* accurate in space and time, at roughly twice the cost of plain
|
|
4
|
+
* semi-Lagrangian transport.
|
|
5
|
+
*
|
|
6
|
+
* Scheme (Selle, Fedkiw, Kim, Liu, Rossignac 2008):
|
|
7
|
+
*
|
|
8
|
+
* 1. forward: φ̂(c) = SL(φ, back-trace c by −v·dt) — plain SL step
|
|
9
|
+
* 2. backward: φ̄(c) = SL(φ̂, trace c by +v·dt) — reverse it
|
|
10
|
+
* 3. correct: φ*(c) = φ̂(c) + ½·(φ(c) − φ̄(c))
|
|
11
|
+
* 4. limit: φ_new(c) = clamp(φ*, min/max of the 8 φ cells around the
|
|
12
|
+
* back-traced position) — Selle's monotone limiter; restores
|
|
13
|
+
* unconditional stability and forbids new extrema, at the
|
|
14
|
+
* price of locally reverting toward first-order where the
|
|
15
|
+
* correction would overshoot.
|
|
16
|
+
*
|
|
17
|
+
* The forward/backward error cancellation removes the leading-order smearing
|
|
18
|
+
* of semi-Lagrangian transport — sharp scalar features survive an order of
|
|
19
|
+
* magnitude longer.
|
|
20
|
+
*
|
|
21
|
+
* Solid destination cells pass their source value through unchanged, exactly
|
|
22
|
+
* like {@link v3_grid_apply_scalar_advection}.
|
|
23
|
+
*
|
|
24
|
+
* Aliasing: `output`, `source` and `forward_scratch` must be three distinct
|
|
25
|
+
* buffers. Velocity arrays may alias none of them is required — they are only
|
|
26
|
+
* point-read.
|
|
27
|
+
*
|
|
28
|
+
* @param {Float32Array} output Destination, mutated.
|
|
29
|
+
* @param {Float32Array} source Scalar values to advect. NOT mutated.
|
|
30
|
+
* @param {Float32Array} forward_scratch Working buffer for φ̂. Mutated.
|
|
31
|
+
* @param {Float32Array} vel_x Carrier velocity (cell-centered).
|
|
32
|
+
* @param {Float32Array} vel_y
|
|
33
|
+
* @param {Float32Array} vel_z
|
|
34
|
+
* @param {number} res_x
|
|
35
|
+
* @param {number} res_y
|
|
36
|
+
* @param {number} res_z
|
|
37
|
+
* @param {number} time_delta
|
|
38
|
+
* @param {Uint8Array} solid Required cell flags (zero-filled for a
|
|
39
|
+
* wall-free domain).
|
|
40
|
+
*/
|
|
41
|
+
export function v3_grid_advect_maccormack_scalar(output: Float32Array, source: Float32Array, forward_scratch: Float32Array, vel_x: Float32Array, vel_y: Float32Array, vel_z: Float32Array, res_x: number, res_y: number, res_z: number, time_delta: number, solid: Uint8Array): void;
|
|
42
|
+
//# sourceMappingURL=v3_grid_advect_maccormack_scalar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_grid_advect_maccormack_scalar.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,yDAbW,YAAY,UACZ,YAAY,mBACZ,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QA8FpB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { clamp } from "../../../../core/math/clamp.js";
|
|
3
|
+
import { scs3d_sample_linear } from "../../../graphics/texture/3d/scs3d_sample_linear.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Unconditionally stable MacCormack advection of a scalar field — second-order
|
|
7
|
+
* accurate in space and time, at roughly twice the cost of plain
|
|
8
|
+
* semi-Lagrangian transport.
|
|
9
|
+
*
|
|
10
|
+
* Scheme (Selle, Fedkiw, Kim, Liu, Rossignac 2008):
|
|
11
|
+
*
|
|
12
|
+
* 1. forward: φ̂(c) = SL(φ, back-trace c by −v·dt) — plain SL step
|
|
13
|
+
* 2. backward: φ̄(c) = SL(φ̂, trace c by +v·dt) — reverse it
|
|
14
|
+
* 3. correct: φ*(c) = φ̂(c) + ½·(φ(c) − φ̄(c))
|
|
15
|
+
* 4. limit: φ_new(c) = clamp(φ*, min/max of the 8 φ cells around the
|
|
16
|
+
* back-traced position) — Selle's monotone limiter; restores
|
|
17
|
+
* unconditional stability and forbids new extrema, at the
|
|
18
|
+
* price of locally reverting toward first-order where the
|
|
19
|
+
* correction would overshoot.
|
|
20
|
+
*
|
|
21
|
+
* The forward/backward error cancellation removes the leading-order smearing
|
|
22
|
+
* of semi-Lagrangian transport — sharp scalar features survive an order of
|
|
23
|
+
* magnitude longer.
|
|
24
|
+
*
|
|
25
|
+
* Solid destination cells pass their source value through unchanged, exactly
|
|
26
|
+
* like {@link v3_grid_apply_scalar_advection}.
|
|
27
|
+
*
|
|
28
|
+
* Aliasing: `output`, `source` and `forward_scratch` must be three distinct
|
|
29
|
+
* buffers. Velocity arrays may alias none of them is required — they are only
|
|
30
|
+
* point-read.
|
|
31
|
+
*
|
|
32
|
+
* @param {Float32Array} output Destination, mutated.
|
|
33
|
+
* @param {Float32Array} source Scalar values to advect. NOT mutated.
|
|
34
|
+
* @param {Float32Array} forward_scratch Working buffer for φ̂. Mutated.
|
|
35
|
+
* @param {Float32Array} vel_x Carrier velocity (cell-centered).
|
|
36
|
+
* @param {Float32Array} vel_y
|
|
37
|
+
* @param {Float32Array} vel_z
|
|
38
|
+
* @param {number} res_x
|
|
39
|
+
* @param {number} res_y
|
|
40
|
+
* @param {number} res_z
|
|
41
|
+
* @param {number} time_delta
|
|
42
|
+
* @param {Uint8Array} solid Required cell flags (zero-filled for a
|
|
43
|
+
* wall-free domain).
|
|
44
|
+
*/
|
|
45
|
+
export function v3_grid_advect_maccormack_scalar(output, source, forward_scratch, vel_x, vel_y, vel_z, res_x, res_y, res_z, time_delta, solid) {
|
|
46
|
+
const cell_count = res_x * res_y * res_z;
|
|
47
|
+
|
|
48
|
+
assert.notEqual(output, source, "output must not alias source");
|
|
49
|
+
assert.notEqual(output, forward_scratch, "output must not alias forward_scratch");
|
|
50
|
+
assert.notEqual(source, forward_scratch, "source must not alias forward_scratch");
|
|
51
|
+
assert.greaterThanOrEqual(output.length, cell_count, "output covers grid");
|
|
52
|
+
assert.greaterThanOrEqual(source.length, cell_count, "source covers grid");
|
|
53
|
+
assert.greaterThanOrEqual(forward_scratch.length, cell_count, "forward_scratch covers grid");
|
|
54
|
+
assert.greaterThanOrEqual(vel_x.length, cell_count, "vel_x covers grid");
|
|
55
|
+
assert.greaterThanOrEqual(vel_y.length, cell_count, "vel_y covers grid");
|
|
56
|
+
assert.greaterThanOrEqual(vel_z.length, cell_count, "vel_z covers grid");
|
|
57
|
+
|
|
58
|
+
const slice_size = res_x * res_y;
|
|
59
|
+
const last_x = res_x - 1;
|
|
60
|
+
const last_y = res_y - 1;
|
|
61
|
+
const last_z = res_z - 1;
|
|
62
|
+
|
|
63
|
+
const fwd = forward_scratch;
|
|
64
|
+
|
|
65
|
+
// ─── pass 1: forward SL step into the scratch ───────────────────────────
|
|
66
|
+
for (let z = 0; z < res_z; z++) {
|
|
67
|
+
const z_off = z * slice_size;
|
|
68
|
+
for (let y = 0; y < res_y; y++) {
|
|
69
|
+
const y_off = y * res_x;
|
|
70
|
+
for (let x = 0; x < res_x; x++) {
|
|
71
|
+
const c = z_off + y_off + x;
|
|
72
|
+
if (solid[c] !== 0) {
|
|
73
|
+
fwd[c] = source[c];
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const s_x = x - vel_x[c] * time_delta;
|
|
77
|
+
const s_y = y - vel_y[c] * time_delta;
|
|
78
|
+
const s_z = z - vel_z[c] * time_delta;
|
|
79
|
+
fwd[c] = scs3d_sample_linear(source, res_x, res_y, res_z, s_x, s_y, s_z);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ─── pass 2: backward step, correction, monotone limit ──────────────────
|
|
85
|
+
for (let z = 0; z < res_z; z++) {
|
|
86
|
+
const z_off = z * slice_size;
|
|
87
|
+
for (let y = 0; y < res_y; y++) {
|
|
88
|
+
const y_off = y * res_x;
|
|
89
|
+
for (let x = 0; x < res_x; x++) {
|
|
90
|
+
const c = z_off + y_off + x;
|
|
91
|
+
if (solid[c] !== 0) {
|
|
92
|
+
output[c] = source[c];
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const vx = vel_x[c] * time_delta;
|
|
97
|
+
const vy = vel_y[c] * time_delta;
|
|
98
|
+
const vz = vel_z[c] * time_delta;
|
|
99
|
+
|
|
100
|
+
// Reverse trace samples the forward result.
|
|
101
|
+
const backward = scs3d_sample_linear(fwd, res_x, res_y, res_z, x + vx, y + vy, z + vz);
|
|
102
|
+
const corrected = fwd[c] + 0.5 * (source[c] - backward);
|
|
103
|
+
|
|
104
|
+
// Limiter bounds: extrema of the 8 source cells around the
|
|
105
|
+
// back-traced position (same clamped corner set the pass-1
|
|
106
|
+
// sampler interpolated from).
|
|
107
|
+
const bx = clamp(x - vx, 0, last_x);
|
|
108
|
+
const by = clamp(y - vy, 0, last_y);
|
|
109
|
+
const bz = clamp(z - vz, 0, last_z);
|
|
110
|
+
const x0 = bx | 0;
|
|
111
|
+
const y0 = by | 0;
|
|
112
|
+
const z0 = bz | 0;
|
|
113
|
+
const x1 = bx === x0 ? x0 : x0 + 1;
|
|
114
|
+
const y1 = by === y0 ? y0 : y0 + 1;
|
|
115
|
+
const z1 = bz === z0 ? z0 : z0 + 1;
|
|
116
|
+
|
|
117
|
+
const z0_off = z0 * slice_size;
|
|
118
|
+
const z1_off = z1 * slice_size;
|
|
119
|
+
const y0_off = y0 * res_x;
|
|
120
|
+
const y1_off = y1 * res_x;
|
|
121
|
+
|
|
122
|
+
let mn = source[z0_off + y0_off + x0];
|
|
123
|
+
let mx = mn;
|
|
124
|
+
let v = source[z0_off + y0_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
125
|
+
v = source[z0_off + y1_off + x0]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
126
|
+
v = source[z0_off + y1_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
127
|
+
v = source[z1_off + y0_off + x0]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
128
|
+
v = source[z1_off + y0_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
129
|
+
v = source[z1_off + y1_off + x0]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
130
|
+
v = source[z1_off + y1_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
131
|
+
|
|
132
|
+
output[c] = corrected < mn ? mn : (corrected > mx ? mx : corrected);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unconditionally stable MacCormack advection of a 3-component velocity field
|
|
3
|
+
* along a separate carrier field — the velocity counterpart of
|
|
4
|
+
* {@link v3_grid_advect_maccormack_scalar}, sharing one back-trace and one
|
|
5
|
+
* fused 3-channel sample per cell per pass.
|
|
6
|
+
*
|
|
7
|
+
* Scheme per component (Selle et al. 2008):
|
|
8
|
+
*
|
|
9
|
+
* 1. forward: û = SL(src, back-trace by carrier·dt)
|
|
10
|
+
* 2. backward: ū = SL(û, trace by +carrier·dt)
|
|
11
|
+
* 3. correct: u* = û + ½·(src − ū)
|
|
12
|
+
* 4. limit: clamp to min/max of the 8 src cells around the back-traced
|
|
13
|
+
* position (per component) — Selle's monotone limiter.
|
|
14
|
+
*
|
|
15
|
+
* The carrier is read only at each cell's own index (the trace origin), so
|
|
16
|
+
* `outputs` MAY alias the carrier arrays — the advection-reflection step
|
|
17
|
+
* advects the reflected field along the projected field that lives in the
|
|
18
|
+
* output buffers. `sources` and `forward_scratch` must be distinct from
|
|
19
|
+
* outputs and from each other.
|
|
20
|
+
*
|
|
21
|
+
* Solid destination cells pass their source value through unchanged.
|
|
22
|
+
*
|
|
23
|
+
* @param {Float32Array[]} outputs `[out_x, out_y, out_z]`, mutated.
|
|
24
|
+
* @param {Float32Array[]} sources `[src_x, src_y, src_z]`. NOT mutated.
|
|
25
|
+
* @param {Float32Array} carrier_x Velocity driving the traces.
|
|
26
|
+
* @param {Float32Array} carrier_y
|
|
27
|
+
* @param {Float32Array} carrier_z
|
|
28
|
+
* @param {Float32Array[]} forward_scratch `[fwd_x, fwd_y, fwd_z]` working
|
|
29
|
+
* buffers for û. Mutated.
|
|
30
|
+
* @param {number} res_x
|
|
31
|
+
* @param {number} res_y
|
|
32
|
+
* @param {number} res_z
|
|
33
|
+
* @param {number} time_delta
|
|
34
|
+
* @param {Uint8Array} solid Required cell flags.
|
|
35
|
+
*/
|
|
36
|
+
export function v3_grid_advect_maccormack_velocity(outputs: Float32Array[], sources: Float32Array[], carrier_x: Float32Array, carrier_y: Float32Array, carrier_z: Float32Array, forward_scratch: Float32Array[], res_x: number, res_y: number, res_z: number, time_delta: number, solid: Uint8Array): void;
|
|
37
|
+
//# sourceMappingURL=v3_grid_advect_maccormack_velocity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_grid_advect_maccormack_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,4DAbW,YAAY,EAAE,WACd,YAAY,EAAE,aACd,YAAY,aACZ,YAAY,aACZ,YAAY,mBACZ,YAAY,EAAE,SAEd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QAgHpB"}
|