@woosh/meep-engine 2.156.0 → 2.158.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/editor/view/ecs/components/common/AutoCanvasView.js +100 -53
- package/editor/view/ecs/components/common/TextController.js +59 -0
- package/editor/view/node-graph/NodeGraphCamera.js +90 -0
- package/editor/view/node-graph/NodeGraphEditorView.js +121 -22
- package/editor/view/node-graph/NodeGraphSelection.js +89 -0
- package/editor/view/node-graph/NodeGraphView.js +669 -453
- package/editor/view/node-graph/NodeView.js +211 -135
- package/editor/view/node-graph/actions/ConnectionCreateAction.js +53 -0
- package/editor/view/node-graph/actions/ConnectionDeleteAction.js +36 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.js +88 -0
- package/editor/view/node-graph/actions/NodeParameterSetAction.js +52 -0
- package/editor/view/node-graph/actions/NodesMoveAction.js +41 -0
- package/editor/view/node-graph/actions/SelectionSetAction.js +60 -0
- package/editor/view/node-graph/connection_wire_geometry.js +107 -0
- package/package.json +1 -1
- package/samples/generation/SampleGenerator0.js +8 -1
- package/src/core/binary/reinterpret_float32_as_uint32.d.ts +7 -0
- package/src/core/binary/reinterpret_float32_as_uint32.d.ts.map +1 -0
- package/src/core/binary/reinterpret_float32_as_uint32.js +13 -0
- package/src/core/binary/reinterpret_uint32_as_float32.d.ts +7 -0
- package/src/core/binary/reinterpret_uint32_as_float32.d.ts.map +1 -0
- package/src/core/binary/reinterpret_uint32_as_float32.js +14 -0
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +1 -3
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts +12 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts.map +1 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.js +92 -0
- package/src/core/bvh8/BVH8.d.ts +127 -0
- package/src/core/bvh8/BVH8.d.ts.map +1 -0
- package/src/core/bvh8/BVH8.js +436 -0
- package/src/core/bvh8/NOTES.md +63 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts +59 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -0
- package/src/core/bvh8/build/BVH8Converter.js +588 -0
- package/src/core/bvh8/build/NodeProxy.d.ts +66 -0
- package/src/core/bvh8/build/NodeProxy.d.ts.map +1 -0
- package/src/core/bvh8/build/NodeProxy.js +308 -0
- package/src/core/bvh8/build/TriangleCluster.d.ts +29 -0
- package/src/core/bvh8/build/TriangleCluster.d.ts.map +1 -0
- package/src/core/bvh8/build/TriangleCluster.js +123 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts +8 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts.map +1 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.js +29 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts +10 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts.map +1 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.js +18 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts +10 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.js +303 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts +9 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_from_proxy.js +256 -0
- package/src/core/bvh8/build/byte.d.ts +7 -0
- package/src/core/bvh8/build/byte.d.ts.map +1 -0
- package/src/core/bvh8/build/byte.js +10 -0
- package/src/core/bvh8/build/encode_bounds_e.d.ts +9 -0
- package/src/core/bvh8/build/encode_bounds_e.d.ts.map +1 -0
- package/src/core/bvh8/build/encode_bounds_e.js +12 -0
- package/src/core/bvh8/bvh8_convert_to_dot.d.ts +11 -0
- package/src/core/bvh8/bvh8_convert_to_dot.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_convert_to_dot.js +133 -0
- package/src/core/bvh8/bvh8_count_primitives.d.ts +22 -0
- package/src/core/bvh8/bvh8_count_primitives.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_count_primitives.js +98 -0
- package/src/core/bvh8/bvh8_geometry_validate.d.ts +16 -0
- package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_geometry_validate.js +149 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts +16 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.js +177 -0
- package/src/core/bvh8/bvh8_get_node_bounds.d.ts +9 -0
- package/src/core/bvh8/bvh8_get_node_bounds.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_get_node_bounds.js +35 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts +10 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.js +53 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.d.ts +9 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.js +18 -0
- package/src/core/bvh8/bvh8_node_count_triangles.d.ts +8 -0
- package/src/core/bvh8/bvh8_node_count_triangles.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_node_count_triangles.js +28 -0
- package/src/core/bvh8/bvh8_quality.d.ts +8 -0
- package/src/core/bvh8/bvh8_quality.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_quality.js +73 -0
- package/src/core/bvh8/bvh8_validate_structure.d.ts +15 -0
- package/src/core/bvh8/bvh8_validate_structure.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_validate_structure.js +87 -0
- package/src/core/collection/Uint32MinHeap.d.ts +56 -0
- package/src/core/collection/Uint32MinHeap.d.ts.map +1 -0
- package/src/core/collection/Uint32MinHeap.js +109 -0
- package/src/core/collection/list/FilteredListProjection.js +1 -1
- package/src/{engine/physics/island → core/collection/union-find}/union_find.d.ts +8 -5
- package/src/core/collection/union-find/union_find.d.ts.map +1 -0
- package/src/{engine/physics/island → core/collection/union-find}/union_find.js +8 -5
- package/src/core/dom/isImageBitmap.d.ts +7 -0
- package/src/core/dom/isImageBitmap.d.ts.map +1 -0
- package/src/core/dom/isImageBitmap.js +12 -0
- package/src/core/function/frameThrottle.d.ts +8 -0
- package/src/core/function/frameThrottle.d.ts.map +1 -0
- package/src/core/function/frameThrottle.js +23 -0
- package/src/{engine/physics/narrowphase/clip_against_axis_uv.d.ts → core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts} +3 -3
- package/src/core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/clip_against_axis_uv.js → core/geom/2d/polygon/polygon2_clip_axis_halfplane.js} +51 -51
- package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts → core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts} +9 -7
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.js → core/geom/3d/aabb/aabb3_transform_oriented_inverse.js} +9 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +12 -0
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +46 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.d.ts +28 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.d.ts.map +1 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.js +35 -0
- package/src/core/geom/3d/frustum/read_cluster_frustum_corners.js +1 -1
- package/src/core/geom/3d/frustum/read_frustum_corner.d.ts +9 -0
- package/src/core/geom/3d/frustum/read_frustum_corner.d.ts.map +1 -0
- package/src/core/geom/3d/frustum/read_frustum_corner.js +14 -0
- package/src/core/geom/3d/gjk/gjk.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/gjk.js +430 -372
- package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.d.ts +8 -5
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.js +520 -544
- package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.d.ts +5 -4
- package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.js +71 -70
- package/src/{engine/physics → core/geom/3d}/gjk/mpr.d.ts +3 -3
- package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/mpr.js +368 -362
- package/src/{engine/physics/integration/quat_integrate.d.ts → core/geom/3d/quaternion/quat3_integrate.d.ts} +2 -2
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -0
- package/src/{engine/physics/integration/quat_integrate.js → core/geom/3d/quaternion/quat3_integrate.js} +1 -1
- package/src/{engine/physics/narrowphase/PosedShape.d.ts → core/geom/3d/shape/PosedShape3D.d.ts} +26 -8
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/PosedShape.js → core/geom/3d/shape/PosedShape3D.js} +60 -9
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +15 -11
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +1 -1
- package/src/core/geom/vec3/v3_quat3_apply_inverse.js +1 -1
- package/src/core/math/complex/complex_add.d.ts +1 -1
- package/src/core/math/complex/complex_add.d.ts.map +1 -1
- package/src/core/math/complex/complex_add.js +12 -3
- package/src/core/math/complex/complex_div.d.ts +1 -1
- package/src/core/math/complex/complex_div.d.ts.map +1 -1
- package/src/core/math/complex/complex_div.js +11 -4
- package/src/core/math/complex/complex_mul.d.ts +1 -1
- package/src/core/math/complex/complex_mul.d.ts.map +1 -1
- package/src/core/math/complex/complex_mul.js +10 -3
- package/src/core/math/complex/complex_sub.d.ts +1 -1
- package/src/core/math/complex/complex_sub.d.ts.map +1 -1
- package/src/core/math/complex/complex_sub.js +12 -3
- package/src/{engine/physics/fluid/solver/optimal_sor_omega.d.ts → core/math/linalg/sor_optimal_omega.d.ts} +4 -3
- package/src/core/math/linalg/sor_optimal_omega.d.ts.map +1 -0
- package/src/{engine/physics/fluid/solver/optimal_sor_omega.js → core/math/linalg/sor_optimal_omega.js} +4 -3
- package/src/core/math/lookup/ParameterLookupTable.d.ts +123 -0
- package/src/core/math/lookup/ParameterLookupTable.d.ts.map +1 -0
- package/src/core/math/lookup/ParameterLookupTable.js +495 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.d.ts +5 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.d.ts.map +1 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.js +6 -0
- package/src/core/math/physics/kinematics/computeInterceptPoint.d.ts.map +1 -0
- package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.js +79 -79
- package/src/core/math/physics/mie/ri_air.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_air.js +1 -3
- package/src/core/math/physics/mie/ri_ammonium_sulfate.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_ammonium_sulfate.js +1 -3
- package/src/core/math/physics/mie/ri_brine.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_brine.js +1 -3
- package/src/core/math/physics/mie/ri_dust.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_dust.js +1 -3
- package/src/core/math/physics/mie/ri_pollen.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_pollen.js +1 -3
- package/src/core/math/physics/mie/ri_smoke.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_smoke.js +1 -3
- package/src/core/math/physics/mie/ri_soot.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_soot.js +1 -3
- package/src/core/math/physics/mie/ri_water.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_water.js +1 -3
- package/src/core/math/random/random_pick_weighted_index.d.ts +10 -0
- package/src/core/math/random/random_pick_weighted_index.d.ts.map +1 -0
- package/src/core/math/random/random_pick_weighted_index.js +26 -0
- package/src/core/model/node-graph/NodeGraph.d.ts +9 -0
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +38 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +23 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +54 -0
- package/src/core/path/convertPathToURL.d.ts +9 -0
- package/src/core/path/convertPathToURL.d.ts.map +1 -0
- package/src/core/path/convertPathToURL.js +107 -0
- package/src/core/process/worker/WorkerBuilder.js +1 -1
- package/src/core/process/worker/extractTransferables.js +1 -1
- package/src/engine/animation/curve/draw/build_tangent_editor.d.ts.map +1 -1
- package/src/engine/animation/curve/draw/build_tangent_editor.js +8 -1
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.js +11 -5
- package/src/engine/asset/Asset.d.ts.map +1 -1
- package/src/engine/asset/Asset.js +16 -6
- package/src/engine/asset/AssetManager.d.ts +61 -52
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetManager.js +1411 -1045
- package/src/engine/asset/AssetRequest.d.ts +1 -1
- package/src/engine/asset/AssetRequest.d.ts.map +1 -1
- package/src/engine/asset/AssetRequest.js +1 -1
- package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
- package/src/engine/asset/AssetRequestScope.js +7 -0
- package/src/engine/asset/PendingAsset.d.ts +32 -1
- package/src/engine/asset/PendingAsset.d.ts.map +1 -1
- package/src/engine/asset/PendingAsset.js +108 -61
- package/src/engine/asset/loaders/ArrayBufferLoader.js +2 -2
- package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/AssetLoader.js +19 -2
- package/src/engine/asset/loaders/GLTFAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/GLTFAssetLoader.js +123 -114
- package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts +1 -1
- package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/JavascriptAssetLoader.js +31 -47
- package/src/engine/asset/loaders/JsonAssetLoader.js +1 -1
- package/src/engine/asset/loaders/SVGAssetLoader.js +2 -2
- package/src/engine/asset/loaders/SoundAssetLoader.js +1 -1
- package/src/engine/asset/loaders/TextAssetLoader.js +2 -2
- package/src/{core → engine/asset/loaders}/font/FontAsset.d.ts +1 -1
- package/src/engine/asset/loaders/font/FontAsset.d.ts.map +1 -0
- package/src/{core → engine/asset/loaders}/font/FontAsset.js +21 -21
- package/src/{core → engine/asset/loaders}/font/FontAssetLoader.d.ts +1 -1
- package/src/engine/asset/loaders/font/FontAssetLoader.d.ts.map +1 -0
- package/src/{core → engine/asset/loaders}/font/FontAssetLoader.js +20 -20
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +11 -20
- package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/texture/TextureAssetLoader.js +8 -2
- package/src/engine/asset/preloader/AssetPreloader.js +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts.map +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.js +19 -22
- package/src/engine/graphics/FrameThrottle.d.ts +1 -7
- package/src/engine/graphics/FrameThrottle.d.ts.map +1 -1
- package/src/engine/graphics/FrameThrottle.js +2 -24
- package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.d.ts +1 -1
- package/src/engine/graphics/debug/shape_to_visual_entity.d.ts.map +1 -0
- package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.js +159 -159
- package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.d.ts +1 -1
- package/src/engine/graphics/debug/visualize_tetrahedral_mesh.d.ts.map +1 -0
- package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.js +46 -46
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts.map +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.js +22 -32
- package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2D.js +21 -0
- package/src/engine/graphics/ecs/trail2d/Trail2DFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/trail2d/Trail2DFlags.js +9 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +2 -76
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -427
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +1 -4
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +2 -6
- package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts +1 -8
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts.map +1 -1
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +2 -14
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts +1 -11
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +2 -46
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +27 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +81 -0
- package/src/engine/graphics/texture/isImageBitmap.d.ts +1 -6
- package/src/engine/graphics/texture/isImageBitmap.d.ts.map +1 -1
- package/src/engine/graphics/texture/isImageBitmap.js +2 -12
- package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.d.ts +2 -2
- package/src/engine/intelligence/behavior/util/AsynchronousDelayAction.d.ts.map +1 -0
- package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.js +55 -55
- package/src/engine/network/NetworkSession.d.ts +12 -1
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +52 -1
- package/src/engine/network/README.md +45 -0
- package/src/engine/network/convertPathToURL.d.ts +1 -8
- package/src/engine/network/convertPathToURL.d.ts.map +1 -1
- package/src/engine/network/convertPathToURL.js +2 -107
- package/src/engine/network/core/quantize/quantize_float.d.ts.map +1 -1
- package/src/engine/network/core/quantize/quantize_float.js +7 -0
- package/src/engine/network/core/quantize/quantize_position.d.ts.map +1 -1
- package/src/engine/network/core/quantize/quantize_position.js +12 -1
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.js +15 -1
- package/src/engine/network/replication/Replicator.d.ts +8 -0
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +48 -0
- package/src/engine/network/transport/Channel.d.ts.map +1 -1
- package/src/engine/network/transport/Channel.js +46 -12
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts +16 -0
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
- package/src/engine/network/transport/ReliableCommandPipeline.js +29 -0
- package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/NodeUDPTransport.js +7 -1
- package/src/engine/network/transport/fragments/packet_size.d.ts +5 -5
- package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/packet_size.js +5 -5
- package/src/engine/physics/BULLET_REVIEW.md +1 -1
- package/src/engine/physics/JOLT_REVIEW.md +2 -2
- package/src/engine/physics/PLAN.md +1094 -945
- package/src/engine/physics/RAPIER_REVIEW.md +2 -2
- package/src/engine/physics/body/BodyStorage.d.ts +2 -12
- package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
- package/src/engine/physics/body/BodyStorage.js +406 -452
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +12 -3
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +28 -3
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +60 -24
- package/src/engine/physics/broadphase/generate_pairs.d.ts +9 -5
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
- package/src/engine/physics/broadphase/generate_pairs.js +52 -37
- package/src/engine/physics/ccd/linear_sweep.d.ts +15 -5
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +122 -40
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +830 -805
- package/src/engine/physics/contact/ManifoldStore.d.ts +91 -16
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +204 -60
- package/src/engine/physics/ecs/BodyKind.d.ts +7 -3
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +29 -25
- package/src/engine/physics/ecs/Collider.d.ts +7 -0
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.js +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +110 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +467 -45
- package/src/engine/physics/ecs/RigidBody.d.ts +20 -5
- package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBody.js +307 -286
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts +6 -3
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodyFlags.js +31 -28
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +12 -4
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +19 -5
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts +10 -0
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.js +37 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts +28 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts.map +1 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +76 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts +11 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
- package/src/engine/physics/events/ContactEventBuffer.js +40 -0
- package/src/engine/physics/events/diff_manifolds.d.ts +30 -13
- package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -1
- package/src/engine/physics/events/diff_manifolds.js +87 -50
- package/src/engine/physics/fluid/FluidField.d.ts +98 -26
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +684 -570
- package/src/engine/physics/fluid/FluidSimulator.d.ts +157 -6
- package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidSimulator.js +450 -83
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +243 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +4 -3
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +4 -3
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +72 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +97 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +117 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +348 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +62 -12
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +135 -38
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +85 -38
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +27 -8
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +171 -68
- package/src/engine/physics/fluid/prototype.js +25 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +136 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts +37 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +169 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts +36 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +100 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +6 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +6 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +7 -2
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +17 -12
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +131 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +32 -22
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +43 -26
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts +31 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.js +77 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +30 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +92 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +26 -19
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +46 -42
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +38 -10
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +158 -75
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +22 -17
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +108 -96
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +319 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts +53 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +236 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts +46 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +217 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts +40 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.js +165 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts +44 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.js +95 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts +38 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.js +77 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts +52 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.js +131 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts +38 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.js +104 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +30 -1
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +160 -116
- package/src/engine/physics/integration/integrate_position.js +97 -97
- package/src/engine/physics/island/IslandBuilder.d.ts +49 -8
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +93 -14
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +683 -673
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +899 -749
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +27 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +624 -459
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +58 -38
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +369 -325
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +3 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +568 -422
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +6 -3
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +66 -10
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +4 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +97 -94
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -117
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +1738 -1739
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +14 -7
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +74 -69
- package/src/engine/physics/persistence/solver_caches.d.ts +20 -0
- package/src/engine/physics/persistence/solver_caches.d.ts.map +1 -0
- package/src/engine/physics/persistence/solver_caches.js +309 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +187 -184
- package/src/engine/physics/queries/raycast.d.ts +3 -2
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +37 -11
- package/src/engine/physics/queries/shape_cast.d.ts +18 -5
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +417 -393
- package/src/engine/physics/solver/solve_contacts.d.ts +22 -6
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +1482 -1338
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +344 -339
- package/src/engine/ui/DraggableAspect.d.ts +12 -3
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +115 -83
- package/src/generation/COORDINATES.md +54 -0
- package/src/generation/GridTaskGroup.js +2 -2
- package/src/generation/REVIEW_01_ACTION_PLAN.md +628 -0
- package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts +9 -1
- package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts.map +1 -1
- package/src/generation/automata/CaveGeneratorCellularAutomata.js +79 -59
- package/src/generation/automata/CellularAutomata.d.ts +6 -3
- package/src/generation/automata/CellularAutomata.d.ts.map +1 -1
- package/src/generation/automata/CellularAutomata.js +22 -19
- package/src/generation/filtering/CellFilter.d.ts +17 -0
- package/src/generation/filtering/CellFilter.d.ts.map +1 -1
- package/src/generation/filtering/CellFilter.js +117 -77
- package/src/generation/filtering/CellFilterCellMatcher.d.ts.map +1 -1
- package/src/generation/filtering/CellFilterCellMatcher.js +2 -0
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts +5 -0
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts.map +1 -1
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.js +15 -0
- package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterBinaryOperation.js +37 -50
- package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterOperationTertiary.js +43 -59
- package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterUnaryOperation.js +29 -33
- package/src/generation/filtering/numeric/CellFilterCache.d.ts +1 -0
- package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts +3 -2
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +9 -35
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.js +19 -43
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +2 -6
- package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +9 -12
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +2 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.js +2 -6
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts +5 -4
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts.map +1 -1
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.js +5 -4
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts +17 -0
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts.map +1 -0
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.js +42 -0
- package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.d.ts.map +1 -1
- package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +7 -1
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts.map +1 -1
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +7 -10
- package/src/generation/filtering/numeric/util/sampler_from_filter.d.ts.map +1 -1
- package/src/generation/filtering/numeric/util/sampler_from_filter.js +2 -1
- package/src/generation/grid/GridData.d.ts.map +1 -1
- package/src/generation/grid/GridData.js +14 -1
- package/src/generation/grid/actions/ContinuousGridCellAction.d.ts +10 -3
- package/src/generation/grid/actions/ContinuousGridCellAction.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellAction.js +18 -3
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts +11 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +13 -3
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +2 -2
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +4 -6
- package/src/generation/grid/coords/grid_to_texel.d.ts +9 -0
- package/src/generation/grid/coords/grid_to_texel.d.ts.map +1 -0
- package/src/generation/grid/coords/grid_to_texel.js +10 -0
- package/src/generation/grid/coords/texel_to_grid.d.ts +9 -0
- package/src/generation/grid/coords/texel_to_grid.d.ts.map +1 -0
- package/src/generation/grid/coords/texel_to_grid.js +10 -0
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts +2 -2
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskApplyActionToCells.js +10 -6
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +20 -21
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts +7 -0
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.js +18 -10
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.js +16 -7
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts +5 -3
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +26 -23
- package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +10 -1
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.d.ts.map +1 -1
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.js +4 -0
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts +15 -8
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +89 -92
- package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
- package/src/generation/markers/GridActionRuleSet.js +10 -2
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts +11 -0
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarker.js +20 -3
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +3 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +9 -2
- package/src/generation/markers/MarkerNode.d.ts +8 -3
- package/src/generation/markers/MarkerNode.d.ts.map +1 -1
- package/src/generation/markers/MarkerNode.js +12 -5
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +2 -2
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.js +2 -2
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +6 -4
- package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.d.ts.map +1 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.js +1 -3
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.js +12 -11
- package/src/generation/markers/matcher/MarkerNodeMatcherAnd.js +2 -2
- package/src/generation/markers/transform/MarkerNodeTransformer.d.ts +4 -1
- package/src/generation/markers/transform/MarkerNodeTransformer.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformer.js +4 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +1 -3
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts +5 -0
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +15 -0
- package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.js +1 -3
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +2 -4
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +1 -3
- package/src/generation/placement/GridCellPlacementRule.d.ts.map +1 -1
- package/src/generation/placement/GridCellPlacementRule.js +1 -3
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.d.ts.map +1 -1
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +8 -10
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.d.ts.map +1 -1
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +6 -4
- package/src/generation/placement/action/random/weighted/WeightedGridCellAction.d.ts.map +1 -1
- package/src/generation/placement/action/random/weighted/WeightedGridCellAction.js +1 -3
- package/src/generation/rules/CellMatcher.d.ts +3 -1
- package/src/generation/rules/CellMatcher.d.ts.map +1 -1
- package/src/generation/rules/CellMatcher.js +3 -1
- package/src/generation/rules/CellMatcherFromFilter.d.ts.map +1 -1
- package/src/generation/rules/CellMatcherFromFilter.js +1 -3
- package/src/generation/rules/CellMatcherLayerBitMaskTest.d.ts.map +1 -1
- package/src/generation/rules/CellMatcherLayerBitMaskTest.js +6 -20
- package/src/generation/test_support/executeTaskTreeSync.d.ts +9 -0
- package/src/generation/test_support/executeTaskTreeSync.d.ts.map +1 -0
- package/src/generation/test_support/executeTaskTreeSync.js +78 -0
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts +2 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts.map +1 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.js +9 -6
- package/src/generation/theme/Theme.d.ts +1 -1
- package/src/generation/theme/Theme.d.ts.map +1 -1
- package/src/generation/theme/Theme.js +2 -2
- package/src/generation/theme/ThemeEngine.d.ts +3 -3
- package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
- package/src/generation/theme/ThemeEngine.js +26 -16
- package/src/generation/theme/cell/CellProcessingRule.d.ts +3 -3
- package/src/generation/theme/cell/CellProcessingRule.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRule.js +6 -10
- package/src/generation/theme/cell/CellProcessingRuleSet.d.ts +1 -1
- package/src/generation/theme/cell/CellProcessingRuleSet.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRuleSet.js +2 -2
- package/src/view/common/ListView.js +1 -1
- package/src/view/elements/BottomLeftResizeHandleView.d.ts.map +1 -1
- package/src/view/elements/BottomLeftResizeHandleView.js +13 -5
- package/src/core/font/FontAsset.d.ts.map +0 -1
- package/src/core/font/FontAssetLoader.d.ts.map +0 -1
- package/src/core/geom/3d/shape/util/shape_to_visual_entity.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +0 -1
- package/src/core/process/action/AsynchronousDelayAction.d.ts.map +0 -1
- package/src/engine/physics/computeInterceptPoint.d.ts.map +0 -1
- package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +0 -1
- package/src/engine/physics/gjk/gjk.d.ts.map +0 -1
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +0 -1
- package/src/engine/physics/gjk/minkowski_support.d.ts.map +0 -1
- package/src/engine/physics/gjk/mpr.d.ts.map +0 -1
- package/src/engine/physics/integration/quat_integrate.d.ts.map +0 -1
- package/src/engine/physics/island/union_find.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/PosedShape.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/clip_against_axis_uv.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +0 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts +0 -21
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts.map +0 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +0 -68
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts +0 -10
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts.map +0 -1
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.js +0 -17
- /package/src/{engine/physics → core/geom/3d}/gjk/NOTES.md +0 -0
- /package/src/{engine/physics → core/geom/3d}/gjk/gjk.d.ts +0 -0
- /package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.d.ts +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Subtract the pressure gradient from a MAC velocity field in place — the
|
|
5
|
+
* face-exact counterpart of the collocated
|
|
6
|
+
* {@link v3_grid_subtract_pressure_gradient}:
|
|
7
|
+
*
|
|
8
|
+
* u(face) −= p(right cell) − p(left cell) (h = 1)
|
|
9
|
+
*
|
|
10
|
+
* Per face:
|
|
11
|
+
* - both adjacent cells fluid: subtract the pressure difference.
|
|
12
|
+
* - PINNED face (either adjacent cell solid): SKIPPED — its stored value is
|
|
13
|
+
* the wall's normal-velocity boundary condition (0 for static solids,
|
|
14
|
+
* the wall speed for movers; see {@link v3_mac_compute_face_solid}) and
|
|
15
|
+
* must survive the projection. Stray deposits are prevented upstream:
|
|
16
|
+
* the mask rebuild zeroes faces on every unpinned→pinned transition and
|
|
17
|
+
* every transport/effector kernel skips pinned faces.
|
|
18
|
+
* - domain-edge face (open boundary): the missing cell is the Dirichlet
|
|
19
|
+
* ghost p = 0, so interior pressure vents flow out through the face.
|
|
20
|
+
*
|
|
21
|
+
* Together with {@link v3_mac_compute_divergence} and the unchanged 7-point
|
|
22
|
+
* solve this forms an exact discrete Helmholtz projection: solve error aside,
|
|
23
|
+
* post-projection divergence is zero — including immediately beside walls,
|
|
24
|
+
* which the collocated form could only approximate.
|
|
25
|
+
*
|
|
26
|
+
* Face grid layout: see {@link v3_mac_compute_face_solid}.
|
|
27
|
+
*
|
|
28
|
+
* @param {Float32Array} vel_u Mutated in place, (res_x+1)·res_y·res_z.
|
|
29
|
+
* @param {Float32Array} vel_v Mutated in place, res_x·(res_y+1)·res_z.
|
|
30
|
+
* @param {Float32Array} vel_w Mutated in place, res_x·res_y·(res_z+1).
|
|
31
|
+
* @param {Float32Array|Float16Array} pressure Cell-centered, from the solve.
|
|
32
|
+
* @param {Uint8Array} face_solid_x From {@link v3_mac_compute_face_solid}.
|
|
33
|
+
* @param {Uint8Array} face_solid_y
|
|
34
|
+
* @param {Uint8Array} face_solid_z
|
|
35
|
+
* @param {number} res_x
|
|
36
|
+
* @param {number} res_y
|
|
37
|
+
* @param {number} res_z
|
|
38
|
+
*/
|
|
39
|
+
export function v3_mac_subtract_pressure_gradient(vel_u, vel_v, vel_w, pressure, face_solid_x, face_solid_y, face_solid_z, res_x, res_y, res_z) {
|
|
40
|
+
const cell_count = res_x * res_y * res_z;
|
|
41
|
+
assert.greaterThanOrEqual(vel_u.length, (res_x + 1) * res_y * res_z, "vel_u covers grid");
|
|
42
|
+
assert.greaterThanOrEqual(vel_v.length, res_x * (res_y + 1) * res_z, "vel_v covers grid");
|
|
43
|
+
assert.greaterThanOrEqual(vel_w.length, res_x * res_y * (res_z + 1), "vel_w covers grid");
|
|
44
|
+
assert.greaterThanOrEqual(pressure.length, cell_count, "pressure covers grid");
|
|
45
|
+
|
|
46
|
+
const cell_slice = res_x * res_y;
|
|
47
|
+
const sx = res_x + 1;
|
|
48
|
+
|
|
49
|
+
// x-faces.
|
|
50
|
+
for (let z = 0; z < res_z; z++) {
|
|
51
|
+
const c_z = z * cell_slice;
|
|
52
|
+
const f_z = z * sx * res_y;
|
|
53
|
+
for (let y = 0; y < res_y; y++) {
|
|
54
|
+
const c_y = c_z + y * res_x;
|
|
55
|
+
const f_y = f_z + y * sx;
|
|
56
|
+
for (let x = 0; x <= res_x; x++) {
|
|
57
|
+
const f = f_y + x;
|
|
58
|
+
if (face_solid_x[f] !== 0) {
|
|
59
|
+
// Boundary condition — preserved, not zeroed.
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const p_left = x === 0 ? 0 : pressure[c_y + x - 1];
|
|
63
|
+
const p_right = x === res_x ? 0 : pressure[c_y + x];
|
|
64
|
+
vel_u[f] -= p_right - p_left;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// y-faces.
|
|
70
|
+
for (let z = 0; z < res_z; z++) {
|
|
71
|
+
const c_z = z * cell_slice;
|
|
72
|
+
const f_z = z * res_x * (res_y + 1);
|
|
73
|
+
for (let y = 0; y <= res_y; y++) {
|
|
74
|
+
const f_y = f_z + y * res_x;
|
|
75
|
+
const c_below = c_z + (y - 1) * res_x;
|
|
76
|
+
const c_above = c_z + y * res_x;
|
|
77
|
+
for (let x = 0; x < res_x; x++) {
|
|
78
|
+
const f = f_y + x;
|
|
79
|
+
if (face_solid_y[f] !== 0) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const p_below = y === 0 ? 0 : pressure[c_below + x];
|
|
83
|
+
const p_above = y === res_y ? 0 : pressure[c_above + x];
|
|
84
|
+
vel_v[f] -= p_above - p_below;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// z-faces.
|
|
90
|
+
for (let z = 0; z <= res_z; z++) {
|
|
91
|
+
const f_z = z * cell_slice;
|
|
92
|
+
const c_near = (z - 1) * cell_slice;
|
|
93
|
+
const c_far = z * cell_slice;
|
|
94
|
+
for (let i = 0; i < cell_slice; i++) {
|
|
95
|
+
const f = f_z + i;
|
|
96
|
+
if (face_solid_z[f] !== 0) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const p_near = z === 0 ? 0 : pressure[c_near + i];
|
|
100
|
+
const p_far = z === res_z ? 0 : pressure[c_far + i];
|
|
101
|
+
vel_w[f] -= p_far - p_near;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -63,5 +63,34 @@ export function world_inverse_inertia_apply(result: number[] | Float64Array, res
|
|
|
63
63
|
* @param {number} vy
|
|
64
64
|
* @param {number} vz
|
|
65
65
|
*/
|
|
66
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Quadratic-form contribution of one body to a unit-axis velocity
|
|
68
|
+
* constraint's effective mass: `(r × axis)ᵀ · I_w⁻¹ · (r × axis)`, where `r`
|
|
69
|
+
* is the body-relative application point. The full constraint denominator is
|
|
70
|
+
* `invM_A + invM_B + contribution_A + contribution_B`.
|
|
71
|
+
*
|
|
72
|
+
* The shared kernel behind the contact/joint solver's SoA path and the
|
|
73
|
+
* raycast-vehicle's component path — each previously inlined the cross
|
|
74
|
+
* product + {@link world_inverse_inertia_apply_raw} + dot themselves.
|
|
75
|
+
* Identical operation order in every caller keeps the paths bit-identical
|
|
76
|
+
* (the determinism contract).
|
|
77
|
+
*
|
|
78
|
+
* @param {number} ix
|
|
79
|
+
* @param {number} iy
|
|
80
|
+
* @param {number} iz Body-frame inverse inertia diagonal.
|
|
81
|
+
* @param {number} qx
|
|
82
|
+
* @param {number} qy
|
|
83
|
+
* @param {number} qz
|
|
84
|
+
* @param {number} qw Body orientation as a unit quaternion.
|
|
85
|
+
* @param {number} rx
|
|
86
|
+
* @param {number} ry
|
|
87
|
+
* @param {number} rz Body-relative application point.
|
|
88
|
+
* @param {number} ax
|
|
89
|
+
* @param {number} ay
|
|
90
|
+
* @param {number} az Unit constraint axis.
|
|
91
|
+
* @param {number[]|Float64Array} scratch length >= 3, clobbered
|
|
92
|
+
* @returns {number}
|
|
93
|
+
*/
|
|
94
|
+
export function angular_effective_mass_raw(ix: number, iy: number, iz: number, qx: number, qy: number, qz: number, qw: number, rx: number, ry: number, rz: number, ax: number, ay: number, az: number, scratch: number[] | Float64Array): number;
|
|
95
|
+
export function world_inverse_inertia_apply_raw(result: any, result_offset: any, ix: any, iy: any, iz: any, qx: any, qy: any, qz: any, qw: any, vx: any, vy: any, vz: any): void;
|
|
67
96
|
//# sourceMappingURL=world_inverse_inertia.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world_inverse_inertia.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inertia/world_inverse_inertia.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,oDAVW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,qBACN;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,YAEjC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,MAE5C,MAAM,MACN,MAAM,MACN,MAAM,QAkBhB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,
|
|
1
|
+
{"version":3,"file":"world_inverse_inertia.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/inertia/world_inverse_inertia.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,oDAVW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,qBACN;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,YAEjC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,MAE5C,MAAM,MACN,MAAM,MACN,MAAM,QAkBhB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,+CAhBW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,WACN,MAAM,EAAE,GAAC,YAAY,GACnB,MAAM,CAgBlB;AAED,iLA0CC"}
|
|
@@ -1,116 +1,160 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Apply the world-frame inverse inertia tensor of a rigid body to a world-space
|
|
3
|
-
* vector and write the result.
|
|
4
|
-
*
|
|
5
|
-
* Body-frame inverse inertia is supplied as a diagonal in principal axes
|
|
6
|
-
* (a Vector3-like with `.x .y .z`). World inverse inertia is
|
|
7
|
-
* `I_w⁻¹ = R · diag · R^T` where `R` is the body's orientation. We compute
|
|
8
|
-
* `result = R · diag · R^T · v` without materialising the full 3x3 matrix:
|
|
9
|
-
*
|
|
10
|
-
* 1. `v_body = R^T · v` (rotate v into body frame)
|
|
11
|
-
* 2. scale component-wise by the diagonal
|
|
12
|
-
* 3. `result = R · v_body_scaled`
|
|
13
|
-
*
|
|
14
|
-
* Quaternion-rotate-vector uses the standard `q · v · q*` identity. Inverse
|
|
15
|
-
* rotation uses the conjugate quaternion.
|
|
16
|
-
*
|
|
17
|
-
* Sphere short-circuit: if the inverse inertia is isotropic (ix === iy === iz),
|
|
18
|
-
* the rotation cancels and `result = ix * v`. Skip the trig and save the work.
|
|
19
|
-
*
|
|
20
|
-
* Decoupled from RigidBody / Transform on purpose — callers pass only what
|
|
21
|
-
* is actually read. Lets `compute_penetration` and other standalone
|
|
22
|
-
* geometry helpers reuse this without manufacturing a body.
|
|
23
|
-
*
|
|
24
|
-
* @param {number[]|Float64Array} result length >= 3
|
|
25
|
-
* @param {number} result_offset
|
|
26
|
-
* @param {{x: number, y: number, z: number}} inv_inertia_local
|
|
27
|
-
* Body-frame inverse inertia diagonal (typically `rb.inverseInertiaLocal`).
|
|
28
|
-
* @param {{x: number, y: number, z: number, w: number}} rotation
|
|
29
|
-
* Body orientation as a unit quaternion (typically `transform.rotation`).
|
|
30
|
-
* @param {number} vx
|
|
31
|
-
* @param {number} vy
|
|
32
|
-
* @param {number} vz
|
|
33
|
-
*/
|
|
34
|
-
export function world_inverse_inertia_apply(
|
|
35
|
-
result, result_offset,
|
|
36
|
-
inv_inertia_local, rotation,
|
|
37
|
-
vx, vy, vz
|
|
38
|
-
) {
|
|
39
|
-
// Thin object-reading wrapper over the raw-float kernel. Reads the
|
|
40
|
-
// quaternion fields eagerly (harmless in the isotropic short-circuit,
|
|
41
|
-
// where they're ignored) so the kernel is the single source of the math —
|
|
42
|
-
// keeping object callers and the data-oriented (SoA) solver path
|
|
43
|
-
// bit-identical.
|
|
44
|
-
world_inverse_inertia_apply_raw(
|
|
45
|
-
result, result_offset,
|
|
46
|
-
inv_inertia_local.x, inv_inertia_local.y, inv_inertia_local.z,
|
|
47
|
-
rotation.x, rotation.y, rotation.z, rotation.w,
|
|
48
|
-
vx, vy, vz
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Raw-float counterpart of {@link world_inverse_inertia_apply}: the same
|
|
54
|
-
* `I_w⁻¹ = R · diag · R^T` application, with the inverse-inertia diagonal and
|
|
55
|
-
* orientation quaternion passed as scalars rather than read off
|
|
56
|
-
* `{x,y,z}` / `{x,y,z,w}` objects. The data-oriented contact / joint solver
|
|
57
|
-
* reads these straight out of its `SolverBodyState` typed array, avoiding the
|
|
58
|
-
* per-impulse object dereference on the hot path. The arithmetic is identical
|
|
59
|
-
* to the object version (same operation order), so results are bit-identical.
|
|
60
|
-
*
|
|
61
|
-
* @param {number[]|Float64Array} result length >= 3
|
|
62
|
-
* @param {number} result_offset
|
|
63
|
-
* @param {number} ix
|
|
64
|
-
* @param {number} iy
|
|
65
|
-
* @param {number} iz Body-frame inverse inertia diagonal.
|
|
66
|
-
* @param {number} qx
|
|
67
|
-
* @param {number} qy
|
|
68
|
-
* @param {number} qz
|
|
69
|
-
* @param {number} qw Body orientation as a unit quaternion.
|
|
70
|
-
* @param {number} vx
|
|
71
|
-
* @param {number} vy
|
|
72
|
-
* @param {number} vz
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Apply the world-frame inverse inertia tensor of a rigid body to a world-space
|
|
3
|
+
* vector and write the result.
|
|
4
|
+
*
|
|
5
|
+
* Body-frame inverse inertia is supplied as a diagonal in principal axes
|
|
6
|
+
* (a Vector3-like with `.x .y .z`). World inverse inertia is
|
|
7
|
+
* `I_w⁻¹ = R · diag · R^T` where `R` is the body's orientation. We compute
|
|
8
|
+
* `result = R · diag · R^T · v` without materialising the full 3x3 matrix:
|
|
9
|
+
*
|
|
10
|
+
* 1. `v_body = R^T · v` (rotate v into body frame)
|
|
11
|
+
* 2. scale component-wise by the diagonal
|
|
12
|
+
* 3. `result = R · v_body_scaled`
|
|
13
|
+
*
|
|
14
|
+
* Quaternion-rotate-vector uses the standard `q · v · q*` identity. Inverse
|
|
15
|
+
* rotation uses the conjugate quaternion.
|
|
16
|
+
*
|
|
17
|
+
* Sphere short-circuit: if the inverse inertia is isotropic (ix === iy === iz),
|
|
18
|
+
* the rotation cancels and `result = ix * v`. Skip the trig and save the work.
|
|
19
|
+
*
|
|
20
|
+
* Decoupled from RigidBody / Transform on purpose — callers pass only what
|
|
21
|
+
* is actually read. Lets `compute_penetration` and other standalone
|
|
22
|
+
* geometry helpers reuse this without manufacturing a body.
|
|
23
|
+
*
|
|
24
|
+
* @param {number[]|Float64Array} result length >= 3
|
|
25
|
+
* @param {number} result_offset
|
|
26
|
+
* @param {{x: number, y: number, z: number}} inv_inertia_local
|
|
27
|
+
* Body-frame inverse inertia diagonal (typically `rb.inverseInertiaLocal`).
|
|
28
|
+
* @param {{x: number, y: number, z: number, w: number}} rotation
|
|
29
|
+
* Body orientation as a unit quaternion (typically `transform.rotation`).
|
|
30
|
+
* @param {number} vx
|
|
31
|
+
* @param {number} vy
|
|
32
|
+
* @param {number} vz
|
|
33
|
+
*/
|
|
34
|
+
export function world_inverse_inertia_apply(
|
|
35
|
+
result, result_offset,
|
|
36
|
+
inv_inertia_local, rotation,
|
|
37
|
+
vx, vy, vz
|
|
38
|
+
) {
|
|
39
|
+
// Thin object-reading wrapper over the raw-float kernel. Reads the
|
|
40
|
+
// quaternion fields eagerly (harmless in the isotropic short-circuit,
|
|
41
|
+
// where they're ignored) so the kernel is the single source of the math —
|
|
42
|
+
// keeping object callers and the data-oriented (SoA) solver path
|
|
43
|
+
// bit-identical.
|
|
44
|
+
world_inverse_inertia_apply_raw(
|
|
45
|
+
result, result_offset,
|
|
46
|
+
inv_inertia_local.x, inv_inertia_local.y, inv_inertia_local.z,
|
|
47
|
+
rotation.x, rotation.y, rotation.z, rotation.w,
|
|
48
|
+
vx, vy, vz
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Raw-float counterpart of {@link world_inverse_inertia_apply}: the same
|
|
54
|
+
* `I_w⁻¹ = R · diag · R^T` application, with the inverse-inertia diagonal and
|
|
55
|
+
* orientation quaternion passed as scalars rather than read off
|
|
56
|
+
* `{x,y,z}` / `{x,y,z,w}` objects. The data-oriented contact / joint solver
|
|
57
|
+
* reads these straight out of its `SolverBodyState` typed array, avoiding the
|
|
58
|
+
* per-impulse object dereference on the hot path. The arithmetic is identical
|
|
59
|
+
* to the object version (same operation order), so results are bit-identical.
|
|
60
|
+
*
|
|
61
|
+
* @param {number[]|Float64Array} result length >= 3
|
|
62
|
+
* @param {number} result_offset
|
|
63
|
+
* @param {number} ix
|
|
64
|
+
* @param {number} iy
|
|
65
|
+
* @param {number} iz Body-frame inverse inertia diagonal.
|
|
66
|
+
* @param {number} qx
|
|
67
|
+
* @param {number} qy
|
|
68
|
+
* @param {number} qz
|
|
69
|
+
* @param {number} qw Body orientation as a unit quaternion.
|
|
70
|
+
* @param {number} vx
|
|
71
|
+
* @param {number} vy
|
|
72
|
+
* @param {number} vz
|
|
73
|
+
*/
|
|
74
|
+
/**
|
|
75
|
+
* Quadratic-form contribution of one body to a unit-axis velocity
|
|
76
|
+
* constraint's effective mass: `(r × axis)ᵀ · I_w⁻¹ · (r × axis)`, where `r`
|
|
77
|
+
* is the body-relative application point. The full constraint denominator is
|
|
78
|
+
* `invM_A + invM_B + contribution_A + contribution_B`.
|
|
79
|
+
*
|
|
80
|
+
* The shared kernel behind the contact/joint solver's SoA path and the
|
|
81
|
+
* raycast-vehicle's component path — each previously inlined the cross
|
|
82
|
+
* product + {@link world_inverse_inertia_apply_raw} + dot themselves.
|
|
83
|
+
* Identical operation order in every caller keeps the paths bit-identical
|
|
84
|
+
* (the determinism contract).
|
|
85
|
+
*
|
|
86
|
+
* @param {number} ix
|
|
87
|
+
* @param {number} iy
|
|
88
|
+
* @param {number} iz Body-frame inverse inertia diagonal.
|
|
89
|
+
* @param {number} qx
|
|
90
|
+
* @param {number} qy
|
|
91
|
+
* @param {number} qz
|
|
92
|
+
* @param {number} qw Body orientation as a unit quaternion.
|
|
93
|
+
* @param {number} rx
|
|
94
|
+
* @param {number} ry
|
|
95
|
+
* @param {number} rz Body-relative application point.
|
|
96
|
+
* @param {number} ax
|
|
97
|
+
* @param {number} ay
|
|
98
|
+
* @param {number} az Unit constraint axis.
|
|
99
|
+
* @param {number[]|Float64Array} scratch length >= 3, clobbered
|
|
100
|
+
* @returns {number}
|
|
101
|
+
*/
|
|
102
|
+
export function angular_effective_mass_raw(
|
|
103
|
+
ix, iy, iz,
|
|
104
|
+
qx, qy, qz, qw,
|
|
105
|
+
rx, ry, rz,
|
|
106
|
+
ax, ay, az,
|
|
107
|
+
scratch
|
|
108
|
+
) {
|
|
109
|
+
const cx = ry * az - rz * ay;
|
|
110
|
+
const cy = rz * ax - rx * az;
|
|
111
|
+
const cz = rx * ay - ry * ax;
|
|
112
|
+
|
|
113
|
+
world_inverse_inertia_apply_raw(scratch, 0, ix, iy, iz, qx, qy, qz, qw, cx, cy, cz);
|
|
114
|
+
|
|
115
|
+
return cx * scratch[0] + cy * scratch[1] + cz * scratch[2];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function world_inverse_inertia_apply_raw(
|
|
119
|
+
result, result_offset,
|
|
120
|
+
ix, iy, iz,
|
|
121
|
+
qx, qy, qz, qw,
|
|
122
|
+
vx, vy, vz
|
|
123
|
+
) {
|
|
124
|
+
|
|
125
|
+
if (ix === iy && iy === iz) {
|
|
126
|
+
// Isotropic — rotation cancels.
|
|
127
|
+
result[result_offset] = vx * ix;
|
|
128
|
+
result[result_offset + 1] = vy * ix;
|
|
129
|
+
result[result_offset + 2] = vz * ix;
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Step 1: v_body = R^T · v. R^T corresponds to applying the conjugate
|
|
134
|
+
// quaternion (-qx, -qy, -qz, qw). Inlined for V8 inliner — see
|
|
135
|
+
// PosedShape3D.support and core/geom/vec3/v3_quat3_apply_inverse.js
|
|
136
|
+
// for the canonical form.
|
|
137
|
+
const tx = qw * vx - qy * vz + qz * vy;
|
|
138
|
+
const ty = qw * vy - qz * vx + qx * vz;
|
|
139
|
+
const tz = qw * vz - qx * vy + qy * vx;
|
|
140
|
+
const tw = qx * vx + qy * vy + qz * vz;
|
|
141
|
+
|
|
142
|
+
const vbx = tx * qw + tw * qx + ty * qz - tz * qy;
|
|
143
|
+
const vby = ty * qw + tw * qy + tz * qx - tx * qz;
|
|
144
|
+
const vbz = tz * qw + tw * qz + tx * qy - ty * qx;
|
|
145
|
+
|
|
146
|
+
// Step 2: scale by the principal-frame diagonal.
|
|
147
|
+
const sx = vbx * ix;
|
|
148
|
+
const sy = vby * iy;
|
|
149
|
+
const sz = vbz * iz;
|
|
150
|
+
|
|
151
|
+
// Step 3: result = R · scaled = q · scaled · q*. Inlined likewise.
|
|
152
|
+
const ux = qw * sx + qy * sz - qz * sy;
|
|
153
|
+
const uy = qw * sy + qz * sx - qx * sz;
|
|
154
|
+
const uz = qw * sz + qx * sy - qy * sx;
|
|
155
|
+
const uw = -qx * sx - qy * sy - qz * sz;
|
|
156
|
+
|
|
157
|
+
result[result_offset] = ux * qw - uw * qx - uy * qz + uz * qy;
|
|
158
|
+
result[result_offset + 1] = uy * qw - uw * qy - uz * qx + ux * qz;
|
|
159
|
+
result[result_offset + 2] = uz * qw - uw * qz - ux * qy + uy * qx;
|
|
160
|
+
}
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
import { BodyKind } from "../ecs/BodyKind.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
SBS_QX, SBS_QY, SBS_QZ, SBS_QW,
|
|
5
|
-
SBS_LV_X, SBS_LV_Y, SBS_LV_Z,
|
|
6
|
-
SBS_AV_X, SBS_AV_Y, SBS_AV_Z,
|
|
7
|
-
} from "../body/SolverBodyState.js";
|
|
8
|
-
|
|
9
|
-
const scratch_q = new Float64Array(4);
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Integrate `transform.position` and `transform.rotation` from the body's
|
|
13
|
-
* current linear and angular velocity over a step `dt`. Static bodies are
|
|
14
|
-
* not touched.
|
|
15
|
-
*
|
|
16
|
-
* The trailing six arguments are the body's *pseudo-velocity*: the
|
|
17
|
-
* position-pass output from the constraint solver (Catto split-impulse).
|
|
18
|
-
* Pseudo-velocity exists only inside the step — it's folded into the
|
|
19
|
-
* integration so the position update reflects depth correction, then
|
|
20
|
-
* implicitly discarded. The body's persistent `linearVelocity` /
|
|
21
|
-
* `angularVelocity` (which carry restitution + warm-start across steps)
|
|
22
|
-
* are never contaminated by it.
|
|
23
|
-
*
|
|
24
|
-
* Callers with no position-pass output should pass zeros for the six
|
|
25
|
-
* pseudo arguments — folding zero is free (one add per axis).
|
|
26
|
-
*
|
|
27
|
-
* KinematicPosition bodies are treated like Dynamic for the position
|
|
28
|
-
* update — if the gameplay code is driving them, their velocity is
|
|
29
|
-
* whatever the user wrote (typically zero); the step is effectively a
|
|
30
|
-
* no-op in that case. KinematicVelocity bodies advance under their
|
|
31
|
-
* user-set velocity.
|
|
32
|
-
*
|
|
33
|
-
* Persistent linear / angular velocity is read from the data-oriented
|
|
34
|
-
* {@link SolverBodyState} span (`ss` / `base`); the pose remains authoritative
|
|
35
|
-
* on the `Transform` and is written through `.set()` so its onChanged
|
|
36
|
-
* subscribers and the per-substep concave re-detection keep seeing the moved
|
|
37
|
-
* pose. The integrated orientation is mirrored back into the solver state so
|
|
38
|
-
* the next substep's impulse loop evaluates world inertia against the current
|
|
39
|
-
* frame.
|
|
40
|
-
*
|
|
41
|
-
* @param {Float64Array} ss solver-body-state data array
|
|
42
|
-
* @param {number} base `body_index * SBS_STRIDE`
|
|
43
|
-
* @param {RigidBody} rb
|
|
44
|
-
* @param {Transform} transform
|
|
45
|
-
* @param {number} dt
|
|
46
|
-
* @param {number} ps_lin_x pseudo-linear-velocity x (0 when no contacts)
|
|
47
|
-
* @param {number} ps_lin_y
|
|
48
|
-
* @param {number} ps_lin_z
|
|
49
|
-
* @param {number} ps_ang_x pseudo-angular-velocity x (0 when no contacts)
|
|
50
|
-
* @param {number} ps_ang_y
|
|
51
|
-
* @param {number} ps_ang_z
|
|
52
|
-
*/
|
|
53
|
-
export function integrate_position(
|
|
54
|
-
ss, base, rb, transform, dt,
|
|
55
|
-
ps_lin_x, ps_lin_y, ps_lin_z,
|
|
56
|
-
ps_ang_x, ps_ang_y, ps_ang_z,
|
|
57
|
-
) {
|
|
58
|
-
if (rb.kind === BodyKind.Static) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const p = transform.position;
|
|
63
|
-
|
|
64
|
-
// Combined integration velocity: persistent + pseudo. The pseudo
|
|
65
|
-
// contribution exists only for this step and never lands in the velocity.
|
|
66
|
-
const vx = ss[base + SBS_LV_X] + ps_lin_x;
|
|
67
|
-
const vy = ss[base + SBS_LV_Y] + ps_lin_y;
|
|
68
|
-
const vz = ss[base + SBS_LV_Z] + ps_lin_z;
|
|
69
|
-
|
|
70
|
-
// The write goes through .set() so Transform's onChanged subscribers
|
|
71
|
-
// (matrix recompose, parent/child sync, viewport position, fog-of-war
|
|
72
|
-
// reveal) fire — pose stays authoritative on the Transform.
|
|
73
|
-
p.set(
|
|
74
|
-
p[0] + vx * dt,
|
|
75
|
-
p[1] + vy * dt,
|
|
76
|
-
p[2] + vz * dt
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
const wx = ss[base + SBS_AV_X] + ps_ang_x;
|
|
80
|
-
const wy = ss[base + SBS_AV_Y] + ps_ang_y;
|
|
81
|
-
const wz = ss[base + SBS_AV_Z] + ps_ang_z;
|
|
82
|
-
if (wx !== 0 || wy !== 0 || wz !== 0) {
|
|
83
|
-
const q = transform.rotation;
|
|
84
|
-
|
|
85
|
-
scratch_q,
|
|
86
|
-
q[0], q[1], q[2], q[3],
|
|
87
|
-
wx, wy, wz,
|
|
88
|
-
dt
|
|
89
|
-
);
|
|
90
|
-
q.set(scratch_q[0], scratch_q[1], scratch_q[2], scratch_q[3]);
|
|
91
|
-
// Mirror the moved orientation into the solver state.
|
|
92
|
-
ss[base + SBS_QX] = scratch_q[0];
|
|
93
|
-
ss[base + SBS_QY] = scratch_q[1];
|
|
94
|
-
ss[base + SBS_QZ] = scratch_q[2];
|
|
95
|
-
ss[base + SBS_QW] = scratch_q[3];
|
|
96
|
-
}
|
|
97
|
-
}
|
|
1
|
+
import { BodyKind } from "../ecs/BodyKind.js";
|
|
2
|
+
import { quat3_integrate } from "../../../core/geom/3d/quaternion/quat3_integrate.js";
|
|
3
|
+
import {
|
|
4
|
+
SBS_QX, SBS_QY, SBS_QZ, SBS_QW,
|
|
5
|
+
SBS_LV_X, SBS_LV_Y, SBS_LV_Z,
|
|
6
|
+
SBS_AV_X, SBS_AV_Y, SBS_AV_Z,
|
|
7
|
+
} from "../body/SolverBodyState.js";
|
|
8
|
+
|
|
9
|
+
const scratch_q = new Float64Array(4);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Integrate `transform.position` and `transform.rotation` from the body's
|
|
13
|
+
* current linear and angular velocity over a step `dt`. Static bodies are
|
|
14
|
+
* not touched.
|
|
15
|
+
*
|
|
16
|
+
* The trailing six arguments are the body's *pseudo-velocity*: the
|
|
17
|
+
* position-pass output from the constraint solver (Catto split-impulse).
|
|
18
|
+
* Pseudo-velocity exists only inside the step — it's folded into the
|
|
19
|
+
* integration so the position update reflects depth correction, then
|
|
20
|
+
* implicitly discarded. The body's persistent `linearVelocity` /
|
|
21
|
+
* `angularVelocity` (which carry restitution + warm-start across steps)
|
|
22
|
+
* are never contaminated by it.
|
|
23
|
+
*
|
|
24
|
+
* Callers with no position-pass output should pass zeros for the six
|
|
25
|
+
* pseudo arguments — folding zero is free (one add per axis).
|
|
26
|
+
*
|
|
27
|
+
* KinematicPosition bodies are treated like Dynamic for the position
|
|
28
|
+
* update — if the gameplay code is driving them, their velocity is
|
|
29
|
+
* whatever the user wrote (typically zero); the step is effectively a
|
|
30
|
+
* no-op in that case. KinematicVelocity bodies advance under their
|
|
31
|
+
* user-set velocity.
|
|
32
|
+
*
|
|
33
|
+
* Persistent linear / angular velocity is read from the data-oriented
|
|
34
|
+
* {@link SolverBodyState} span (`ss` / `base`); the pose remains authoritative
|
|
35
|
+
* on the `Transform` and is written through `.set()` so its onChanged
|
|
36
|
+
* subscribers and the per-substep concave re-detection keep seeing the moved
|
|
37
|
+
* pose. The integrated orientation is mirrored back into the solver state so
|
|
38
|
+
* the next substep's impulse loop evaluates world inertia against the current
|
|
39
|
+
* frame.
|
|
40
|
+
*
|
|
41
|
+
* @param {Float64Array} ss solver-body-state data array
|
|
42
|
+
* @param {number} base `body_index * SBS_STRIDE`
|
|
43
|
+
* @param {RigidBody} rb
|
|
44
|
+
* @param {Transform} transform
|
|
45
|
+
* @param {number} dt
|
|
46
|
+
* @param {number} ps_lin_x pseudo-linear-velocity x (0 when no contacts)
|
|
47
|
+
* @param {number} ps_lin_y
|
|
48
|
+
* @param {number} ps_lin_z
|
|
49
|
+
* @param {number} ps_ang_x pseudo-angular-velocity x (0 when no contacts)
|
|
50
|
+
* @param {number} ps_ang_y
|
|
51
|
+
* @param {number} ps_ang_z
|
|
52
|
+
*/
|
|
53
|
+
export function integrate_position(
|
|
54
|
+
ss, base, rb, transform, dt,
|
|
55
|
+
ps_lin_x, ps_lin_y, ps_lin_z,
|
|
56
|
+
ps_ang_x, ps_ang_y, ps_ang_z,
|
|
57
|
+
) {
|
|
58
|
+
if (rb.kind === BodyKind.Static) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const p = transform.position;
|
|
63
|
+
|
|
64
|
+
// Combined integration velocity: persistent + pseudo. The pseudo
|
|
65
|
+
// contribution exists only for this step and never lands in the velocity.
|
|
66
|
+
const vx = ss[base + SBS_LV_X] + ps_lin_x;
|
|
67
|
+
const vy = ss[base + SBS_LV_Y] + ps_lin_y;
|
|
68
|
+
const vz = ss[base + SBS_LV_Z] + ps_lin_z;
|
|
69
|
+
|
|
70
|
+
// The write goes through .set() so Transform's onChanged subscribers
|
|
71
|
+
// (matrix recompose, parent/child sync, viewport position, fog-of-war
|
|
72
|
+
// reveal) fire — pose stays authoritative on the Transform.
|
|
73
|
+
p.set(
|
|
74
|
+
p[0] + vx * dt,
|
|
75
|
+
p[1] + vy * dt,
|
|
76
|
+
p[2] + vz * dt
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const wx = ss[base + SBS_AV_X] + ps_ang_x;
|
|
80
|
+
const wy = ss[base + SBS_AV_Y] + ps_ang_y;
|
|
81
|
+
const wz = ss[base + SBS_AV_Z] + ps_ang_z;
|
|
82
|
+
if (wx !== 0 || wy !== 0 || wz !== 0) {
|
|
83
|
+
const q = transform.rotation;
|
|
84
|
+
quat3_integrate(
|
|
85
|
+
scratch_q,
|
|
86
|
+
q[0], q[1], q[2], q[3],
|
|
87
|
+
wx, wy, wz,
|
|
88
|
+
dt
|
|
89
|
+
);
|
|
90
|
+
q.set(scratch_q[0], scratch_q[1], scratch_q[2], scratch_q[3]);
|
|
91
|
+
// Mirror the moved orientation into the solver state.
|
|
92
|
+
ss[base + SBS_QX] = scratch_q[0];
|
|
93
|
+
ss[base + SBS_QY] = scratch_q[1];
|
|
94
|
+
ss[base + SBS_QZ] = scratch_q[2];
|
|
95
|
+
ss[base + SBS_QW] = scratch_q[3];
|
|
96
|
+
}
|
|
97
|
+
}
|