@woosh/meep-engine 2.156.0 → 2.157.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} +9 -8
- package/src/{engine/physics/narrowphase/PosedShape.d.ts.map → core/geom/3d/shape/PosedShape3D.d.ts.map} +1 -1
- package/src/{engine/physics/narrowphase/PosedShape.js → core/geom/3d/shape/PosedShape3D.js} +10 -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/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 +45 -17
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +53 -23
- package/src/engine/physics/fluid/FluidSimulator.d.ts +141 -5
- package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidSimulator.js +336 -43
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +114 -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/FluidSystem.d.ts +3 -3
- package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.d.ts +41 -0
- package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.d.ts.map +1 -0
- package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.js +124 -0
- 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 +67 -18
- 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_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/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/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
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drives every fluid cell toward a target ambient wind velocity — the standard
|
|
3
|
+
* way to model prevailing wind in a scrolling wind volume.
|
|
4
|
+
*
|
|
5
|
+
* Unlike {@link GlobalFluidEffector} (which integrates a constant ACCELERATION
|
|
6
|
+
* and therefore grows the velocity without bound — incompressible projection
|
|
7
|
+
* cannot oppose a uniform force), this effector relaxes the field toward a
|
|
8
|
+
* fixed VELOCITY:
|
|
9
|
+
*
|
|
10
|
+
* v ← v + α · (target − v), α = 1 − exp(−rate · dt)
|
|
11
|
+
*
|
|
12
|
+
* The fixed point is exactly `target`; gusts and wakes splatted on top decay
|
|
13
|
+
* back toward the ambient wind at `rate` per second. The exponential form is
|
|
14
|
+
* frame-rate independent — two half-steps relax exactly as much as one full
|
|
15
|
+
* step.
|
|
16
|
+
*
|
|
17
|
+
* `velocity` is in WORLD units per second. The `world_to_grid` matrix's linear
|
|
18
|
+
* part converts it into the target field's grid-cell units at apply time, so
|
|
19
|
+
* the same effector instance produces the same world-space wind on fields of
|
|
20
|
+
* different `cell_size`.
|
|
21
|
+
*
|
|
22
|
+
* Solid cells are left untouched — the projection zeroes them anyway, and
|
|
23
|
+
* skipping the write keeps the solid mask authoritative for effectors too.
|
|
24
|
+
*/
|
|
25
|
+
export class AmbientWindFluidEffector extends AbstractFluidEffector {
|
|
26
|
+
/**
|
|
27
|
+
* Target wind velocity in WORLD units per second.
|
|
28
|
+
* @type {[number, number, number]}
|
|
29
|
+
*/
|
|
30
|
+
velocity: [number, number, number];
|
|
31
|
+
/**
|
|
32
|
+
* Relaxation rate toward {@link velocity}, per second. Higher = stiffer
|
|
33
|
+
* wind that re-asserts itself quickly after disturbances; lower = gusts
|
|
34
|
+
* and wakes linger. At rate `r`, a disturbance decays to ~37% in `1/r`
|
|
35
|
+
* seconds. `0` disables the effector.
|
|
36
|
+
* @type {number}
|
|
37
|
+
*/
|
|
38
|
+
rate: number;
|
|
39
|
+
}
|
|
40
|
+
import { AbstractFluidEffector } from "./AbstractFluidEffector.js";
|
|
41
|
+
//# sourceMappingURL=AmbientWindFluidEffector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AmbientWindFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/AmbientWindFluidEffector.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IAEI;;;OAGG;IACH,UAFU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEb;IAErB;;;;;;OAMG;IACH,MAFU,MAAM,CAEP;CAgFZ;sCAzHqC,4BAA4B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { combine_hash } from "../../../../core/collection/array/combine_hash.js";
|
|
2
|
+
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
3
|
+
import { AbstractFluidEffector } from "./AbstractFluidEffector.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Drives every fluid cell toward a target ambient wind velocity — the standard
|
|
7
|
+
* way to model prevailing wind in a scrolling wind volume.
|
|
8
|
+
*
|
|
9
|
+
* Unlike {@link GlobalFluidEffector} (which integrates a constant ACCELERATION
|
|
10
|
+
* and therefore grows the velocity without bound — incompressible projection
|
|
11
|
+
* cannot oppose a uniform force), this effector relaxes the field toward a
|
|
12
|
+
* fixed VELOCITY:
|
|
13
|
+
*
|
|
14
|
+
* v ← v + α · (target − v), α = 1 − exp(−rate · dt)
|
|
15
|
+
*
|
|
16
|
+
* The fixed point is exactly `target`; gusts and wakes splatted on top decay
|
|
17
|
+
* back toward the ambient wind at `rate` per second. The exponential form is
|
|
18
|
+
* frame-rate independent — two half-steps relax exactly as much as one full
|
|
19
|
+
* step.
|
|
20
|
+
*
|
|
21
|
+
* `velocity` is in WORLD units per second. The `world_to_grid` matrix's linear
|
|
22
|
+
* part converts it into the target field's grid-cell units at apply time, so
|
|
23
|
+
* the same effector instance produces the same world-space wind on fields of
|
|
24
|
+
* different `cell_size`.
|
|
25
|
+
*
|
|
26
|
+
* Solid cells are left untouched — the projection zeroes them anyway, and
|
|
27
|
+
* skipping the write keeps the solid mask authoritative for effectors too.
|
|
28
|
+
*/
|
|
29
|
+
export class AmbientWindFluidEffector extends AbstractFluidEffector {
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Target wind velocity in WORLD units per second.
|
|
33
|
+
* @type {[number, number, number]}
|
|
34
|
+
*/
|
|
35
|
+
velocity = [0, 0, 0];
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Relaxation rate toward {@link velocity}, per second. Higher = stiffer
|
|
39
|
+
* wind that re-asserts itself quickly after disturbances; lower = gusts
|
|
40
|
+
* and wakes linger. At rate `r`, a disturbance decays to ~37% in `1/r`
|
|
41
|
+
* seconds. `0` disables the effector.
|
|
42
|
+
* @type {number}
|
|
43
|
+
*/
|
|
44
|
+
rate = 1;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @param {FluidField} field
|
|
48
|
+
* @param {number} dt
|
|
49
|
+
* @param {Float32Array|number[]} world_to_grid Column-major 4×4 affine; only the
|
|
50
|
+
* linear (upper-left 3×3) part is
|
|
51
|
+
* used since velocity is a direction.
|
|
52
|
+
*/
|
|
53
|
+
apply(field, dt, world_to_grid) {
|
|
54
|
+
if (this.rate <= 0 || dt <= 0) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const wx = this.velocity[0];
|
|
59
|
+
const wy = this.velocity[1];
|
|
60
|
+
const wz = this.velocity[2];
|
|
61
|
+
|
|
62
|
+
// Direction-transform the world-space target into grid units.
|
|
63
|
+
const m = world_to_grid;
|
|
64
|
+
const tx = m[0] * wx + m[4] * wy + m[8] * wz;
|
|
65
|
+
const ty = m[1] * wx + m[5] * wy + m[9] * wz;
|
|
66
|
+
const tz = m[2] * wx + m[6] * wy + m[10] * wz;
|
|
67
|
+
|
|
68
|
+
// Exact exponential relaxation factor for this dt.
|
|
69
|
+
const alpha = 1 - Math.exp(-this.rate * dt);
|
|
70
|
+
|
|
71
|
+
const vx = field.velocity_x;
|
|
72
|
+
const vy = field.velocity_y;
|
|
73
|
+
const vz = field.velocity_z;
|
|
74
|
+
const solid = field.solid;
|
|
75
|
+
const n = field.cellCount();
|
|
76
|
+
|
|
77
|
+
for (let i = 0; i < n; i++) {
|
|
78
|
+
if (solid[i] !== 0) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
vx[i] += alpha * (tx - vx[i]);
|
|
82
|
+
vy[i] += alpha * (ty - vy[i]);
|
|
83
|
+
vz[i] += alpha * (tz - vz[i]);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @param {AbstractFluidEffector} other
|
|
89
|
+
* @return {boolean}
|
|
90
|
+
*/
|
|
91
|
+
equals(other) {
|
|
92
|
+
if (other === this) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
if (!(other instanceof AmbientWindFluidEffector)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return this.rate === other.rate
|
|
99
|
+
&& this.velocity[0] === other.velocity[0]
|
|
100
|
+
&& this.velocity[1] === other.velocity[1]
|
|
101
|
+
&& this.velocity[2] === other.velocity[2];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @return {number}
|
|
106
|
+
*/
|
|
107
|
+
hash() {
|
|
108
|
+
return combine_hash(
|
|
109
|
+
computeHashFloat(this.velocity[0]),
|
|
110
|
+
computeHashFloat(this.velocity[1]),
|
|
111
|
+
computeHashFloat(this.velocity[2]),
|
|
112
|
+
computeHashFloat(this.rate)
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Position-free — applies to every cell of any field. Infinite bounds means
|
|
118
|
+
* the broad-phase will never cull this effector.
|
|
119
|
+
* @param {AABB3} out
|
|
120
|
+
*/
|
|
121
|
+
getBoundingBox(out) {
|
|
122
|
+
out.setInfiniteBounds();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -7,8 +7,25 @@
|
|
|
7
7
|
* `world_to_grid` converts both endpoints into the target field's grid space, and the
|
|
8
8
|
* effector splats `(position - previous_position) / dt * strength` into every fluid
|
|
9
9
|
* cell within the kernel of that grid-space segment, weighted by a smooth
|
|
10
|
-
* `(1 - d/R)²` falloff.
|
|
11
|
-
*
|
|
10
|
+
* `(1 - d/R)²` falloff.
|
|
11
|
+
*
|
|
12
|
+
* Trail advancement (copying `position` into `previous_position`) depends on who
|
|
13
|
+
* drives the effector:
|
|
14
|
+
*
|
|
15
|
+
* - **Transform-managed** (entity has a `Transform`; {@link FluidSystem} calls
|
|
16
|
+
* {@link syncFromTransform} once per fixed update): the trail advances inside
|
|
17
|
+
* the sync, NOT inside {@link apply}. The segment is "movement since the last
|
|
18
|
+
* tick", and `apply` is a pure read — the same instance can be applied to any
|
|
19
|
+
* number of overlapping fluid fields in one step and every field receives the
|
|
20
|
+
* same wake. (Advancing in `apply` would hand the whole segment to whichever
|
|
21
|
+
* field stepped first and a zero segment to the rest.)
|
|
22
|
+
*
|
|
23
|
+
* - **Manually driven** (user code sets {@link position} directly; no sync):
|
|
24
|
+
* `apply` advances the trail after splatting, so consecutive applies follow
|
|
25
|
+
* the moving source. With multiple fields this mode gives the segment to the
|
|
26
|
+
* first field only — pair manual driving with a single field, or call
|
|
27
|
+
* {@link syncFromTransform}-style bookkeeping yourself by resetting
|
|
28
|
+
* {@link previous_position} between steps.
|
|
12
29
|
*
|
|
13
30
|
* Works at any user-supplied {@link radius}, including sub-cell. The kernel is
|
|
14
31
|
* internally floored at `1` grid cell — small user radii (bullets, arrows) still
|
|
@@ -36,9 +53,10 @@ export class WakeFluidEffector extends AbstractFluidEffector {
|
|
|
36
53
|
*/
|
|
37
54
|
position: [number, number, number];
|
|
38
55
|
/**
|
|
39
|
-
* Position at the start of the swept segment, world space.
|
|
40
|
-
* `position`
|
|
41
|
-
*
|
|
56
|
+
* Position at the start of the swept segment, world space. Advanced to
|
|
57
|
+
* `position` by {@link syncFromTransform} (transform-managed mode) or at the
|
|
58
|
+
* end of {@link apply} (manual mode) — see the class docstring. Caller
|
|
59
|
+
* normally doesn't touch it directly.
|
|
42
60
|
* @type {[number, number, number]}
|
|
43
61
|
*/
|
|
44
62
|
previous_position: [number, number, number];
|
|
@@ -57,9 +75,10 @@ export class WakeFluidEffector extends AbstractFluidEffector {
|
|
|
57
75
|
*/
|
|
58
76
|
strength: number;
|
|
59
77
|
/**
|
|
60
|
-
* Snap {@link previous_position} to {@link position}
|
|
61
|
-
*
|
|
62
|
-
*
|
|
78
|
+
* Snap {@link previous_position} to {@link position} and mark the trail as
|
|
79
|
+
* needing a re-seed. Call after manual initial placement and after any
|
|
80
|
+
* teleport (in either driving mode) so the next splat doesn't sweep a wake
|
|
81
|
+
* across the jump.
|
|
63
82
|
*/
|
|
64
83
|
reset_trail(): void;
|
|
65
84
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WakeFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/WakeFluidEffector.js"],"names":[],"mappings":"AAQA
|
|
1
|
+
{"version":3,"file":"WakeFluidEffector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/WakeFluidEffector.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH;IAEI;;;;;OAKG;IACH,UAFU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEb;IAErB;;;;;;OAMG;IACH,mBAFU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEJ;IAE9B;;;;;OAKG;IACH,QAFU,MAAM,CAEL;IAEX;;;;;OAKG;IACH,UAFU,MAAM,CAEH;IAoBb;;;;;OAKG;IACH,oBAKC;;CAwOJ;sCA3VqC,4BAA4B"}
|
|
@@ -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;
|
|
@@ -172,7 +216,7 @@ export class WakeFluidEffector extends AbstractFluidEffector {
|
|
|
172
216
|
|
|
173
217
|
if (x_min > x_max || y_min > y_max || z_min > z_max) {
|
|
174
218
|
// Swept tube doesn't intersect the field at all.
|
|
175
|
-
this.#
|
|
219
|
+
this.#advance_trail_if_manual();
|
|
176
220
|
return;
|
|
177
221
|
}
|
|
178
222
|
|
|
@@ -225,14 +269,19 @@ export class WakeFluidEffector extends AbstractFluidEffector {
|
|
|
225
269
|
}
|
|
226
270
|
}
|
|
227
271
|
|
|
228
|
-
this.#
|
|
272
|
+
this.#advance_trail_if_manual();
|
|
229
273
|
}
|
|
230
274
|
|
|
231
275
|
/**
|
|
232
|
-
*
|
|
233
|
-
* one left off.
|
|
276
|
+
* Manual-mode trail bookkeeping: shift `previous_position` to `position` so
|
|
277
|
+
* the next apply() picks up where this one left off. Transform-managed
|
|
278
|
+
* effectors skip this — their trail advances in {@link syncFromTransform},
|
|
279
|
+
* keeping apply() pure so the same segment serves every field in the step.
|
|
234
280
|
*/
|
|
235
|
-
#
|
|
281
|
+
#advance_trail_if_manual() {
|
|
282
|
+
if (this.#transform_managed) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
236
285
|
this.previous_position[0] = this.position[0];
|
|
237
286
|
this.previous_position[1] = this.position[1];
|
|
238
287
|
this.previous_position[2] = this.position[2];
|
|
@@ -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"}
|