@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
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* - {@link IsSensor }: contacts are detected and events fired, but no impulses are
|
|
5
5
|
* applied. Useful for triggers.
|
|
6
|
-
* - {@link LockRotX }/{@link LockRotY }/{@link LockRotZ }: the corresponding
|
|
7
|
-
* degree of freedom is fixed
|
|
8
|
-
* component
|
|
6
|
+
* - {@link LockRotX }/{@link LockRotY }/{@link LockRotZ }: the corresponding
|
|
7
|
+
* BODY-LOCAL angular degree of freedom is fixed: the matching inverse-inertia
|
|
8
|
+
* component is zeroed in the solver gather and in `applyImpulseAt`, so no
|
|
9
|
+
* contact, joint, or user impulse can rotate the body about that local axis.
|
|
10
|
+
* Locking does not cancel a pre-existing angular velocity about the axis —
|
|
11
|
+
* zero `angularVelocity` yourself when locking a body mid-spin.
|
|
9
12
|
* - {@link DisableSleep }: this body never enters the sleeping set. Bodies near it
|
|
10
13
|
* may still sleep when stable.
|
|
11
14
|
* - {@link CCD }: opt-in continuous collision detection. After the solver, the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RigidBodyFlags.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/RigidBodyFlags.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RigidBodyFlags.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/RigidBodyFlags.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;6BAoBU,MAAM"}
|
|
@@ -1,28 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bit-flags carried on {@link RigidBody}.
|
|
3
|
-
*
|
|
4
|
-
* - {@link IsSensor}: contacts are detected and events fired, but no impulses are
|
|
5
|
-
* applied. Useful for triggers.
|
|
6
|
-
* - {@link LockRotX}/{@link LockRotY}/{@link LockRotZ}: the corresponding
|
|
7
|
-
* degree of freedom is fixed
|
|
8
|
-
* component
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Bit-flags carried on {@link RigidBody}.
|
|
3
|
+
*
|
|
4
|
+
* - {@link IsSensor}: contacts are detected and events fired, but no impulses are
|
|
5
|
+
* applied. Useful for triggers.
|
|
6
|
+
* - {@link LockRotX}/{@link LockRotY}/{@link LockRotZ}: the corresponding
|
|
7
|
+
* BODY-LOCAL angular degree of freedom is fixed: the matching inverse-inertia
|
|
8
|
+
* component is zeroed in the solver gather and in `applyImpulseAt`, so no
|
|
9
|
+
* contact, joint, or user impulse can rotate the body about that local axis.
|
|
10
|
+
* Locking does not cancel a pre-existing angular velocity about the axis —
|
|
11
|
+
* zero `angularVelocity` yourself when locking a body mid-spin.
|
|
12
|
+
* - {@link DisableSleep}: this body never enters the sleeping set. Bodies near it
|
|
13
|
+
* may still sleep when stable.
|
|
14
|
+
* - {@link CCD}: opt-in continuous collision detection. After the solver, the
|
|
15
|
+
* body's net step translation is shape-cast against the broadphase and the
|
|
16
|
+
* body is stopped at the first blocker, so a fast mover can't tunnel through
|
|
17
|
+
* thin geometry between discrete steps. Off by default — it costs one swept
|
|
18
|
+
* query per fast-moving flagged body per step. See `ccd/linear_sweep.js`.
|
|
19
|
+
*
|
|
20
|
+
* @readonly
|
|
21
|
+
* @enum {number}
|
|
22
|
+
*/
|
|
23
|
+
export const RigidBodyFlags = {
|
|
24
|
+
None: 0,
|
|
25
|
+
IsSensor: 1,
|
|
26
|
+
LockRotX: 2,
|
|
27
|
+
LockRotY: 4,
|
|
28
|
+
LockRotZ: 8,
|
|
29
|
+
DisableSleep: 16,
|
|
30
|
+
CCD: 32,
|
|
31
|
+
};
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Binary serialization for {@link RigidBody}.
|
|
3
3
|
*
|
|
4
|
-
* Only the
|
|
5
|
-
* (`_bodyId`,
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Only the persistent fields are written. World-instance-tied runtime state
|
|
5
|
+
* (`_bodyId`, sleep-group links, accumulated force/torque — the accumulators
|
|
6
|
+
* are consumed within the tick and are zero at any step boundary) is owned by
|
|
7
|
+
* the {@link PhysicsSystem} and recomputed on link.
|
|
8
|
+
*
|
|
9
|
+
* v1 adds `sleepState` + `sleep_timer`: sleep progress is BODY state, not
|
|
10
|
+
* world state. A reconstructed world (snapshot restore, replicated late-join)
|
|
11
|
+
* must restore sleeping bodies asleep and half-drowsy bodies half-drowsy, or
|
|
12
|
+
* it wakes/sleeps on a different schedule than the original and diverges —
|
|
13
|
+
* the reconstruction-determinism contract. {@link PhysicsSystem#link} honours
|
|
14
|
+
* the restored value. v0 streams upgrade via
|
|
15
|
+
* {@link RigidBodySerializationUpgrader_0_1}.
|
|
8
16
|
*/
|
|
9
17
|
export class RigidBodySerializationAdapter extends BinaryClassSerializationAdapter<any> {
|
|
10
18
|
constructor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RigidBodySerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/RigidBodySerializationAdapter.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"RigidBodySerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/RigidBodySerializationAdapter.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH;;IAEI,wBAAkB;IAClB,gBAAY;IAEZ;;;;OAIG;IACH,uCAFW,SAAS,QA6BnB;IAED;;;;OAIG;IACH,yCAFW,SAAS,QAoCnB;CACJ;gDAlG+C,6DAA6D;0BACnF,gBAAgB"}
|
|
@@ -4,15 +4,23 @@ import { RigidBody } from "./RigidBody.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* Binary serialization for {@link RigidBody}.
|
|
6
6
|
*
|
|
7
|
-
* Only the
|
|
8
|
-
* (`_bodyId`,
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Only the persistent fields are written. World-instance-tied runtime state
|
|
8
|
+
* (`_bodyId`, sleep-group links, accumulated force/torque — the accumulators
|
|
9
|
+
* are consumed within the tick and are zero at any step boundary) is owned by
|
|
10
|
+
* the {@link PhysicsSystem} and recomputed on link.
|
|
11
|
+
*
|
|
12
|
+
* v1 adds `sleepState` + `sleep_timer`: sleep progress is BODY state, not
|
|
13
|
+
* world state. A reconstructed world (snapshot restore, replicated late-join)
|
|
14
|
+
* must restore sleeping bodies asleep and half-drowsy bodies half-drowsy, or
|
|
15
|
+
* it wakes/sleeps on a different schedule than the original and diverges —
|
|
16
|
+
* the reconstruction-determinism contract. {@link PhysicsSystem#link} honours
|
|
17
|
+
* the restored value. v0 streams upgrade via
|
|
18
|
+
* {@link RigidBodySerializationUpgrader_0_1}.
|
|
11
19
|
*/
|
|
12
20
|
export class RigidBodySerializationAdapter extends BinaryClassSerializationAdapter {
|
|
13
21
|
|
|
14
22
|
klass = RigidBody;
|
|
15
|
-
version =
|
|
23
|
+
version = 1;
|
|
16
24
|
|
|
17
25
|
/**
|
|
18
26
|
*
|
|
@@ -43,6 +51,9 @@ export class RigidBodySerializationAdapter extends BinaryClassSerializationAdapt
|
|
|
43
51
|
buffer.writeUint32(value.layer >>> 0);
|
|
44
52
|
buffer.writeUint32(value.mask >>> 0);
|
|
45
53
|
buffer.writeUint32(value.flags >>> 0);
|
|
54
|
+
|
|
55
|
+
buffer.writeUint8(value.sleepState);
|
|
56
|
+
buffer.writeFloat64(value.sleep_timer);
|
|
46
57
|
}
|
|
47
58
|
|
|
48
59
|
/**
|
|
@@ -81,5 +92,8 @@ export class RigidBodySerializationAdapter extends BinaryClassSerializationAdapt
|
|
|
81
92
|
value.layer = buffer.readUint32() | 0;
|
|
82
93
|
value.mask = buffer.readUint32() | 0;
|
|
83
94
|
value.flags = buffer.readUint32() | 0;
|
|
95
|
+
|
|
96
|
+
value.sleepState = buffer.readUint8();
|
|
97
|
+
value.sleep_timer = buffer.readFloat64();
|
|
84
98
|
}
|
|
85
99
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0 → v1: appends the sleep fields (`sleepState`, `sleep_timer`) that v1 of
|
|
3
|
+
* {@link RigidBodySerializationAdapter} persists. A v0 stream predates sleep
|
|
4
|
+
* persistence, so its bodies restore awake with a zero timer — exactly the
|
|
5
|
+
* pre-upgrade behaviour.
|
|
6
|
+
*/
|
|
7
|
+
export class RigidBodySerializationUpgrader_0_1 extends BinaryClassUpgrader {
|
|
8
|
+
}
|
|
9
|
+
import { BinaryClassUpgrader } from "../../ecs/storage/binary/BinaryClassUpgrader.js";
|
|
10
|
+
//# sourceMappingURL=RigidBodySerializationUpgrader_0_1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RigidBodySerializationUpgrader_0_1.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH;CA4BC;oCApCmC,iDAAiD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BinaryClassUpgrader } from "../../ecs/storage/binary/BinaryClassUpgrader.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* v0 → v1: appends the sleep fields (`sleepState`, `sleep_timer`) that v1 of
|
|
5
|
+
* {@link RigidBodySerializationAdapter} persists. A v0 stream predates sleep
|
|
6
|
+
* persistence, so its bodies restore awake with a zero timer — exactly the
|
|
7
|
+
* pre-upgrade behaviour.
|
|
8
|
+
*/
|
|
9
|
+
export class RigidBodySerializationUpgrader_0_1 extends BinaryClassUpgrader {
|
|
10
|
+
|
|
11
|
+
__startVersion = 0;
|
|
12
|
+
__targetVersion = 1;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param {BinaryBuffer} source
|
|
17
|
+
* @param {BinaryBuffer} target
|
|
18
|
+
*/
|
|
19
|
+
upgrade(source, target) {
|
|
20
|
+
// v0 layout: kind u8, then 13 f64 (linearVelocity ×3,
|
|
21
|
+
// angularVelocity ×3, mass, inverseInertiaLocal ×3, linearDamping,
|
|
22
|
+
// angularDamping, gravityScale), then 3 u32 (layer, mask, flags).
|
|
23
|
+
target.writeUint8(source.readUint8());
|
|
24
|
+
|
|
25
|
+
for (let i = 0; i < 13; i++) {
|
|
26
|
+
target.writeFloat64(source.readFloat64());
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
target.writeUint32(source.readUint32());
|
|
30
|
+
target.writeUint32(source.readUint32());
|
|
31
|
+
target.writeUint32(source.readUint32());
|
|
32
|
+
|
|
33
|
+
// New in v1: sleepState (Awake = 0), sleep_timer.
|
|
34
|
+
target.writeUint8(0);
|
|
35
|
+
target.writeFloat64(0);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-build tripwire: scan post-step physics state for non-finite values
|
|
3
|
+
* (NaN / ±Infinity) and describe the first offender, or return "" when clean.
|
|
4
|
+
*
|
|
5
|
+
* Called from `PhysicsSystem.fixedUpdate` behind an `assert.*` call (compiled
|
|
6
|
+
* out of production bundles), so the O(awake bodies + live contacts) sweep
|
|
7
|
+
* costs nothing in prod. The sweep exists because a NaN that enters the
|
|
8
|
+
* pipeline is self-concealing: NaN fails every comparison, so it passes depth
|
|
9
|
+
* early-outs, wins "deepest candidate" reductions (`min_d2` stays Infinity),
|
|
10
|
+
* and never satisfies the sleep test — it propagates silently instead of
|
|
11
|
+
* failing loudly at the source.
|
|
12
|
+
*
|
|
13
|
+
* Coverage:
|
|
14
|
+
* - every AWAKE body's linear/angular velocity and Transform pose. Sleeping
|
|
15
|
+
* bodies froze with state this sweep already validated (a non-finite
|
|
16
|
+
* velocity can never pass the sleep threshold comparison), so awake-only
|
|
17
|
+
* is exhaustive across steps.
|
|
18
|
+
* - every live manifold slot's contact lanes (geometry, depth, feature id,
|
|
19
|
+
* impulses, material) for its current `contact_count`.
|
|
20
|
+
*
|
|
21
|
+
* @param {PhysicsSystem} system
|
|
22
|
+
* @returns {string} "" when clean, else a description of the first non-finite value
|
|
23
|
+
*
|
|
24
|
+
* @author Alex Goldring
|
|
25
|
+
* @copyright Company Named Limited (c) 2026
|
|
26
|
+
*/
|
|
27
|
+
export function find_non_finite_physics_state(system: PhysicsSystem): string;
|
|
28
|
+
//# sourceMappingURL=find_non_finite_physics_state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find_non_finite_physics_state.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/find_non_finite_physics_state.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,sEALa,MAAM,CAoDlB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { CONTACT_STRIDE } from "../contact/ManifoldStore.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Dev-build tripwire: scan post-step physics state for non-finite values
|
|
5
|
+
* (NaN / ±Infinity) and describe the first offender, or return "" when clean.
|
|
6
|
+
*
|
|
7
|
+
* Called from `PhysicsSystem.fixedUpdate` behind an `assert.*` call (compiled
|
|
8
|
+
* out of production bundles), so the O(awake bodies + live contacts) sweep
|
|
9
|
+
* costs nothing in prod. The sweep exists because a NaN that enters the
|
|
10
|
+
* pipeline is self-concealing: NaN fails every comparison, so it passes depth
|
|
11
|
+
* early-outs, wins "deepest candidate" reductions (`min_d2` stays Infinity),
|
|
12
|
+
* and never satisfies the sleep test — it propagates silently instead of
|
|
13
|
+
* failing loudly at the source.
|
|
14
|
+
*
|
|
15
|
+
* Coverage:
|
|
16
|
+
* - every AWAKE body's linear/angular velocity and Transform pose. Sleeping
|
|
17
|
+
* bodies froze with state this sweep already validated (a non-finite
|
|
18
|
+
* velocity can never pass the sleep threshold comparison), so awake-only
|
|
19
|
+
* is exhaustive across steps.
|
|
20
|
+
* - every live manifold slot's contact lanes (geometry, depth, feature id,
|
|
21
|
+
* impulses, material) for its current `contact_count`.
|
|
22
|
+
*
|
|
23
|
+
* @param {PhysicsSystem} system
|
|
24
|
+
* @returns {string} "" when clean, else a description of the first non-finite value
|
|
25
|
+
*
|
|
26
|
+
* @author Alex Goldring
|
|
27
|
+
* @copyright Company Named Limited (c) 2026
|
|
28
|
+
*/
|
|
29
|
+
export function find_non_finite_physics_state(system) {
|
|
30
|
+
const storage = system.storage;
|
|
31
|
+
const bodies = system.__bodies;
|
|
32
|
+
const transforms = system.__transforms;
|
|
33
|
+
|
|
34
|
+
const awake = storage.awake_count;
|
|
35
|
+
for (let i = 0; i < awake; i++) {
|
|
36
|
+
const idx = storage.awake_at(i);
|
|
37
|
+
const rb = bodies[idx];
|
|
38
|
+
const tr = transforms[idx];
|
|
39
|
+
|
|
40
|
+
const lv = rb.linearVelocity;
|
|
41
|
+
if (!Number.isFinite(lv[0] + lv[1] + lv[2])) {
|
|
42
|
+
return `body[${idx}].linearVelocity = (${lv[0]}, ${lv[1]}, ${lv[2]})`;
|
|
43
|
+
}
|
|
44
|
+
const av = rb.angularVelocity;
|
|
45
|
+
if (!Number.isFinite(av[0] + av[1] + av[2])) {
|
|
46
|
+
return `body[${idx}].angularVelocity = (${av[0]}, ${av[1]}, ${av[2]})`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const p = tr.position;
|
|
50
|
+
if (!Number.isFinite(p.x + p.y + p.z)) {
|
|
51
|
+
return `body[${idx}].position = (${p.x}, ${p.y}, ${p.z})`;
|
|
52
|
+
}
|
|
53
|
+
const q = tr.rotation;
|
|
54
|
+
if (!Number.isFinite(q.x + q.y + q.z + q.w)) {
|
|
55
|
+
return `body[${idx}].rotation = (${q.x}, ${q.y}, ${q.z}, ${q.w})`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const manifolds = system.manifolds;
|
|
60
|
+
const data = manifolds.data_buffer;
|
|
61
|
+
const live = manifolds.count;
|
|
62
|
+
for (let i = 0; i < live; i++) {
|
|
63
|
+
const slot = manifolds.live_at(i);
|
|
64
|
+
const lanes = manifolds.contact_count(slot) * CONTACT_STRIDE;
|
|
65
|
+
const off = manifolds.slot_data_offset(slot);
|
|
66
|
+
for (let k = 0; k < lanes; k++) {
|
|
67
|
+
const v = data[off + k];
|
|
68
|
+
if (!Number.isFinite(v)) {
|
|
69
|
+
return `manifold slot ${slot} (bodies ${manifolds.bodyA(slot)}/${manifolds.bodyB(slot)})`
|
|
70
|
+
+ ` contact ${(k / CONTACT_STRIDE) | 0} lane ${k % CONTACT_STRIDE} = ${v}`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return "";
|
|
76
|
+
}
|
|
@@ -43,5 +43,16 @@ export class ContactEventBuffer {
|
|
|
43
43
|
entityA_at(i: any): number;
|
|
44
44
|
entityB_at(i: any): number;
|
|
45
45
|
slot_at(i: any): number;
|
|
46
|
+
/**
|
|
47
|
+
* Sort events in place by `(entityA, entityB, kind)` ascending. The diff
|
|
48
|
+
* pass emits in manifold live-slot order — slot ALLOCATION history, which
|
|
49
|
+
* two engines holding identical body state need not share — so consumers
|
|
50
|
+
* (the dispatch pass → gameplay) must see a state-derived order instead.
|
|
51
|
+
* One event per pair per frame makes the entity pair a unique key; the
|
|
52
|
+
* kind tie-break only matters for records carrying `-1` (freed-body)
|
|
53
|
+
* entities. In-place insertion sort over the 4-int records: event counts
|
|
54
|
+
* are small and per-frame, and there is nothing to allocate.
|
|
55
|
+
*/
|
|
56
|
+
sort_canonical(): void;
|
|
46
57
|
}
|
|
47
58
|
//# sourceMappingURL=ContactEventBuffer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactEventBuffer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/events/ContactEventBuffer.js"],"names":[],"mappings":";;;+BAGU,MAAM;;;;;;AAoBhB;;;;;;;;;;;GAWG;AACH;IACI;;OAEG;IACH,+BAFW,MAAM,EAOhB;IAJG,mBAA+C;IAC/C,gBAAgB;IAEhB,mBAA4D;IAGhE;;OAEG;IACH,oBAEC;IAED,cAEC;IAED;;;;;OAKG;IACH,WALW,gBAAgB,GAAC,MAAM,WACvB,MAAM,WACN,MAAM,QACN,MAAM,QAgBhB;IAED,wBAAoD;IACpD,2BAA2D;IAC3D,2BAA2D;IAC3D,wBAAwD;
|
|
1
|
+
{"version":3,"file":"ContactEventBuffer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/events/ContactEventBuffer.js"],"names":[],"mappings":";;;+BAGU,MAAM;;;;;;AAoBhB;;;;;;;;;;;GAWG;AACH;IACI;;OAEG;IACH,+BAFW,MAAM,EAOhB;IAJG,mBAA+C;IAC/C,gBAAgB;IAEhB,mBAA4D;IAGhE;;OAEG;IACH,oBAEC;IAED,cAEC;IAED;;;;;OAKG;IACH,WALW,gBAAgB,GAAC,MAAM,WACvB,MAAM,WACN,MAAM,QACN,MAAM,QAgBhB;IAED,wBAAoD;IACpD,2BAA2D;IAC3D,2BAA2D;IAC3D,wBAAwD;IAExD;;;;;;;;;OASG;IACH,uBA4BC;CACJ"}
|
|
@@ -81,4 +81,44 @@ export class ContactEventBuffer {
|
|
|
81
81
|
entityA_at(i) { return this.__data[i * EVENT_STRIDE + 1]; }
|
|
82
82
|
entityB_at(i) { return this.__data[i * EVENT_STRIDE + 2]; }
|
|
83
83
|
slot_at(i) { return this.__data[i * EVENT_STRIDE + 3]; }
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Sort events in place by `(entityA, entityB, kind)` ascending. The diff
|
|
87
|
+
* pass emits in manifold live-slot order — slot ALLOCATION history, which
|
|
88
|
+
* two engines holding identical body state need not share — so consumers
|
|
89
|
+
* (the dispatch pass → gameplay) must see a state-derived order instead.
|
|
90
|
+
* One event per pair per frame makes the entity pair a unique key; the
|
|
91
|
+
* kind tie-break only matters for records carrying `-1` (freed-body)
|
|
92
|
+
* entities. In-place insertion sort over the 4-int records: event counts
|
|
93
|
+
* are small and per-frame, and there is nothing to allocate.
|
|
94
|
+
*/
|
|
95
|
+
sort_canonical() {
|
|
96
|
+
const d = this.__data;
|
|
97
|
+
const n = this.__count;
|
|
98
|
+
for (let i = 1; i < n; i++) {
|
|
99
|
+
const off = i * EVENT_STRIDE;
|
|
100
|
+
const k = d[off], ea = d[off + 1], eb = d[off + 2], sl = d[off + 3];
|
|
101
|
+
let j = i - 1;
|
|
102
|
+
while (j >= 0) {
|
|
103
|
+
const joff = j * EVENT_STRIDE;
|
|
104
|
+
const jea = d[joff + 1];
|
|
105
|
+
if (jea < ea) break;
|
|
106
|
+
if (jea === ea) {
|
|
107
|
+
const jeb = d[joff + 2];
|
|
108
|
+
if (jeb < eb) break;
|
|
109
|
+
if (jeb === eb && d[joff] <= k) break;
|
|
110
|
+
}
|
|
111
|
+
d[joff + EVENT_STRIDE] = d[joff];
|
|
112
|
+
d[joff + EVENT_STRIDE + 1] = jea;
|
|
113
|
+
d[joff + EVENT_STRIDE + 2] = d[joff + 2];
|
|
114
|
+
d[joff + EVENT_STRIDE + 3] = d[joff + 3];
|
|
115
|
+
j--;
|
|
116
|
+
}
|
|
117
|
+
const dest = (j + 1) * EVENT_STRIDE;
|
|
118
|
+
d[dest] = k;
|
|
119
|
+
d[dest + 1] = ea;
|
|
120
|
+
d[dest + 2] = eb;
|
|
121
|
+
d[dest + 3] = sl;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
84
124
|
}
|
|
@@ -1,21 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Walk every live manifold and produce a contact event for each pair whose
|
|
3
|
-
*
|
|
3
|
+
* CONTACT state changed (or persisted) since the previous step:
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* !
|
|
8
|
-
* !
|
|
9
|
-
* advance_frame's grace counter)
|
|
5
|
+
* has_contacts + !had_contacts → ContactBegin
|
|
6
|
+
* has_contacts + had_contacts → ContactStay
|
|
7
|
+
* !has_contacts + had_contacts → ContactEnd
|
|
8
|
+
* !has_contacts + !had_contacts → no event
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* "has contacts" means the slot holds narrowphase contacts THIS frame
|
|
11
|
+
* (`contact_count > 0`) for a pair the broadphase touched; a pair that is
|
|
12
|
+
* merely inside the other's fat AABB (touched, zero contacts) produces no
|
|
13
|
+
* events — proximity is not contact. For an UNTOUCHED slot the stored
|
|
14
|
+
* contacts are stale (the pair left broadphase range or a body was removed),
|
|
15
|
+
* so it counts as contact-less and fires End once if it had contacts.
|
|
13
16
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* DORMANT pairs ({@link ManifoldStore#is_dormant}: both bodies alive and
|
|
18
|
+
* asleep) are skipped entirely: a stack falling asleep emits no End, and
|
|
19
|
+
* waking resumes with Stay — the events track physical contact, which never
|
|
20
|
+
* changed while the pair slept.
|
|
21
|
+
*
|
|
22
|
+
* MUST be called BEFORE {@link ManifoldStore#advance_frame} so the touched /
|
|
23
|
+
* had-contacts bits still reflect the just-finished step.
|
|
24
|
+
*
|
|
25
|
+
* Output is ENTITY-CANONICAL, both per event and across the buffer: each
|
|
26
|
+
* event's `(entityA, entityB)` is the pair's `(min, max)` by entity id —
|
|
27
|
+
* NOT the manifold's A/B, which follows packed-body-id order, i.e. slot
|
|
28
|
+
* allocation history — and the buffer is sorted by that key. Gameplay
|
|
29
|
+
* consumes these events through the action log, so both the pair identity
|
|
30
|
+
* and the within-frame delivery order must be derivable from body state
|
|
31
|
+
* alone: two engines holding identical bodies (same entities) emit
|
|
32
|
+
* identical event sequences regardless of how their manifold slots were
|
|
33
|
+
* allocated. The dispatch pass mirrors the contact normal whenever the
|
|
34
|
+
* canonicalization swapped the pair, preserving the "normal points from
|
|
35
|
+
* entityB toward entityA" payload convention.
|
|
19
36
|
*
|
|
20
37
|
* @param {ManifoldStore} manifolds
|
|
21
38
|
* @param {BodyStorage} storage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff_manifolds.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/events/diff_manifolds.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"diff_manifolds.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/events/diff_manifolds.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qHA2CC"}
|
|
@@ -1,50 +1,87 @@
|
|
|
1
|
-
import { body_id_index } from "../body/BodyStorage.js";
|
|
2
|
-
import { ContactEventKind } from "./ContactEventBuffer.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Walk every live manifold and produce a contact event for each pair whose
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* !
|
|
11
|
-
* !
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* @
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
1
|
+
import { body_id_index } from "../body/BodyStorage.js";
|
|
2
|
+
import { ContactEventKind } from "./ContactEventBuffer.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Walk every live manifold and produce a contact event for each pair whose
|
|
6
|
+
* CONTACT state changed (or persisted) since the previous step:
|
|
7
|
+
*
|
|
8
|
+
* has_contacts + !had_contacts → ContactBegin
|
|
9
|
+
* has_contacts + had_contacts → ContactStay
|
|
10
|
+
* !has_contacts + had_contacts → ContactEnd
|
|
11
|
+
* !has_contacts + !had_contacts → no event
|
|
12
|
+
*
|
|
13
|
+
* "has contacts" means the slot holds narrowphase contacts THIS frame
|
|
14
|
+
* (`contact_count > 0`) for a pair the broadphase touched; a pair that is
|
|
15
|
+
* merely inside the other's fat AABB (touched, zero contacts) produces no
|
|
16
|
+
* events — proximity is not contact. For an UNTOUCHED slot the stored
|
|
17
|
+
* contacts are stale (the pair left broadphase range or a body was removed),
|
|
18
|
+
* so it counts as contact-less and fires End once if it had contacts.
|
|
19
|
+
*
|
|
20
|
+
* DORMANT pairs ({@link ManifoldStore#is_dormant}: both bodies alive and
|
|
21
|
+
* asleep) are skipped entirely: a stack falling asleep emits no End, and
|
|
22
|
+
* waking resumes with Stay — the events track physical contact, which never
|
|
23
|
+
* changed while the pair slept.
|
|
24
|
+
*
|
|
25
|
+
* MUST be called BEFORE {@link ManifoldStore#advance_frame} so the touched /
|
|
26
|
+
* had-contacts bits still reflect the just-finished step.
|
|
27
|
+
*
|
|
28
|
+
* Output is ENTITY-CANONICAL, both per event and across the buffer: each
|
|
29
|
+
* event's `(entityA, entityB)` is the pair's `(min, max)` by entity id —
|
|
30
|
+
* NOT the manifold's A/B, which follows packed-body-id order, i.e. slot
|
|
31
|
+
* allocation history — and the buffer is sorted by that key. Gameplay
|
|
32
|
+
* consumes these events through the action log, so both the pair identity
|
|
33
|
+
* and the within-frame delivery order must be derivable from body state
|
|
34
|
+
* alone: two engines holding identical bodies (same entities) emit
|
|
35
|
+
* identical event sequences regardless of how their manifold slots were
|
|
36
|
+
* allocated. The dispatch pass mirrors the contact normal whenever the
|
|
37
|
+
* canonicalization swapped the pair, preserving the "normal points from
|
|
38
|
+
* entityB toward entityA" payload convention.
|
|
39
|
+
*
|
|
40
|
+
* @param {ManifoldStore} manifolds
|
|
41
|
+
* @param {BodyStorage} storage
|
|
42
|
+
* @param {ContactEventBuffer} out_events cleared and refilled
|
|
43
|
+
*/
|
|
44
|
+
export function diff_manifolds(manifolds, storage, out_events) {
|
|
45
|
+
out_events.clear();
|
|
46
|
+
|
|
47
|
+
const live_count = manifolds.count;
|
|
48
|
+
for (let i = 0; i < live_count; i++) {
|
|
49
|
+
const slot = manifolds.live_at(i);
|
|
50
|
+
const had = manifolds.had_contacts_prev(slot);
|
|
51
|
+
|
|
52
|
+
let has;
|
|
53
|
+
if (manifolds.is_touched(slot)) {
|
|
54
|
+
has = manifolds.contact_count(slot) > 0;
|
|
55
|
+
} else if (manifolds.is_dormant(slot, storage)) {
|
|
56
|
+
continue; // frozen with its sleeping bodies — no transitions to report
|
|
57
|
+
} else {
|
|
58
|
+
has = false; // out of broadphase range / body removed → contacts are stale
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!has && !had) continue;
|
|
62
|
+
|
|
63
|
+
let kind;
|
|
64
|
+
if (has && !had) kind = ContactEventKind.Begin;
|
|
65
|
+
else if (has && had) kind = ContactEventKind.Stay;
|
|
66
|
+
else kind = ContactEventKind.End;
|
|
67
|
+
|
|
68
|
+
const idA = manifolds.bodyA(slot);
|
|
69
|
+
const idB = manifolds.bodyB(slot);
|
|
70
|
+
// Resolve entities through the packed id's GENERATION, not the bare
|
|
71
|
+
// index: the body pool reuses the lowest index first, so a despawn +
|
|
72
|
+
// respawn inside the manifold grace window would otherwise attribute
|
|
73
|
+
// the dead pair's event to the unrelated new occupant of the slot.
|
|
74
|
+
// The event buffer documents -1 as "body no longer exists".
|
|
75
|
+
const entA = storage.is_valid(idA) ? storage.entity_at(body_id_index(idA)) : -1;
|
|
76
|
+
const entB = storage.is_valid(idB) ? storage.entity_at(body_id_index(idB)) : -1;
|
|
77
|
+
|
|
78
|
+
// Entity-canonical pair order (min, max) — see the header.
|
|
79
|
+
if (entA <= entB) {
|
|
80
|
+
out_events.push(kind, entA, entB, slot);
|
|
81
|
+
} else {
|
|
82
|
+
out_events.push(kind, entB, entA, slot);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
out_events.sort_canonical();
|
|
87
|
+
}
|