@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,184 +1,187 @@
|
|
|
1
|
-
import { bvh_query_user_data_overlaps_aabb } from "../../../core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js";
|
|
2
|
-
import { returnTrue } from "../../../core/function/returnTrue.js";
|
|
3
|
-
import { aabb3_transform_oriented } from "../../../core/geom/3d/aabb/aabb3_transform_oriented.js";
|
|
4
|
-
import { Triangle3D } from "../../../core/geom/3d/shape/Triangle3D.js";
|
|
5
|
-
import { body_id_index } from "../body/BodyStorage.js";
|
|
6
|
-
import { gjk } from "
|
|
7
|
-
import {
|
|
8
|
-
import { decompose_to_triangles } from "../narrowphase/decomposition/decompose_to_triangles.js";
|
|
9
|
-
import { TRIANGLE_FLOAT_STRIDE } from "../narrowphase/decomposition/triangle_buffer_layout.js";
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Scratch state — module-scoped to avoid per-query allocation. Safe
|
|
14
|
-
* because PhysicsSystem queries run on the main thread, sequentially.
|
|
15
|
-
*/
|
|
16
|
-
const local_aabb = new Float64Array(6);
|
|
17
|
-
const world_aabb = new Float64Array(6);
|
|
18
|
-
const concave_query_aabb = new Float64Array(6);
|
|
19
|
-
const simplex_buf = new Float64Array(12);
|
|
20
|
-
|
|
21
|
-
const query_posed = new
|
|
22
|
-
const candidate_posed = new
|
|
23
|
-
const triangle_shape = new Triangle3D();
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Maximum triangles a concave candidate can emit per overlap pair.
|
|
27
|
-
* Same rationale as the narrowphase's `MAX_TRIANGLES_PER_PAIR`: the
|
|
28
|
-
* broadphase has already bounded the query AABB to the query shape's
|
|
29
|
-
* envelope, so a single candidate typically yields tens of triangles
|
|
30
|
-
* (a heightmap's count scales O(N²) with its `tessellation`, still
|
|
31
|
-
* inside the buffer for a bounded query at moderate tessellation).
|
|
32
|
-
* Excess triangles are dropped by the enumerator's bounds check —
|
|
33
|
-
* worst case is a missed overlap on a far edge of the candidate's
|
|
34
|
-
* geometry, recovered next query.
|
|
35
|
-
* @type {number}
|
|
36
|
-
*/
|
|
37
|
-
const MAX_TRIANGLES_PER_PAIR = 1024;
|
|
38
|
-
|
|
39
|
-
const triangle_buffer = new Float64Array(MAX_TRIANGLES_PER_PAIR * TRIANGLE_FLOAT_STRIDE);
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Broadphase candidate buffer. Grows by doubling on overflow.
|
|
43
|
-
* @type {Uint32Array}
|
|
44
|
-
*/
|
|
45
|
-
let scratch_candidates = new Uint32Array(64);
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Test what bodies overlap a convex shape placed at a given pose. Each
|
|
49
|
-
* overlapping body's `body_id` is written to `output` starting at
|
|
50
|
-
* `output_offset`; the function returns the number of body ids written.
|
|
51
|
-
*
|
|
52
|
-
* Use case: speculative physics queries for kinematic / character
|
|
53
|
-
* controllers. An external system can ask "would my body collide with
|
|
54
|
-
* anything if I moved it here?" without committing a tick of
|
|
55
|
-
* simulation. The output is a flat list of body ids so the caller can
|
|
56
|
-
* decide what to do per hit (skip, push, slide, etc.).
|
|
57
|
-
*
|
|
58
|
-
* The pipeline mirrors the narrowphase pair test:
|
|
59
|
-
* 1. Build the query shape's world AABB.
|
|
60
|
-
* 2. Pull candidates from both broadphase trees that overlap that AABB.
|
|
61
|
-
* 3. For each candidate, run GJK in world frame. Convex candidates
|
|
62
|
-
* go through one GJK call; concave candidates (heightmap / mesh)
|
|
63
|
-
* go through the per-triangle decomposition path.
|
|
64
|
-
* 4. Apply the optional `filter` callback (same signature as in
|
|
65
|
-
* raycast / shapeCast) before the GJK test — early-out on bodies
|
|
66
|
-
* the caller already wants to skip (themselves, allies, etc.).
|
|
67
|
-
*
|
|
68
|
-
* The query shape must be convex (`is_convex === true`). Concave shapes
|
|
69
|
-
* are typically static terrain and not used as kinematic query
|
|
70
|
-
* probes; rejecting them avoids the M×N triangle-pair cost.
|
|
71
|
-
*
|
|
72
|
-
* @param {PhysicsSystem} system
|
|
73
|
-
* @param {AbstractShape3D} shape query shape, convex; expressed in
|
|
74
|
-
* its own local frame
|
|
75
|
-
* @param {{x:number,y:number,z:number}} position world position of the
|
|
76
|
-
* query shape
|
|
77
|
-
* @param {{x:number,y:number,z:number,w:number}} rotation world rotation
|
|
78
|
-
* of the query shape (unit quaternion)
|
|
79
|
-
* @param {Uint32Array|number[]} output buffer to write body_ids into.
|
|
80
|
-
* Caller is responsible for sizing it; ids past its end are dropped.
|
|
81
|
-
* @param {number} output_offset float-index in output to start writing at
|
|
82
|
-
* @param {(entity:number, collider:Collider)=>boolean} [filter]
|
|
83
|
-
* defaults to {@link returnTrue} (accept every candidate)
|
|
84
|
-
* @returns {number} number of overlapping bodies written
|
|
85
|
-
* @throws {Error} if `shape.is_convex === false`
|
|
86
|
-
*/
|
|
87
|
-
export function overlap_shape(system, shape, position, rotation, output, output_offset, filter = returnTrue) {
|
|
88
|
-
if (shape.is_convex === false) {
|
|
89
|
-
throw new Error(`overlap_shape: query shape must be convex; received \`${shape.constructor.name}\` (is_convex=false)`);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// ── 1. Query shape's world AABB ─────────────────────────────────
|
|
93
|
-
shape.compute_bounding_box(local_aabb);
|
|
94
|
-
aabb3_transform_oriented(
|
|
95
|
-
world_aabb, 0,
|
|
96
|
-
local_aabb[0], local_aabb[1], local_aabb[2],
|
|
97
|
-
local_aabb[3], local_aabb[4], local_aabb[5],
|
|
98
|
-
position.x, position.y, position.z,
|
|
99
|
-
rotation.x, rotation.y, rotation.z, rotation.w
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
// ── 2. Gather broadphase candidates ─────────────────────────────
|
|
103
|
-
// The BVH query returns the TRUE overlap count and silently drops writes past
|
|
104
|
-
// the buffer end, so an undersized buffer would leave the read loop pulling
|
|
105
|
-
// `undefined` (garbage body ids) and silently MISS real overlaps. Grow by
|
|
106
|
-
// doubling and re-query until both static + dynamic fit (queries are
|
|
107
|
-
// deterministic, so this converges in one resize).
|
|
108
|
-
let n_static, n_dynamic, n_total;
|
|
109
|
-
for (;;) {
|
|
110
|
-
n_static = bvh_query_user_data_overlaps_aabb(scratch_candidates, 0, system.staticBvh, world_aabb);
|
|
111
|
-
n_dynamic = bvh_query_user_data_overlaps_aabb(scratch_candidates, n_static, system.dynamicBvh, world_aabb);
|
|
112
|
-
n_total = n_static + n_dynamic;
|
|
113
|
-
if (n_total <= scratch_candidates.length) break;
|
|
114
|
-
scratch_candidates = new Uint32Array(Math.max(n_total, scratch_candidates.length * 2));
|
|
115
|
-
}
|
|
116
|
-
if (n_total === 0) return 0;
|
|
117
|
-
|
|
118
|
-
// ── 3. Set up query
|
|
119
|
-
query_posed.setup(shape, position, rotation);
|
|
120
|
-
|
|
121
|
-
// ── 4. Per-candidate narrowphase ────────────────────────────────
|
|
122
|
-
const output_capacity = output.length - output_offset;
|
|
123
|
-
let count = 0;
|
|
124
|
-
let cursor = output_offset;
|
|
125
|
-
|
|
126
|
-
for (let i = 0; i < n_total; i++) {
|
|
127
|
-
if (count >= output_capacity) break;
|
|
128
|
-
|
|
129
|
-
const body_id = scratch_candidates[i];
|
|
130
|
-
const body_idx = body_id_index(body_id);
|
|
131
|
-
|
|
132
|
-
const entity = system.entityOf(body_id);
|
|
133
|
-
if (entity < 0) continue;
|
|
134
|
-
|
|
135
|
-
const collider = system.__primary_collider(body_idx);
|
|
136
|
-
if (collider === null) continue;
|
|
137
|
-
if (!filter(entity, collider)) continue;
|
|
138
|
-
|
|
139
|
-
const candidate_tr = system.__transforms[body_idx];
|
|
140
|
-
|
|
141
|
-
let overlaps = false;
|
|
142
|
-
|
|
143
|
-
if (collider.shape.is_convex !== false) {
|
|
144
|
-
candidate_posed.setup(collider.shape, candidate_tr.position, candidate_tr.rotation);
|
|
145
|
-
overlaps = gjk(simplex_buf, query_posed, candidate_posed);
|
|
146
|
-
} else {
|
|
147
|
-
// Concave candidate: project the query's world AABB into
|
|
148
|
-
// the candidate's body-local frame, decompose to triangles,
|
|
149
|
-
// run per-triangle GJK until one overlap is found.
|
|
150
|
-
|
|
151
|
-
concave_query_aabb, 0,
|
|
152
|
-
world_aabb,
|
|
153
|
-
candidate_tr.position.x, candidate_tr.position.y, candidate_tr.position.z,
|
|
154
|
-
candidate_tr.rotation.x, candidate_tr.rotation.y, candidate_tr.rotation.z, candidate_tr.rotation.w
|
|
155
|
-
);
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
triangle_buffer, 0, collider.shape,
|
|
159
|
-
concave_query_aabb[0], concave_query_aabb[1], concave_query_aabb[2],
|
|
160
|
-
concave_query_aabb[3], concave_query_aabb[4], concave_query_aabb[5]
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
1
|
+
import { bvh_query_user_data_overlaps_aabb } from "../../../core/bvh2/bvh3/query/bvh_query_user_data_overlaps_aabb.js";
|
|
2
|
+
import { returnTrue } from "../../../core/function/returnTrue.js";
|
|
3
|
+
import { aabb3_transform_oriented } from "../../../core/geom/3d/aabb/aabb3_transform_oriented.js";
|
|
4
|
+
import { Triangle3D } from "../../../core/geom/3d/shape/Triangle3D.js";
|
|
5
|
+
import { body_id_index } from "../body/BodyStorage.js";
|
|
6
|
+
import { gjk } from "../../../core/geom/3d/gjk/gjk.js";
|
|
7
|
+
import { aabb3_transform_oriented_inverse } from "../../../core/geom/3d/aabb/aabb3_transform_oriented_inverse.js";
|
|
8
|
+
import { decompose_to_triangles } from "../narrowphase/decomposition/decompose_to_triangles.js";
|
|
9
|
+
import { TRIANGLE_FLOAT_STRIDE } from "../narrowphase/decomposition/triangle_buffer_layout.js";
|
|
10
|
+
import { PosedShape3D } from "../../../core/geom/3d/shape/PosedShape3D.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Scratch state — module-scoped to avoid per-query allocation. Safe
|
|
14
|
+
* because PhysicsSystem queries run on the main thread, sequentially.
|
|
15
|
+
*/
|
|
16
|
+
const local_aabb = new Float64Array(6);
|
|
17
|
+
const world_aabb = new Float64Array(6);
|
|
18
|
+
const concave_query_aabb = new Float64Array(6);
|
|
19
|
+
const simplex_buf = new Float64Array(12);
|
|
20
|
+
|
|
21
|
+
const query_posed = new PosedShape3D();
|
|
22
|
+
const candidate_posed = new PosedShape3D();
|
|
23
|
+
const triangle_shape = new Triangle3D();
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Maximum triangles a concave candidate can emit per overlap pair.
|
|
27
|
+
* Same rationale as the narrowphase's `MAX_TRIANGLES_PER_PAIR`: the
|
|
28
|
+
* broadphase has already bounded the query AABB to the query shape's
|
|
29
|
+
* envelope, so a single candidate typically yields tens of triangles
|
|
30
|
+
* (a heightmap's count scales O(N²) with its `tessellation`, still
|
|
31
|
+
* inside the buffer for a bounded query at moderate tessellation).
|
|
32
|
+
* Excess triangles are dropped by the enumerator's bounds check —
|
|
33
|
+
* worst case is a missed overlap on a far edge of the candidate's
|
|
34
|
+
* geometry, recovered next query.
|
|
35
|
+
* @type {number}
|
|
36
|
+
*/
|
|
37
|
+
const MAX_TRIANGLES_PER_PAIR = 1024;
|
|
38
|
+
|
|
39
|
+
const triangle_buffer = new Float64Array(MAX_TRIANGLES_PER_PAIR * TRIANGLE_FLOAT_STRIDE);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Broadphase candidate buffer. Grows by doubling on overflow.
|
|
43
|
+
* @type {Uint32Array}
|
|
44
|
+
*/
|
|
45
|
+
let scratch_candidates = new Uint32Array(64);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Test what bodies overlap a convex shape placed at a given pose. Each
|
|
49
|
+
* overlapping body's `body_id` is written to `output` starting at
|
|
50
|
+
* `output_offset`; the function returns the number of body ids written.
|
|
51
|
+
*
|
|
52
|
+
* Use case: speculative physics queries for kinematic / character
|
|
53
|
+
* controllers. An external system can ask "would my body collide with
|
|
54
|
+
* anything if I moved it here?" without committing a tick of
|
|
55
|
+
* simulation. The output is a flat list of body ids so the caller can
|
|
56
|
+
* decide what to do per hit (skip, push, slide, etc.).
|
|
57
|
+
*
|
|
58
|
+
* The pipeline mirrors the narrowphase pair test:
|
|
59
|
+
* 1. Build the query shape's world AABB.
|
|
60
|
+
* 2. Pull candidates from both broadphase trees that overlap that AABB.
|
|
61
|
+
* 3. For each candidate, run GJK in world frame. Convex candidates
|
|
62
|
+
* go through one GJK call; concave candidates (heightmap / mesh)
|
|
63
|
+
* go through the per-triangle decomposition path.
|
|
64
|
+
* 4. Apply the optional `filter` callback (same signature as in
|
|
65
|
+
* raycast / shapeCast) before the GJK test — early-out on bodies
|
|
66
|
+
* the caller already wants to skip (themselves, allies, etc.).
|
|
67
|
+
*
|
|
68
|
+
* The query shape must be convex (`is_convex === true`). Concave shapes
|
|
69
|
+
* are typically static terrain and not used as kinematic query
|
|
70
|
+
* probes; rejecting them avoids the M×N triangle-pair cost.
|
|
71
|
+
*
|
|
72
|
+
* @param {PhysicsSystem} system
|
|
73
|
+
* @param {AbstractShape3D} shape query shape, convex; expressed in
|
|
74
|
+
* its own local frame
|
|
75
|
+
* @param {{x:number,y:number,z:number}} position world position of the
|
|
76
|
+
* query shape
|
|
77
|
+
* @param {{x:number,y:number,z:number,w:number}} rotation world rotation
|
|
78
|
+
* of the query shape (unit quaternion)
|
|
79
|
+
* @param {Uint32Array|number[]} output buffer to write body_ids into.
|
|
80
|
+
* Caller is responsible for sizing it; ids past its end are dropped.
|
|
81
|
+
* @param {number} output_offset float-index in output to start writing at
|
|
82
|
+
* @param {(entity:number, collider:Collider)=>boolean} [filter]
|
|
83
|
+
* defaults to {@link returnTrue} (accept every candidate)
|
|
84
|
+
* @returns {number} number of overlapping bodies written
|
|
85
|
+
* @throws {Error} if `shape.is_convex === false`
|
|
86
|
+
*/
|
|
87
|
+
export function overlap_shape(system, shape, position, rotation, output, output_offset, filter = returnTrue) {
|
|
88
|
+
if (shape.is_convex === false) {
|
|
89
|
+
throw new Error(`overlap_shape: query shape must be convex; received \`${shape.constructor.name}\` (is_convex=false)`);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ── 1. Query shape's world AABB ─────────────────────────────────
|
|
93
|
+
shape.compute_bounding_box(local_aabb);
|
|
94
|
+
aabb3_transform_oriented(
|
|
95
|
+
world_aabb, 0,
|
|
96
|
+
local_aabb[0], local_aabb[1], local_aabb[2],
|
|
97
|
+
local_aabb[3], local_aabb[4], local_aabb[5],
|
|
98
|
+
position.x, position.y, position.z,
|
|
99
|
+
rotation.x, rotation.y, rotation.z, rotation.w
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
// ── 2. Gather broadphase candidates ─────────────────────────────
|
|
103
|
+
// The BVH query returns the TRUE overlap count and silently drops writes past
|
|
104
|
+
// the buffer end, so an undersized buffer would leave the read loop pulling
|
|
105
|
+
// `undefined` (garbage body ids) and silently MISS real overlaps. Grow by
|
|
106
|
+
// doubling and re-query until both static + dynamic fit (queries are
|
|
107
|
+
// deterministic, so this converges in one resize).
|
|
108
|
+
let n_static, n_dynamic, n_total;
|
|
109
|
+
for (;;) {
|
|
110
|
+
n_static = bvh_query_user_data_overlaps_aabb(scratch_candidates, 0, system.staticBvh, world_aabb);
|
|
111
|
+
n_dynamic = bvh_query_user_data_overlaps_aabb(scratch_candidates, n_static, system.dynamicBvh, world_aabb);
|
|
112
|
+
n_total = n_static + n_dynamic;
|
|
113
|
+
if (n_total <= scratch_candidates.length) break;
|
|
114
|
+
scratch_candidates = new Uint32Array(Math.max(n_total, scratch_candidates.length * 2));
|
|
115
|
+
}
|
|
116
|
+
if (n_total === 0) return 0;
|
|
117
|
+
|
|
118
|
+
// ── 3. Set up query PosedShape3D (constant across candidates) ─────
|
|
119
|
+
query_posed.setup(shape, position, rotation);
|
|
120
|
+
|
|
121
|
+
// ── 4. Per-candidate narrowphase ────────────────────────────────
|
|
122
|
+
const output_capacity = output.length - output_offset;
|
|
123
|
+
let count = 0;
|
|
124
|
+
let cursor = output_offset;
|
|
125
|
+
|
|
126
|
+
for (let i = 0; i < n_total; i++) {
|
|
127
|
+
if (count >= output_capacity) break;
|
|
128
|
+
|
|
129
|
+
const body_id = scratch_candidates[i];
|
|
130
|
+
const body_idx = body_id_index(body_id);
|
|
131
|
+
|
|
132
|
+
const entity = system.entityOf(body_id);
|
|
133
|
+
if (entity < 0) continue;
|
|
134
|
+
|
|
135
|
+
const collider = system.__primary_collider(body_idx);
|
|
136
|
+
if (collider === null) continue;
|
|
137
|
+
if (!filter(entity, collider)) continue;
|
|
138
|
+
|
|
139
|
+
const candidate_tr = system.__transforms[body_idx];
|
|
140
|
+
|
|
141
|
+
let overlaps = false;
|
|
142
|
+
|
|
143
|
+
if (collider.shape.is_convex !== false) {
|
|
144
|
+
candidate_posed.setup(collider.shape, candidate_tr.position, candidate_tr.rotation);
|
|
145
|
+
overlaps = gjk(simplex_buf, query_posed, candidate_posed);
|
|
146
|
+
} else {
|
|
147
|
+
// Concave candidate: project the query's world AABB into
|
|
148
|
+
// the candidate's body-local frame, decompose to triangles,
|
|
149
|
+
// run per-triangle GJK until one overlap is found.
|
|
150
|
+
aabb3_transform_oriented_inverse(
|
|
151
|
+
concave_query_aabb, 0,
|
|
152
|
+
world_aabb,
|
|
153
|
+
candidate_tr.position.x, candidate_tr.position.y, candidate_tr.position.z,
|
|
154
|
+
candidate_tr.rotation.x, candidate_tr.rotation.y, candidate_tr.rotation.z, candidate_tr.rotation.w
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
let tri_count = decompose_to_triangles(
|
|
158
|
+
triangle_buffer, 0, collider.shape,
|
|
159
|
+
concave_query_aabb[0], concave_query_aabb[1], concave_query_aabb[2],
|
|
160
|
+
concave_query_aabb[3], concave_query_aabb[4], concave_query_aabb[5]
|
|
161
|
+
);
|
|
162
|
+
// TRUE count may exceed the buffer (overflow writes dropped) —
|
|
163
|
+
// clamp so the per-triangle GJK never binds past the end.
|
|
164
|
+
if (tri_count > MAX_TRIANGLES_PER_PAIR) tri_count = MAX_TRIANGLES_PER_PAIR;
|
|
165
|
+
|
|
166
|
+
// Re-pose candidate as the concave body (the flyweight triangle is
|
|
167
|
+
// rebound per iteration below; setup only stores the shape reference).
|
|
168
|
+
candidate_posed.setup(triangle_shape, candidate_tr.position, candidate_tr.rotation);
|
|
169
|
+
|
|
170
|
+
for (let t = 0; t < tri_count; t++) {
|
|
171
|
+
triangle_shape.bind(triangle_buffer, t * TRIANGLE_FLOAT_STRIDE);
|
|
172
|
+
if (gjk(simplex_buf, query_posed, candidate_posed)) {
|
|
173
|
+
overlaps = true;
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (overlaps) {
|
|
180
|
+
output[cursor] = body_id;
|
|
181
|
+
cursor++;
|
|
182
|
+
count++;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return count;
|
|
187
|
+
}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Fills `result` with the nearest hit and returns `true` on hit, `false` on
|
|
5
5
|
* miss. `result.t` is the exact surface distance and `result.normal` the true
|
|
6
6
|
* surface normal for sphere / box / capsule / mesh / heightmap colliders;
|
|
7
|
-
* composite convex shapes (no exact ray test yet) fall back to the
|
|
8
|
-
* AABB hit + AABB-face normal
|
|
7
|
+
* composite convex shapes (no exact ray test yet) fall back to the shape's
|
|
8
|
+
* TIGHT world AABB hit + AABB-face normal (never the fat broadphase leaf,
|
|
9
|
+
* whose velocity pad would yield phantom hits short of any surface).
|
|
9
10
|
*
|
|
10
11
|
* **Sensors are skipped.** A ray passes straight through any body or collider
|
|
11
12
|
* flagged {@link is_sensor} (a trigger is not a solid surface), landing on the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raycast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/raycast.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"raycast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/raycast.js"],"names":[],"mappings":"AA0KA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,yGAJmB,MAAM,yBAAsB,OAAO,GAEzC,OAAO,CAwCnB"}
|
|
@@ -12,10 +12,15 @@ import {
|
|
|
12
12
|
} from "../../../core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js";
|
|
13
13
|
import { body_id_index } from "../body/BodyStorage.js";
|
|
14
14
|
import { is_sensor } from "../ecs/is_sensor.js";
|
|
15
|
+
import { aabb3_transform_oriented } from "../../../core/geom/3d/aabb/aabb3_transform_oriented.js";
|
|
15
16
|
import { RAY_REFINE_UNSUPPORTED, refine_ray_hit } from "../narrowphase/refine_ray_hit.js";
|
|
16
17
|
|
|
17
18
|
const stack = SCRATCH_UINT32_TRAVERSAL_STACK;
|
|
18
19
|
|
|
20
|
+
/** Scratch for the UNSUPPORTED-shape fallback's tight world AABB. */
|
|
21
|
+
const scratch_tight_local = new Float64Array(6);
|
|
22
|
+
const scratch_tight_world = new Float64Array(6);
|
|
23
|
+
|
|
19
24
|
/**
|
|
20
25
|
* Reusable nearest-hit accumulator + scratch. Module-scoped so {@link raycast}
|
|
21
26
|
* doesn't allocate per call; the physics step is single-threaded so contention
|
|
@@ -122,15 +127,35 @@ function bvh_raycast_nearest(
|
|
|
122
127
|
);
|
|
123
128
|
|
|
124
129
|
if (refined === RAY_REFINE_UNSUPPORTED) {
|
|
125
|
-
// No exact ray test for this shape —
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
130
|
+
// No exact ray test for this shape — refine against its TIGHT
|
|
131
|
+
// world AABB rather than reporting the fat broadphase leaf's
|
|
132
|
+
// entry. The leaf carries the constant slack plus the directional
|
|
133
|
+
// velocity pad, so the fat entry can sit decimetres short of any
|
|
134
|
+
// surface at speed — and a ray clipping only the pad would
|
|
135
|
+
// report a phantom hit on empty space.
|
|
136
|
+
collider.shape.compute_bounding_box(scratch_tight_local);
|
|
137
|
+
aabb3_transform_oriented(
|
|
138
|
+
scratch_tight_world, 0,
|
|
139
|
+
scratch_tight_local[0], scratch_tight_local[1], scratch_tight_local[2],
|
|
140
|
+
scratch_tight_local[3], scratch_tight_local[4], scratch_tight_local[5],
|
|
141
|
+
tr.position.x, tr.position.y, tr.position.z,
|
|
142
|
+
tr.rotation.x, tr.rotation.y, tr.rotation.z, tr.rotation.w
|
|
143
|
+
);
|
|
144
|
+
const tight_t = aabb3_near_distance_to_intersection_ray_segment(
|
|
145
|
+
scratch_tight_world[0], scratch_tight_world[1], scratch_tight_world[2],
|
|
146
|
+
scratch_tight_world[3], scratch_tight_world[4], scratch_tight_world[5],
|
|
147
|
+
ox, oy, oz,
|
|
148
|
+
inv_dx, inv_dy, inv_dz,
|
|
149
|
+
0, acc.best_t
|
|
150
|
+
);
|
|
151
|
+
if (tight_t < acc.best_t) { // Infinity on miss — pad-only crossings drop out
|
|
152
|
+
acc.best_t = tight_t;
|
|
153
|
+
acc.best_body = body_id;
|
|
154
|
+
aabb_face_normal(best_normal,
|
|
155
|
+
scratch_tight_world[0], scratch_tight_world[1], scratch_tight_world[2],
|
|
156
|
+
scratch_tight_world[3], scratch_tight_world[4], scratch_tight_world[5],
|
|
157
|
+
ox + dx * tight_t, oy + dy * tight_t, oz + dz * tight_t);
|
|
158
|
+
}
|
|
134
159
|
} else if (refined < acc.best_t) { // a refined miss is Infinity → never wins
|
|
135
160
|
acc.best_t = refined;
|
|
136
161
|
acc.best_body = body_id;
|
|
@@ -149,8 +174,9 @@ function bvh_raycast_nearest(
|
|
|
149
174
|
* Fills `result` with the nearest hit and returns `true` on hit, `false` on
|
|
150
175
|
* miss. `result.t` is the exact surface distance and `result.normal` the true
|
|
151
176
|
* surface normal for sphere / box / capsule / mesh / heightmap colliders;
|
|
152
|
-
* composite convex shapes (no exact ray test yet) fall back to the
|
|
153
|
-
* AABB hit + AABB-face normal
|
|
177
|
+
* composite convex shapes (no exact ray test yet) fall back to the shape's
|
|
178
|
+
* TIGHT world AABB hit + AABB-face normal (never the fat broadphase leaf,
|
|
179
|
+
* whose velocity pad would yield phantom hits short of any surface).
|
|
154
180
|
*
|
|
155
181
|
* **Sensors are skipped.** A ray passes straight through any body or collider
|
|
156
182
|
* flagged {@link is_sensor} (a trigger is not a solid surface), landing on the
|
|
@@ -39,18 +39,31 @@
|
|
|
39
39
|
* Output on miss: untouched; same convention as `raycast`.
|
|
40
40
|
*
|
|
41
41
|
* @param {PhysicsSystem} system
|
|
42
|
-
* @param {Ray3} ray
|
|
42
|
+
* @param {Ray3|{origin_x:number,origin_y:number,origin_z:number,direction_x:number,direction_y:number,direction_z:number,tMax:number}} ray
|
|
43
|
+
* origin + unit direction + `tMax`. Only the named accessors are read, so a
|
|
44
|
+
* plain double-precision ray-like works — `Ray3` is Float32Array-backed and
|
|
45
|
+
* quantises large-coordinate sweeps (the CCD pass passes a f64 ray-like)
|
|
43
46
|
* @param {AbstractShape3D} shape shape being swept, in its local frame
|
|
44
47
|
* @param {{x:number,y:number,z:number,w:number}} rotation fixed orientation
|
|
45
48
|
* @param {PhysicsSurfacePoint} result populated on hit; untouched on miss
|
|
46
|
-
* @param {(entity:number, collider:Collider)=>boolean} [filter]
|
|
47
|
-
* contract; defaults to {@link returnTrue}
|
|
49
|
+
* @param {(entity:number, collider:Collider, body_id:number)=>boolean} [filter]
|
|
50
|
+
* mandatory in contract; defaults to {@link returnTrue}. Receives the
|
|
51
|
+
* candidate body's entity, primary collider, and packed body id (the id
|
|
52
|
+
* distinguishes bodies when colliders live on child entities)
|
|
53
|
+
* @param {boolean} [skip_initial_overlaps=false] how a candidate ALREADY
|
|
54
|
+
* overlapping the swept shape at `t = 0` is treated. `false` (kinematic
|
|
55
|
+
* "can I move?" semantics): the cast is blocked where it stands — report a
|
|
56
|
+
* hit at `t = 0`. `true` (CCD semantics): such a candidate is a resting /
|
|
57
|
+
* sliding contact the discrete solver already owns, NOT a tunnelling
|
|
58
|
+
* threat — skip it and keep scanning the remaining candidates for real
|
|
59
|
+
* blockers along the sweep. Without the skip, one resting contact at the
|
|
60
|
+
* start of the sweep would blind the cast to every other obstacle.
|
|
48
61
|
* @returns {boolean}
|
|
49
62
|
*/
|
|
50
|
-
export function shape_cast(system: PhysicsSystem, ray:
|
|
63
|
+
export function shape_cast(system: PhysicsSystem, ray: any, shape: AbstractShape3D, rotation: {
|
|
51
64
|
x: number;
|
|
52
65
|
y: number;
|
|
53
66
|
z: number;
|
|
54
67
|
w: number;
|
|
55
|
-
}, result: PhysicsSurfacePoint, filter?: (entity: number, collider: Collider) => boolean): boolean;
|
|
68
|
+
}, result: PhysicsSurfacePoint, filter?: (entity: number, collider: Collider, body_id: number) => boolean, skip_initial_overlaps?: boolean): boolean;
|
|
56
69
|
//# sourceMappingURL=shape_cast.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape_cast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/shape_cast.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shape_cast.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/queries/shape_cast.js"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,8FAhBW;IAAC,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAA;CAAC,iDAE7B,MAAM,+BAA6B,MAAM,KAAG,OAAO,0BAI3D,OAAO,GAQL,OAAO,CA2RnB"}
|