@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
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
import { BodyKind } from "../ecs/BodyKind.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
SBS_QX, SBS_QY, SBS_QZ, SBS_QW,
|
|
5
|
-
SBS_LV_X, SBS_LV_Y, SBS_LV_Z,
|
|
6
|
-
SBS_AV_X, SBS_AV_Y, SBS_AV_Z,
|
|
7
|
-
} from "../body/SolverBodyState.js";
|
|
8
|
-
|
|
9
|
-
const scratch_q = new Float64Array(4);
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Integrate `transform.position` and `transform.rotation` from the body's
|
|
13
|
-
* current linear and angular velocity over a step `dt`. Static bodies are
|
|
14
|
-
* not touched.
|
|
15
|
-
*
|
|
16
|
-
* The trailing six arguments are the body's *pseudo-velocity*: the
|
|
17
|
-
* position-pass output from the constraint solver (Catto split-impulse).
|
|
18
|
-
* Pseudo-velocity exists only inside the step — it's folded into the
|
|
19
|
-
* integration so the position update reflects depth correction, then
|
|
20
|
-
* implicitly discarded. The body's persistent `linearVelocity` /
|
|
21
|
-
* `angularVelocity` (which carry restitution + warm-start across steps)
|
|
22
|
-
* are never contaminated by it.
|
|
23
|
-
*
|
|
24
|
-
* Callers with no position-pass output should pass zeros for the six
|
|
25
|
-
* pseudo arguments — folding zero is free (one add per axis).
|
|
26
|
-
*
|
|
27
|
-
* KinematicPosition bodies are treated like Dynamic for the position
|
|
28
|
-
* update — if the gameplay code is driving them, their velocity is
|
|
29
|
-
* whatever the user wrote (typically zero); the step is effectively a
|
|
30
|
-
* no-op in that case. KinematicVelocity bodies advance under their
|
|
31
|
-
* user-set velocity.
|
|
32
|
-
*
|
|
33
|
-
* Persistent linear / angular velocity is read from the data-oriented
|
|
34
|
-
* {@link SolverBodyState} span (`ss` / `base`); the pose remains authoritative
|
|
35
|
-
* on the `Transform` and is written through `.set()` so its onChanged
|
|
36
|
-
* subscribers and the per-substep concave re-detection keep seeing the moved
|
|
37
|
-
* pose. The integrated orientation is mirrored back into the solver state so
|
|
38
|
-
* the next substep's impulse loop evaluates world inertia against the current
|
|
39
|
-
* frame.
|
|
40
|
-
*
|
|
41
|
-
* @param {Float64Array} ss solver-body-state data array
|
|
42
|
-
* @param {number} base `body_index * SBS_STRIDE`
|
|
43
|
-
* @param {RigidBody} rb
|
|
44
|
-
* @param {Transform} transform
|
|
45
|
-
* @param {number} dt
|
|
46
|
-
* @param {number} ps_lin_x pseudo-linear-velocity x (0 when no contacts)
|
|
47
|
-
* @param {number} ps_lin_y
|
|
48
|
-
* @param {number} ps_lin_z
|
|
49
|
-
* @param {number} ps_ang_x pseudo-angular-velocity x (0 when no contacts)
|
|
50
|
-
* @param {number} ps_ang_y
|
|
51
|
-
* @param {number} ps_ang_z
|
|
52
|
-
*/
|
|
53
|
-
export function integrate_position(
|
|
54
|
-
ss, base, rb, transform, dt,
|
|
55
|
-
ps_lin_x, ps_lin_y, ps_lin_z,
|
|
56
|
-
ps_ang_x, ps_ang_y, ps_ang_z,
|
|
57
|
-
) {
|
|
58
|
-
if (rb.kind === BodyKind.Static) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const p = transform.position;
|
|
63
|
-
|
|
64
|
-
// Combined integration velocity: persistent + pseudo. The pseudo
|
|
65
|
-
// contribution exists only for this step and never lands in the velocity.
|
|
66
|
-
const vx = ss[base + SBS_LV_X] + ps_lin_x;
|
|
67
|
-
const vy = ss[base + SBS_LV_Y] + ps_lin_y;
|
|
68
|
-
const vz = ss[base + SBS_LV_Z] + ps_lin_z;
|
|
69
|
-
|
|
70
|
-
// The write goes through .set() so Transform's onChanged subscribers
|
|
71
|
-
// (matrix recompose, parent/child sync, viewport position, fog-of-war
|
|
72
|
-
// reveal) fire — pose stays authoritative on the Transform.
|
|
73
|
-
p.set(
|
|
74
|
-
p[0] + vx * dt,
|
|
75
|
-
p[1] + vy * dt,
|
|
76
|
-
p[2] + vz * dt
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
const wx = ss[base + SBS_AV_X] + ps_ang_x;
|
|
80
|
-
const wy = ss[base + SBS_AV_Y] + ps_ang_y;
|
|
81
|
-
const wz = ss[base + SBS_AV_Z] + ps_ang_z;
|
|
82
|
-
if (wx !== 0 || wy !== 0 || wz !== 0) {
|
|
83
|
-
const q = transform.rotation;
|
|
84
|
-
|
|
85
|
-
scratch_q,
|
|
86
|
-
q[0], q[1], q[2], q[3],
|
|
87
|
-
wx, wy, wz,
|
|
88
|
-
dt
|
|
89
|
-
);
|
|
90
|
-
q.set(scratch_q[0], scratch_q[1], scratch_q[2], scratch_q[3]);
|
|
91
|
-
// Mirror the moved orientation into the solver state.
|
|
92
|
-
ss[base + SBS_QX] = scratch_q[0];
|
|
93
|
-
ss[base + SBS_QY] = scratch_q[1];
|
|
94
|
-
ss[base + SBS_QZ] = scratch_q[2];
|
|
95
|
-
ss[base + SBS_QW] = scratch_q[3];
|
|
96
|
-
}
|
|
97
|
-
}
|
|
1
|
+
import { BodyKind } from "../ecs/BodyKind.js";
|
|
2
|
+
import { quat3_integrate } from "../../../core/geom/3d/quaternion/quat3_integrate.js";
|
|
3
|
+
import {
|
|
4
|
+
SBS_QX, SBS_QY, SBS_QZ, SBS_QW,
|
|
5
|
+
SBS_LV_X, SBS_LV_Y, SBS_LV_Z,
|
|
6
|
+
SBS_AV_X, SBS_AV_Y, SBS_AV_Z,
|
|
7
|
+
} from "../body/SolverBodyState.js";
|
|
8
|
+
|
|
9
|
+
const scratch_q = new Float64Array(4);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Integrate `transform.position` and `transform.rotation` from the body's
|
|
13
|
+
* current linear and angular velocity over a step `dt`. Static bodies are
|
|
14
|
+
* not touched.
|
|
15
|
+
*
|
|
16
|
+
* The trailing six arguments are the body's *pseudo-velocity*: the
|
|
17
|
+
* position-pass output from the constraint solver (Catto split-impulse).
|
|
18
|
+
* Pseudo-velocity exists only inside the step — it's folded into the
|
|
19
|
+
* integration so the position update reflects depth correction, then
|
|
20
|
+
* implicitly discarded. The body's persistent `linearVelocity` /
|
|
21
|
+
* `angularVelocity` (which carry restitution + warm-start across steps)
|
|
22
|
+
* are never contaminated by it.
|
|
23
|
+
*
|
|
24
|
+
* Callers with no position-pass output should pass zeros for the six
|
|
25
|
+
* pseudo arguments — folding zero is free (one add per axis).
|
|
26
|
+
*
|
|
27
|
+
* KinematicPosition bodies are treated like Dynamic for the position
|
|
28
|
+
* update — if the gameplay code is driving them, their velocity is
|
|
29
|
+
* whatever the user wrote (typically zero); the step is effectively a
|
|
30
|
+
* no-op in that case. KinematicVelocity bodies advance under their
|
|
31
|
+
* user-set velocity.
|
|
32
|
+
*
|
|
33
|
+
* Persistent linear / angular velocity is read from the data-oriented
|
|
34
|
+
* {@link SolverBodyState} span (`ss` / `base`); the pose remains authoritative
|
|
35
|
+
* on the `Transform` and is written through `.set()` so its onChanged
|
|
36
|
+
* subscribers and the per-substep concave re-detection keep seeing the moved
|
|
37
|
+
* pose. The integrated orientation is mirrored back into the solver state so
|
|
38
|
+
* the next substep's impulse loop evaluates world inertia against the current
|
|
39
|
+
* frame.
|
|
40
|
+
*
|
|
41
|
+
* @param {Float64Array} ss solver-body-state data array
|
|
42
|
+
* @param {number} base `body_index * SBS_STRIDE`
|
|
43
|
+
* @param {RigidBody} rb
|
|
44
|
+
* @param {Transform} transform
|
|
45
|
+
* @param {number} dt
|
|
46
|
+
* @param {number} ps_lin_x pseudo-linear-velocity x (0 when no contacts)
|
|
47
|
+
* @param {number} ps_lin_y
|
|
48
|
+
* @param {number} ps_lin_z
|
|
49
|
+
* @param {number} ps_ang_x pseudo-angular-velocity x (0 when no contacts)
|
|
50
|
+
* @param {number} ps_ang_y
|
|
51
|
+
* @param {number} ps_ang_z
|
|
52
|
+
*/
|
|
53
|
+
export function integrate_position(
|
|
54
|
+
ss, base, rb, transform, dt,
|
|
55
|
+
ps_lin_x, ps_lin_y, ps_lin_z,
|
|
56
|
+
ps_ang_x, ps_ang_y, ps_ang_z,
|
|
57
|
+
) {
|
|
58
|
+
if (rb.kind === BodyKind.Static) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const p = transform.position;
|
|
63
|
+
|
|
64
|
+
// Combined integration velocity: persistent + pseudo. The pseudo
|
|
65
|
+
// contribution exists only for this step and never lands in the velocity.
|
|
66
|
+
const vx = ss[base + SBS_LV_X] + ps_lin_x;
|
|
67
|
+
const vy = ss[base + SBS_LV_Y] + ps_lin_y;
|
|
68
|
+
const vz = ss[base + SBS_LV_Z] + ps_lin_z;
|
|
69
|
+
|
|
70
|
+
// The write goes through .set() so Transform's onChanged subscribers
|
|
71
|
+
// (matrix recompose, parent/child sync, viewport position, fog-of-war
|
|
72
|
+
// reveal) fire — pose stays authoritative on the Transform.
|
|
73
|
+
p.set(
|
|
74
|
+
p[0] + vx * dt,
|
|
75
|
+
p[1] + vy * dt,
|
|
76
|
+
p[2] + vz * dt
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const wx = ss[base + SBS_AV_X] + ps_ang_x;
|
|
80
|
+
const wy = ss[base + SBS_AV_Y] + ps_ang_y;
|
|
81
|
+
const wz = ss[base + SBS_AV_Z] + ps_ang_z;
|
|
82
|
+
if (wx !== 0 || wy !== 0 || wz !== 0) {
|
|
83
|
+
const q = transform.rotation;
|
|
84
|
+
quat3_integrate(
|
|
85
|
+
scratch_q,
|
|
86
|
+
q[0], q[1], q[2], q[3],
|
|
87
|
+
wx, wy, wz,
|
|
88
|
+
dt
|
|
89
|
+
);
|
|
90
|
+
q.set(scratch_q[0], scratch_q[1], scratch_q[2], scratch_q[3]);
|
|
91
|
+
// Mirror the moved orientation into the solver state.
|
|
92
|
+
ss[base + SBS_QX] = scratch_q[0];
|
|
93
|
+
ss[base + SBS_QY] = scratch_q[1];
|
|
94
|
+
ss[base + SBS_QZ] = scratch_q[2];
|
|
95
|
+
ss[base + SBS_QW] = scratch_q[3];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Partitions this frame's awake dynamic bodies +
|
|
3
|
-
* into connected components ("islands") via union-find. The solver iterates
|
|
2
|
+
* Partitions this frame's awake dynamic bodies + contacting non-sensor
|
|
3
|
+
* manifolds into connected components ("islands") via union-find. The solver iterates
|
|
4
4
|
* each island independently (so impulses converge inside an island without
|
|
5
5
|
* waiting for global passes) and the sleep test will eventually use island
|
|
6
6
|
* granularity for atomic whole-island sleep.
|
|
@@ -20,7 +20,20 @@
|
|
|
20
20
|
* root of any component is the smallest body index of any of its members.
|
|
21
21
|
* - Islands are emitted sorted ascending by root index.
|
|
22
22
|
* - Bodies within an island are emitted sorted ascending by body index.
|
|
23
|
-
* - Contacts within an island are emitted sorted
|
|
23
|
+
* - Contacts within an island are emitted sorted by canonical ENTITY pair
|
|
24
|
+
* `(min(entA, entB), max(entA, entB))` — NOT by manifold slot id. Slot ids
|
|
25
|
+
* encode pair-discovery history (BVH traversal × awake-list order), which
|
|
26
|
+
* two engines holding identical body state need not share; entity ids are
|
|
27
|
+
* the cross-engine identity. Since the solver consumes contacts in this
|
|
28
|
+
* order, solve order — and therefore the trajectory — is a function of
|
|
29
|
+
* body state alone.
|
|
30
|
+
*
|
|
31
|
+
* Island ids themselves (and body order within an island, both index-based)
|
|
32
|
+
* may differ between two engines whose body slots were allocated in different
|
|
33
|
+
* historical order. That is deliberate: islands are disjoint and the solver's
|
|
34
|
+
* flat sweep writes zero deltas to shared static anchors, so cross-island
|
|
35
|
+
* order cannot affect outcomes; only WITHIN-island contact order can, and
|
|
36
|
+
* that is entity-keyed.
|
|
24
37
|
*
|
|
25
38
|
* Output layout is CSR-like — `body_offsets[i]..body_offsets[i+1]` indexes
|
|
26
39
|
* into `body_data` for island `i`, similarly for contacts.
|
|
@@ -36,6 +49,33 @@ export class IslandBuilder {
|
|
|
36
49
|
* @private
|
|
37
50
|
*/
|
|
38
51
|
private static __body_is_sensor;
|
|
52
|
+
/**
|
|
53
|
+
* In-place insertion sort of `data[start..end)` (manifold slot ids) by the
|
|
54
|
+
* canonical entity pair `(min(entA, entB), max(entA, entB))` of each slot.
|
|
55
|
+
* One slot per pair, so the key is unique within a frame and the order is
|
|
56
|
+
* total. Insertion sort: island contact slices are small (tens), the
|
|
57
|
+
* comparator is two table reads, and there is nothing to allocate.
|
|
58
|
+
*
|
|
59
|
+
* @private
|
|
60
|
+
* @param {Uint32Array} data
|
|
61
|
+
* @param {number} start
|
|
62
|
+
* @param {number} end exclusive
|
|
63
|
+
* @param {BodyStorage} storage
|
|
64
|
+
* @param {ManifoldStore} manifolds
|
|
65
|
+
*/
|
|
66
|
+
private static __sort_slots_by_entity_pair;
|
|
67
|
+
/**
|
|
68
|
+
* Smaller entity of a slot's body pair. Bodies of a contact emitted into
|
|
69
|
+
* an island are live (the slot passed `__island_of_slot`), so the entity
|
|
70
|
+
* lookups are valid this frame.
|
|
71
|
+
* @private
|
|
72
|
+
*/
|
|
73
|
+
private static __slot_ent_lo;
|
|
74
|
+
/**
|
|
75
|
+
* Larger entity of a slot's body pair.
|
|
76
|
+
* @private
|
|
77
|
+
*/
|
|
78
|
+
private static __slot_ent_hi;
|
|
39
79
|
/**
|
|
40
80
|
* Union-find parent table, indexed by body index (NOT packed id).
|
|
41
81
|
* Sized to `storage.high_water_mark` at `build` time; reallocated by
|
|
@@ -129,8 +169,8 @@ export class IslandBuilder {
|
|
|
129
169
|
*/
|
|
130
170
|
private __build_body_csr;
|
|
131
171
|
/**
|
|
132
|
-
* Fill `contact_offsets` + `contact_data` with
|
|
133
|
-
* slot ids grouped by island. A contact belongs to its dynamic
|
|
172
|
+
* Fill `contact_offsets` + `contact_data` with contacting non-sensor
|
|
173
|
+
* manifold slot ids grouped by island. A contact belongs to its dynamic
|
|
134
174
|
* participant's island (if both sides are dynamic they share an island
|
|
135
175
|
* by construction). Static-vs-static contacts are skipped.
|
|
136
176
|
* @private
|
|
@@ -139,9 +179,10 @@ export class IslandBuilder {
|
|
|
139
179
|
/**
|
|
140
180
|
* Resolve which island a manifold slot belongs to.
|
|
141
181
|
*
|
|
142
|
-
* Returns `-1` if the manifold is not touched this frame,
|
|
143
|
-
*
|
|
144
|
-
*
|
|
182
|
+
* Returns `-1` if the manifold is not touched this frame, holds no
|
|
183
|
+
* contacts (fat-AABB proximity only — nothing for the solver), is a
|
|
184
|
+
* sensor pair, or both bodies are non-dynamic (static-static, which the
|
|
185
|
+
* solver wouldn't act on anyway).
|
|
145
186
|
*
|
|
146
187
|
* @private
|
|
147
188
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IslandBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/island/IslandBuilder.js"],"names":[],"mappings":"AAOA
|
|
1
|
+
{"version":3,"file":"IslandBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/island/IslandBuilder.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH;IAyFI;;;;;OAKG;IACH,gCAOC;IA0ND;;;;;;;;;;;;;OAaG;IACH,2CAmBC;IAED;;;;;OAKG;IACH,6BAIC;IAED;;;OAGG;IACH,6BAIC;IApXG;;;;;OAKG;IACH,QAFU,WAAW,CAEY;IAEjC;;;;OAIG;IACH,gBAFU,UAAU,CAEoB;IAExC;;;OAGG;IACH,cAFU,MAAM,CAEK;IAErB;;;;OAIG;IACH,cAFU,WAAW,CAEiB;IAEtC;;;;OAIG;IACH,WAFU,WAAW,CAEe;IAEpC;;;OAGG;IACH,YAFU,MAAM,CAEG;IAEnB;;;;;OAKG;IACH,iBAFU,WAAW,CAEoB;IAEzC;;;;OAIG;IACH,cAFU,WAAW,CAEkB;IAEvC;;;OAGG;IACH,eAFU,MAAM,CAEM;IAEtB;;;;;OAKG;IACH,yBAA0C;IAE1C;;;;;OAKG;IACH,wBAA0C;IAE1C;;;;OAIG;IACH,kBAAmC;IAkBvC;;;;;;;;;;;OAWG;IACH,8DANW,WAAW,uBACX,OAAO,UACP,OAAO,QAqGjB;IAED;;;;OAIG;IACH,yBA+CC;IAED;;;;;;OAMG;IACH,4BA0CC;IA2DD;;;;;;;;;OASG;IACH,yBAsBC;IAID;;;OAGG;IACH,+BAQC;IAED;;;OAGG;IACH,uCAOC;IAED;;;OAGG;IACH,oCAIC;IAED;;;OAGG;IACH,uCAIC;CACJ"}
|
|
@@ -3,11 +3,11 @@ import { body_id_index } from "../body/BodyStorage.js";
|
|
|
3
3
|
import { BodyKind } from "../ecs/BodyKind.js";
|
|
4
4
|
import { is_sensor } from "../ecs/is_sensor.js";
|
|
5
5
|
import { JOINT_WORLD } from "../ecs/Joint.js";
|
|
6
|
-
import { uf_find, uf_init, uf_union } from "
|
|
6
|
+
import { uf_find, uf_init, uf_union } from "../../../core/collection/union-find/union_find.js";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Partitions this frame's awake dynamic bodies +
|
|
10
|
-
* into connected components ("islands") via union-find. The solver iterates
|
|
9
|
+
* Partitions this frame's awake dynamic bodies + contacting non-sensor
|
|
10
|
+
* manifolds into connected components ("islands") via union-find. The solver iterates
|
|
11
11
|
* each island independently (so impulses converge inside an island without
|
|
12
12
|
* waiting for global passes) and the sleep test will eventually use island
|
|
13
13
|
* granularity for atomic whole-island sleep.
|
|
@@ -27,7 +27,20 @@ import { uf_find, uf_init, uf_union } from "./union_find.js";
|
|
|
27
27
|
* root of any component is the smallest body index of any of its members.
|
|
28
28
|
* - Islands are emitted sorted ascending by root index.
|
|
29
29
|
* - Bodies within an island are emitted sorted ascending by body index.
|
|
30
|
-
* - Contacts within an island are emitted sorted
|
|
30
|
+
* - Contacts within an island are emitted sorted by canonical ENTITY pair
|
|
31
|
+
* `(min(entA, entB), max(entA, entB))` — NOT by manifold slot id. Slot ids
|
|
32
|
+
* encode pair-discovery history (BVH traversal × awake-list order), which
|
|
33
|
+
* two engines holding identical body state need not share; entity ids are
|
|
34
|
+
* the cross-engine identity. Since the solver consumes contacts in this
|
|
35
|
+
* order, solve order — and therefore the trajectory — is a function of
|
|
36
|
+
* body state alone.
|
|
37
|
+
*
|
|
38
|
+
* Island ids themselves (and body order within an island, both index-based)
|
|
39
|
+
* may differ between two engines whose body slots were allocated in different
|
|
40
|
+
* historical order. That is deliberate: islands are disjoint and the solver's
|
|
41
|
+
* flat sweep writes zero deltas to shared static anchors, so cross-island
|
|
42
|
+
* order cannot affect outcomes; only WITHIN-island contact order can, and
|
|
43
|
+
* that is entity-keyed.
|
|
31
44
|
*
|
|
32
45
|
* Output layout is CSR-like — `body_offsets[i]..body_offsets[i+1]` indexes
|
|
33
46
|
* into `body_data` for island `i`, similarly for contacts.
|
|
@@ -158,11 +171,16 @@ export class IslandBuilder {
|
|
|
158
171
|
const parent = this.parent;
|
|
159
172
|
uf_init(parent, hwm);
|
|
160
173
|
|
|
161
|
-
// --- Pass 1: union dynamic-dynamic pairs from
|
|
174
|
+
// --- Pass 1: union dynamic-dynamic pairs from CONTACTING non-sensor
|
|
175
|
+
// manifolds. The contact_count gate matters: a touched slot with
|
|
176
|
+
// zero contacts is mere fat-AABB proximity — unioning on it would
|
|
177
|
+
// couple hovering neighbours into one island (and a single moving
|
|
178
|
+
// body within ~10 cm would then hold a whole resting pile awake).
|
|
162
179
|
const live_count = manifolds.count;
|
|
163
180
|
for (let i = 0; i < live_count; i++) {
|
|
164
181
|
const slot = manifolds.live_at(i);
|
|
165
182
|
if (!manifolds.is_touched(slot)) continue;
|
|
183
|
+
if (manifolds.contact_count(slot) === 0) continue;
|
|
166
184
|
const idxA = body_id_index(manifolds.bodyA(slot));
|
|
167
185
|
const idxB = body_id_index(manifolds.bodyB(slot));
|
|
168
186
|
const rbA = bodies[idxA];
|
|
@@ -242,7 +260,7 @@ export class IslandBuilder {
|
|
|
242
260
|
}
|
|
243
261
|
|
|
244
262
|
this.__build_body_csr(storage, bodies, awake_count, root_count);
|
|
245
|
-
this.__build_contact_csr(manifolds, bodies, body_collider_lists, root_count);
|
|
263
|
+
this.__build_contact_csr(storage, manifolds, bodies, body_collider_lists, root_count);
|
|
246
264
|
}
|
|
247
265
|
|
|
248
266
|
/**
|
|
@@ -300,13 +318,13 @@ export class IslandBuilder {
|
|
|
300
318
|
}
|
|
301
319
|
|
|
302
320
|
/**
|
|
303
|
-
* Fill `contact_offsets` + `contact_data` with
|
|
304
|
-
* slot ids grouped by island. A contact belongs to its dynamic
|
|
321
|
+
* Fill `contact_offsets` + `contact_data` with contacting non-sensor
|
|
322
|
+
* manifold slot ids grouped by island. A contact belongs to its dynamic
|
|
305
323
|
* participant's island (if both sides are dynamic they share an island
|
|
306
324
|
* by construction). Static-vs-static contacts are skipped.
|
|
307
325
|
* @private
|
|
308
326
|
*/
|
|
309
|
-
__build_contact_csr(manifolds, bodies, body_collider_lists, island_count) {
|
|
327
|
+
__build_contact_csr(storage, manifolds, bodies, body_collider_lists, island_count) {
|
|
310
328
|
const offsets = this.contact_offsets;
|
|
311
329
|
for (let i = 0; i <= island_count; i++) offsets[i] = 0;
|
|
312
330
|
|
|
@@ -338,27 +356,88 @@ export class IslandBuilder {
|
|
|
338
356
|
data[cursors[isl]++] = slot;
|
|
339
357
|
}
|
|
340
358
|
|
|
341
|
-
// Sort each island's contact slice
|
|
359
|
+
// Sort each island's contact slice by canonical entity pair — the
|
|
360
|
+
// determinism contract's "solve order is a function of body state"
|
|
361
|
+
// clause. See the class doc.
|
|
342
362
|
for (let i = 0; i < island_count; i++) {
|
|
343
363
|
const start = offsets[i];
|
|
344
364
|
const end = offsets[i + 1];
|
|
345
365
|
if (end - start > 1) {
|
|
346
|
-
|
|
366
|
+
IslandBuilder.__sort_slots_by_entity_pair(data, start, end, storage, manifolds);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* In-place insertion sort of `data[start..end)` (manifold slot ids) by the
|
|
373
|
+
* canonical entity pair `(min(entA, entB), max(entA, entB))` of each slot.
|
|
374
|
+
* One slot per pair, so the key is unique within a frame and the order is
|
|
375
|
+
* total. Insertion sort: island contact slices are small (tens), the
|
|
376
|
+
* comparator is two table reads, and there is nothing to allocate.
|
|
377
|
+
*
|
|
378
|
+
* @private
|
|
379
|
+
* @param {Uint32Array} data
|
|
380
|
+
* @param {number} start
|
|
381
|
+
* @param {number} end exclusive
|
|
382
|
+
* @param {BodyStorage} storage
|
|
383
|
+
* @param {ManifoldStore} manifolds
|
|
384
|
+
*/
|
|
385
|
+
static __sort_slots_by_entity_pair(data, start, end, storage, manifolds) {
|
|
386
|
+
for (let i = start + 1; i < end; i++) {
|
|
387
|
+
const slot = data[i];
|
|
388
|
+
const lo = IslandBuilder.__slot_ent_lo(slot, storage, manifolds);
|
|
389
|
+
const hi = IslandBuilder.__slot_ent_hi(slot, storage, manifolds);
|
|
390
|
+
let j = i - 1;
|
|
391
|
+
while (j >= start) {
|
|
392
|
+
const other = data[j];
|
|
393
|
+
const o_lo = IslandBuilder.__slot_ent_lo(other, storage, manifolds);
|
|
394
|
+
if (o_lo < lo) break;
|
|
395
|
+
if (o_lo === lo) {
|
|
396
|
+
const o_hi = IslandBuilder.__slot_ent_hi(other, storage, manifolds);
|
|
397
|
+
if (o_hi <= hi) break;
|
|
398
|
+
}
|
|
399
|
+
data[j + 1] = other;
|
|
400
|
+
j--;
|
|
347
401
|
}
|
|
402
|
+
data[j + 1] = slot;
|
|
348
403
|
}
|
|
349
404
|
}
|
|
350
405
|
|
|
406
|
+
/**
|
|
407
|
+
* Smaller entity of a slot's body pair. Bodies of a contact emitted into
|
|
408
|
+
* an island are live (the slot passed `__island_of_slot`), so the entity
|
|
409
|
+
* lookups are valid this frame.
|
|
410
|
+
* @private
|
|
411
|
+
*/
|
|
412
|
+
static __slot_ent_lo(slot, storage, manifolds) {
|
|
413
|
+
const ea = storage.entity_at(body_id_index(manifolds.bodyA(slot)));
|
|
414
|
+
const eb = storage.entity_at(body_id_index(manifolds.bodyB(slot)));
|
|
415
|
+
return ea < eb ? ea : eb;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Larger entity of a slot's body pair.
|
|
420
|
+
* @private
|
|
421
|
+
*/
|
|
422
|
+
static __slot_ent_hi(slot, storage, manifolds) {
|
|
423
|
+
const ea = storage.entity_at(body_id_index(manifolds.bodyA(slot)));
|
|
424
|
+
const eb = storage.entity_at(body_id_index(manifolds.bodyB(slot)));
|
|
425
|
+
return ea > eb ? ea : eb;
|
|
426
|
+
}
|
|
427
|
+
|
|
351
428
|
/**
|
|
352
429
|
* Resolve which island a manifold slot belongs to.
|
|
353
430
|
*
|
|
354
|
-
* Returns `-1` if the manifold is not touched this frame,
|
|
355
|
-
*
|
|
356
|
-
*
|
|
431
|
+
* Returns `-1` if the manifold is not touched this frame, holds no
|
|
432
|
+
* contacts (fat-AABB proximity only — nothing for the solver), is a
|
|
433
|
+
* sensor pair, or both bodies are non-dynamic (static-static, which the
|
|
434
|
+
* solver wouldn't act on anyway).
|
|
357
435
|
*
|
|
358
436
|
* @private
|
|
359
437
|
*/
|
|
360
438
|
__island_of_slot(manifolds, slot, bodies, body_collider_lists) {
|
|
361
439
|
if (!manifolds.is_touched(slot)) return -1;
|
|
440
|
+
if (manifolds.contact_count(slot) === 0) return -1;
|
|
362
441
|
const idxA = body_id_index(manifolds.bodyA(slot));
|
|
363
442
|
const idxB = body_id_index(manifolds.bodyB(slot));
|
|
364
443
|
const rbA = bodies[idxA];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box_box_manifold.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/box_box_manifold.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"box_box_manifold.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/narrowphase/box_box_manifold.js"],"names":[],"mappings":"AA6JA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,sCAvBW,MAAM,EAAE,GAAC,YAAY,MACrB,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,GACJ,OAAO,CA8enB;AA9lBD;;;GAGG;AACH,iCAFU,MAAM,CAEoD"}
|