@woosh/meep-engine 3.40.0 → 3.42.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/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/selection/editor_pick.d.ts.map +1 -1
- package/editor/selection/editor_pick.js +2 -1
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +7 -1
- package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
- package/editor/tools/engine/ToolEngine.js +10 -0
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +7 -20
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
- package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
- package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
- package/editor/view/ecs/EntityEditor.js +3 -1
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +28 -12
- package/package.json +1 -1
- package/samples/engine/first-scene/index.html +4 -1
- package/samples/engine/first-scene/main.js +14 -9
- package/src/core/binary/utf8/utf8_decode.js +3 -3
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
- package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
- package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
- package/src/core/collection/RingBuffer.d.ts.map +1 -1
- package/src/core/collection/RingBuffer.js +4 -0
- package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
- package/src/core/collection/array/array_contains_duplicates.js +2 -1
- package/src/core/collection/array/array_copy.d.ts.map +1 -1
- package/src/core/collection/array/array_copy.js +23 -0
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
- package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
- package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
- package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
- package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
- package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
- package/src/core/collection/array/weightedRandomFromArray.js +9 -1
- package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
- package/src/core/collection/heap/BinaryHeap.js +4 -0
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +4 -2
- package/src/core/collection/set/ArraySet.js +1 -1
- package/src/core/collection/set/HashSet.d.ts +1 -1
- package/src/core/collection/set/HashSet.d.ts.map +1 -1
- package/src/core/collection/set/HashSet.js +4 -2
- package/src/core/debug/matchers/IsEqual.js +1 -1
- package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
- package/src/core/debug/matchers/IsIterableContaining.js +61 -74
- package/src/core/events/signal/SignalBinding.js +101 -101
- package/src/core/function/extractFunctionBody.js +13 -13
- package/src/core/function/objectsEqual.d.ts.map +1 -1
- package/src/core/function/objectsEqual.js +15 -14
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +20 -0
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
- package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
- package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
- package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
- package/src/core/math/noise/curl_noise_3dt.js +20 -10
- package/src/core/math/noise/sdnoise.d.ts +16 -5
- package/src/core/math/noise/sdnoise.d.ts.map +1 -1
- package/src/core/math/noise/sdnoise.js +43 -9
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +6 -2
- package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +6 -1
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
- package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
- package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -0
- package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
- package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/WallRun.js +13 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
- package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
- package/src/engine/ecs/EntityManager.d.ts +9 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +44 -42
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
- package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
- package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
- package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
- package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoal.js +83 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
- package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
- package/src/engine/ecs/ik/PLAN.md +179 -0
- package/src/engine/ecs/parent/EntityNode.js +3 -3
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
- package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
- package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +9 -2
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
- package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -139
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
- package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
- package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
- package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +17 -0
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
- package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +360 -352
- package/src/engine/graphics3/WaterSystem.d.ts +12 -3
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +78 -46
- package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.js +29 -4
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
- package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
- package/src/engine/physics/cloth/PLAN.md +16 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
- package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +1 -83
- package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
- package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbe.js +103 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
- package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
- package/src/engine/ui/DraggableAspect.d.ts +5 -1
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +61 -4
- package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
- package/src/format/image/avif/heif/ItemProperty.js +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
- package/src/shade/playground/water_refraction/README.md +10 -11
- package/src/shade/playground/water_refraction/main.js +9 -8
- package/src/shade/playground/water_refraction/world.js +1 -1
- package/src/shade/playground/water_surface/README.md +43 -0
- package/src/shade/playground/water_surface/index.html +30 -0
- package/src/shade/playground/water_surface/main.d.ts +2 -0
- package/src/shade/playground/water_surface/main.d.ts.map +1 -0
- package/src/shade/playground/water_surface/main.js +154 -0
- package/src/shade/playground/water_surface/world.d.ts +44 -0
- package/src/shade/playground/water_surface/world.d.ts.map +1 -0
- package/src/shade/playground/water_surface/world.js +160 -0
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +10 -4
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +251 -23
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
- package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
- package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
- package/src/shade/renderer/binding/BufferBinding.js +2 -2
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
- package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
- package/src/shade/renderer/water/shader_water.d.ts +0 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +201 -72
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
- package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
- package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
- package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
- package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKConstraint.js +0 -95
- package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
- package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKProblem.js +0 -58
- package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
- package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/IKSolver.js +0 -9
- package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
- package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematics.js +0 -119
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
- package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Finds where a cast from a reference meets the world, and puts the entity it is on there.
|
|
3
|
+
*
|
|
4
|
+
* Every tick {@link ContactProbeSystem} casts a sphere of {@link radius} — a ray, at 0 — from the
|
|
5
|
+
* reference's world position plus {@link offset}, along {@link direction}, for {@link distance}, through
|
|
6
|
+
* the physics system's colliders. On a hit the entity is placed at the contact on the surface, turned
|
|
7
|
+
* as the reference is and tilted so the reference's up is the surface's normal. On a miss it is placed
|
|
8
|
+
* where the reference is. It knows nothing about who reads it: a foot reaching for the ground, a decal,
|
|
9
|
+
* an AI checking its footing.
|
|
10
|
+
*
|
|
11
|
+
* - The entity is placed through its own {@link TransformAttachment}, whose parent is up to the rig.
|
|
12
|
+
* - The character's own colliders are passed through: those whose lifetime ({@link ParentEntity})
|
|
13
|
+
* leads to the same root as the probe's own.
|
|
14
|
+
* - The reference may be a bone a clip drives: its pose is evaluated exactly, as the GPU shows it. It
|
|
15
|
+
* must not be a bone a CPU writer holds (IK, cloth), or the probe would read that writer's answer
|
|
16
|
+
* and the writer would chase its own output.
|
|
17
|
+
*
|
|
18
|
+
* Entity ids are transient, so this is never saved.
|
|
19
|
+
*
|
|
20
|
+
* @author Alex Goldring
|
|
21
|
+
* @copyright Company Named Limited (c) 2026
|
|
22
|
+
*/
|
|
23
|
+
export class ContactProbe {
|
|
24
|
+
/**
|
|
25
|
+
* @param {{reference:number, offset:number[], direction:number[], distance:number, radius:number}} options
|
|
26
|
+
* every field required
|
|
27
|
+
* @returns {ContactProbe}
|
|
28
|
+
*/
|
|
29
|
+
static from({ reference, offset, direction, distance, radius }: {
|
|
30
|
+
reference: number;
|
|
31
|
+
offset: number[];
|
|
32
|
+
direction: number[];
|
|
33
|
+
distance: number;
|
|
34
|
+
radius: number;
|
|
35
|
+
}): ContactProbe;
|
|
36
|
+
/**
|
|
37
|
+
* The entity the cast starts from.
|
|
38
|
+
* @type {number}
|
|
39
|
+
*/
|
|
40
|
+
reference: number;
|
|
41
|
+
/**
|
|
42
|
+
* Where the cast starts, relative to the reference's world position, in world axes.
|
|
43
|
+
* @readonly
|
|
44
|
+
* @type {Float64Array}
|
|
45
|
+
*/
|
|
46
|
+
readonly offset: Float64Array;
|
|
47
|
+
/**
|
|
48
|
+
* Which way the cast goes, in world, of unit length.
|
|
49
|
+
* @readonly
|
|
50
|
+
* @type {Float64Array}
|
|
51
|
+
*/
|
|
52
|
+
readonly direction: Float64Array;
|
|
53
|
+
/**
|
|
54
|
+
* How far the cast reaches.
|
|
55
|
+
* @type {number}
|
|
56
|
+
*/
|
|
57
|
+
distance: number;
|
|
58
|
+
/**
|
|
59
|
+
* The radius of the sphere cast; 0 casts a ray.
|
|
60
|
+
* @type {number}
|
|
61
|
+
*/
|
|
62
|
+
radius: number;
|
|
63
|
+
/**
|
|
64
|
+
* Whether the last cast met anything. Written by {@link ContactProbeSystem}.
|
|
65
|
+
* @type {boolean}
|
|
66
|
+
*/
|
|
67
|
+
hit: boolean;
|
|
68
|
+
}
|
|
69
|
+
export namespace ContactProbe {
|
|
70
|
+
let typeName: string;
|
|
71
|
+
let serializable: boolean;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=ContactProbe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactProbe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbe.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAuCI;;;;OAIG;IACH,gEAJW;QAAC,SAAS,EAAC,MAAM,CAAC;QAAC,MAAM,EAAC,MAAM,EAAE,CAAC;QAAC,SAAS,EAAC,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAC,MAAM,EAAC,MAAM,CAAA;KAAC,GAErF,YAAY,CAuBxB;IAhED;;;OAGG;IACH,WAFU,MAAM,CAED;IAEf;;;;OAIG;IACH,iBAFU,YAAY,CAEO;IAE7B;;;;OAIG;IACH,oBAFU,YAAY,CAEgB;IAEtC;;;OAGG;IACH,UAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,KAFU,OAAO,CAEL;CA6Bf;;kBAIS,MAAM;sBAMN,OAAO"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Finds where a cast from a reference meets the world, and puts the entity it is on there.
|
|
5
|
+
*
|
|
6
|
+
* Every tick {@link ContactProbeSystem} casts a sphere of {@link radius} — a ray, at 0 — from the
|
|
7
|
+
* reference's world position plus {@link offset}, along {@link direction}, for {@link distance}, through
|
|
8
|
+
* the physics system's colliders. On a hit the entity is placed at the contact on the surface, turned
|
|
9
|
+
* as the reference is and tilted so the reference's up is the surface's normal. On a miss it is placed
|
|
10
|
+
* where the reference is. It knows nothing about who reads it: a foot reaching for the ground, a decal,
|
|
11
|
+
* an AI checking its footing.
|
|
12
|
+
*
|
|
13
|
+
* - The entity is placed through its own {@link TransformAttachment}, whose parent is up to the rig.
|
|
14
|
+
* - The character's own colliders are passed through: those whose lifetime ({@link ParentEntity})
|
|
15
|
+
* leads to the same root as the probe's own.
|
|
16
|
+
* - The reference may be a bone a clip drives: its pose is evaluated exactly, as the GPU shows it. It
|
|
17
|
+
* must not be a bone a CPU writer holds (IK, cloth), or the probe would read that writer's answer
|
|
18
|
+
* and the writer would chase its own output.
|
|
19
|
+
*
|
|
20
|
+
* Entity ids are transient, so this is never saved.
|
|
21
|
+
*
|
|
22
|
+
* @author Alex Goldring
|
|
23
|
+
* @copyright Company Named Limited (c) 2026
|
|
24
|
+
*/
|
|
25
|
+
export class ContactProbe {
|
|
26
|
+
/**
|
|
27
|
+
* The entity the cast starts from.
|
|
28
|
+
* @type {number}
|
|
29
|
+
*/
|
|
30
|
+
reference = -1;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Where the cast starts, relative to the reference's world position, in world axes.
|
|
34
|
+
* @readonly
|
|
35
|
+
* @type {Float64Array}
|
|
36
|
+
*/
|
|
37
|
+
offset = new Float64Array(3);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Which way the cast goes, in world, of unit length.
|
|
41
|
+
* @readonly
|
|
42
|
+
* @type {Float64Array}
|
|
43
|
+
*/
|
|
44
|
+
direction = Float64Array.of(0, -1, 0);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* How far the cast reaches.
|
|
48
|
+
* @type {number}
|
|
49
|
+
*/
|
|
50
|
+
distance = 0;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The radius of the sphere cast; 0 casts a ray.
|
|
54
|
+
* @type {number}
|
|
55
|
+
*/
|
|
56
|
+
radius = 0;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Whether the last cast met anything. Written by {@link ContactProbeSystem}.
|
|
60
|
+
* @type {boolean}
|
|
61
|
+
*/
|
|
62
|
+
hit = false;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @param {{reference:number, offset:number[], direction:number[], distance:number, radius:number}} options
|
|
66
|
+
* every field required
|
|
67
|
+
* @returns {ContactProbe}
|
|
68
|
+
*/
|
|
69
|
+
static from({ reference, offset, direction, distance, radius }) {
|
|
70
|
+
assert.isNonNegativeInteger(reference, 'reference');
|
|
71
|
+
assert.equal(offset.length, 3, 'offset is [x, y, z]');
|
|
72
|
+
assert.equal(direction.length, 3, 'direction is [x, y, z]');
|
|
73
|
+
assert.ok(Math.abs(Math.hypot(direction[0], direction[1], direction[2]) - 1) < 1e-9, 'direction is of unit length');
|
|
74
|
+
assert.ok(distance > 0, 'distance is positive');
|
|
75
|
+
assert.ok(radius >= 0, 'radius is not negative');
|
|
76
|
+
|
|
77
|
+
const probe = new ContactProbe();
|
|
78
|
+
|
|
79
|
+
probe.reference = reference;
|
|
80
|
+
probe.offset[0] = offset[0];
|
|
81
|
+
probe.offset[1] = offset[1];
|
|
82
|
+
probe.offset[2] = offset[2];
|
|
83
|
+
probe.direction[0] = direction[0];
|
|
84
|
+
probe.direction[1] = direction[1];
|
|
85
|
+
probe.direction[2] = direction[2];
|
|
86
|
+
probe.distance = distance;
|
|
87
|
+
probe.radius = radius;
|
|
88
|
+
|
|
89
|
+
return probe;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @readonly
|
|
95
|
+
* @type {string}
|
|
96
|
+
*/
|
|
97
|
+
ContactProbe.typeName = "ContactProbe";
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Entity ids are transient: serialization is not applicable.
|
|
101
|
+
* @type {boolean}
|
|
102
|
+
*/
|
|
103
|
+
ContactProbe.serializable = false;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Casts each {@link ContactProbe} and places its entity at what the cast meets.
|
|
3
|
+
*
|
|
4
|
+
* Runs in `update`, where the clips' times for the tick are set: a reference a clip drives is
|
|
5
|
+
* evaluated exactly (`T64WorldCache`), as the GPU draws it.
|
|
6
|
+
*
|
|
7
|
+
* **Register it before a system that reads where it puts its entities** and that writes
|
|
8
|
+
* `TransformAttachment` too, IK's among them. Both read and write `TransformAttachment`, so the
|
|
9
|
+
* order declared access derives leaves the two a cycle, and between them the scheduler keeps the
|
|
10
|
+
* order they were registered in.
|
|
11
|
+
*
|
|
12
|
+
* @author Alex Goldring
|
|
13
|
+
* @copyright Company Named Limited (c) 2026
|
|
14
|
+
*/
|
|
15
|
+
export class ContactProbeSystem extends System<any> {
|
|
16
|
+
constructor();
|
|
17
|
+
dependencies: (typeof TransformAttachment | typeof ContactProbe)[];
|
|
18
|
+
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof AnimationGraphController> | ResourceAccessSpecification<typeof Animation> | ResourceAccessSpecification<typeof TransformAttachment> | ResourceAccessSpecification<typeof GPUStateAuthority> | ResourceAccessSpecification<typeof ParentEntity> | ResourceAccessSpecification<typeof ContactProbe>)[];
|
|
19
|
+
/**
|
|
20
|
+
* @param {ContactProbe} probe
|
|
21
|
+
* @param {TransformAttachment} attachment
|
|
22
|
+
* @param {number} entity
|
|
23
|
+
*/
|
|
24
|
+
link(probe: ContactProbe, attachment: TransformAttachment, entity: number): void;
|
|
25
|
+
/**
|
|
26
|
+
* @param {ContactProbe} probe
|
|
27
|
+
* @param {TransformAttachment} attachment
|
|
28
|
+
* @param {number} entity
|
|
29
|
+
*/
|
|
30
|
+
unlink(probe: ContactProbe, attachment: TransformAttachment, entity: number): void;
|
|
31
|
+
update(time_delta_seconds: any): void;
|
|
32
|
+
#private;
|
|
33
|
+
}
|
|
34
|
+
import { System } from "../../ecs/System.js";
|
|
35
|
+
import { TransformAttachment } from "../../ecs/transform-attachment/TransformAttachment.js";
|
|
36
|
+
import { ContactProbe } from "./ContactProbe.js";
|
|
37
|
+
import { Transform64 } from "../../ecs/transform/Transform64.js";
|
|
38
|
+
import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
|
|
39
|
+
import { Collider } from "./Collider.js";
|
|
40
|
+
import { AnimationGraphController } from "../../graphics3/animation/AnimationGraphController.js";
|
|
41
|
+
import { Animation } from "../../ecs/animation/Animation.js";
|
|
42
|
+
import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
|
|
43
|
+
import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
|
|
44
|
+
//# sourceMappingURL=ContactProbeSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactProbeSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/ecs/ContactProbeSystem.js"],"names":[],"mappings":"AAqEA;;;;;;;;;;;;;GAaG;AACH;;IAEI,mEAAmD;IAEnD,2bASE;IAyCF;;;;OAIG;IACH,YAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAUhB;IAED;;;;OAIG;IACH,cAJW,YAAY,cACZ,mBAAmB,UACnB,MAAM,QAWhB;IAED,sCA2BC;;CAiKJ;uBA1VsB,qBAAqB;oCAER,uDAAuD;6BAY9D,mBAAmB;4BALzC,oCAAoC;4CAbC,oDAAoD;yBAiBvE,eAAe;yCAHC,uDAAuD;0BAbtE,kCAAkC;kCAC1B,oCAAoC;6BACzC,kCAAkC"}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { quat3_multiply } from "../../../core/geom/3d/quaternion/quat3_multiply.js";
|
|
2
|
+
import { quat3_shortest_arc } from "../../../core/geom/3d/quaternion/quat3_shortest_arc.js";
|
|
3
|
+
import { Ray3 } from "../../../core/geom/3d/ray/Ray3.js";
|
|
4
|
+
import { SphereShape3D } from "../../../core/geom/3d/shape/SphereShape3D.js";
|
|
5
|
+
import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
6
|
+
import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
|
|
7
|
+
import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
|
|
8
|
+
import { Animation } from "../../ecs/animation/Animation.js";
|
|
9
|
+
import { GPUStateAuthority } from "../../ecs/gpu/GPUStateAuthority.js";
|
|
10
|
+
import { ParentEntity } from "../../ecs/parent/ParentEntity.js";
|
|
11
|
+
import { System } from "../../ecs/System.js";
|
|
12
|
+
import { TRANSFORM_ATTACHMENT_EVENT_CHANGE } from "../../ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js";
|
|
13
|
+
import { TransformAttachment } from "../../ecs/transform-attachment/TransformAttachment.js";
|
|
14
|
+
import { T64WorldCache } from "../../ecs/transform/T64WorldCache.js";
|
|
15
|
+
import {
|
|
16
|
+
Transform64,
|
|
17
|
+
TRANSFORM64_ROTATION_OFFSET,
|
|
18
|
+
TRANSFORM64_SCALE_OFFSET,
|
|
19
|
+
TRANSFORM64_TRANSLATION_OFFSET
|
|
20
|
+
} from "../../ecs/transform/Transform64.js";
|
|
21
|
+
import { AnimationGraphController } from "../../graphics3/animation/AnimationGraphController.js";
|
|
22
|
+
import { collect_entity_playbacks } from "../../graphics3/pose/collect_entity_playbacks.js";
|
|
23
|
+
import { PhysicsSurfacePoint } from "../queries/PhysicsSurfacePoint.js";
|
|
24
|
+
import { Collider } from "./Collider.js";
|
|
25
|
+
import { ContactProbe } from "./ContactProbe.js";
|
|
26
|
+
import { PhysicsSystem } from "./PhysicsSystem.js";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* One linked probe and what its casts need.
|
|
30
|
+
*/
|
|
31
|
+
class ProbeRecord {
|
|
32
|
+
/**
|
|
33
|
+
* @type {number}
|
|
34
|
+
*/
|
|
35
|
+
entity = -1;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @type {ContactProbe|null}
|
|
39
|
+
*/
|
|
40
|
+
probe = null;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @type {TransformAttachment|null}
|
|
44
|
+
*/
|
|
45
|
+
attachment = null;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The sphere a non-zero radius casts.
|
|
49
|
+
* @type {SphereShape3D}
|
|
50
|
+
*/
|
|
51
|
+
sphere = SphereShape3D.from(1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const ray = new Ray3();
|
|
55
|
+
const surface = new PhysicsSurfacePoint();
|
|
56
|
+
|
|
57
|
+
const reference_world = new Transform64();
|
|
58
|
+
const parent_world = new Transform64();
|
|
59
|
+
|
|
60
|
+
const scratch_q = new Float64Array(4);
|
|
61
|
+
const scratch_arc = new Float64Array(4);
|
|
62
|
+
const scratch_v = new Float64Array(3);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The cast's sphere turns with nothing: its orientation is the identity.
|
|
66
|
+
* @type {Float64Array}
|
|
67
|
+
*/
|
|
68
|
+
const NO_TURN = Float64Array.of(0, 0, 0, 1);
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Casts each {@link ContactProbe} and places its entity at what the cast meets.
|
|
72
|
+
*
|
|
73
|
+
* Runs in `update`, where the clips' times for the tick are set: a reference a clip drives is
|
|
74
|
+
* evaluated exactly (`T64WorldCache`), as the GPU draws it.
|
|
75
|
+
*
|
|
76
|
+
* **Register it before a system that reads where it puts its entities** and that writes
|
|
77
|
+
* `TransformAttachment` too, IK's among them. Both read and write `TransformAttachment`, so the
|
|
78
|
+
* order declared access derives leaves the two a cycle, and between them the scheduler keeps the
|
|
79
|
+
* order they were registered in.
|
|
80
|
+
*
|
|
81
|
+
* @author Alex Goldring
|
|
82
|
+
* @copyright Company Named Limited (c) 2026
|
|
83
|
+
*/
|
|
84
|
+
export class ContactProbeSystem extends System {
|
|
85
|
+
|
|
86
|
+
dependencies = [ContactProbe, TransformAttachment];
|
|
87
|
+
|
|
88
|
+
components_used = [
|
|
89
|
+
ResourceAccessSpecification.from(ContactProbe, ResourceAccessKind.Read | ResourceAccessKind.Write),
|
|
90
|
+
ResourceAccessSpecification.from(TransformAttachment, ResourceAccessKind.Read | ResourceAccessKind.Write),
|
|
91
|
+
ResourceAccessSpecification.from(Transform64, ResourceAccessKind.Read),
|
|
92
|
+
ResourceAccessSpecification.from(GPUStateAuthority, ResourceAccessKind.Read),
|
|
93
|
+
ResourceAccessSpecification.from(ParentEntity, ResourceAccessKind.Read),
|
|
94
|
+
ResourceAccessSpecification.from(Collider, ResourceAccessKind.Read),
|
|
95
|
+
ResourceAccessSpecification.from(Animation, ResourceAccessKind.Read),
|
|
96
|
+
ResourceAccessSpecification.from(AnimationGraphController, ResourceAccessKind.Read),
|
|
97
|
+
];
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @type {ProbeRecord[]}
|
|
101
|
+
*/
|
|
102
|
+
#records = [];
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The root of the probe being cast: colliders whose lifetime leads to it are passed through.
|
|
106
|
+
* @type {number}
|
|
107
|
+
*/
|
|
108
|
+
#owner = -1;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* {@link #accept}, bound once.
|
|
112
|
+
* @type {function(number, Collider):boolean}
|
|
113
|
+
*/
|
|
114
|
+
#filter = (entity, collider) => this.#accept(entity);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Exact worlds per model, for one tick.
|
|
118
|
+
* @type {Map<number, T64WorldCache>}
|
|
119
|
+
*/
|
|
120
|
+
#caches = new Map();
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @type {T64WorldCache[]}
|
|
124
|
+
*/
|
|
125
|
+
#cache_list = [];
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @type {Map<number, PosePlayback[]>}
|
|
129
|
+
*/
|
|
130
|
+
#playbacks = new Map();
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Which models' playbacks were collected this tick.
|
|
134
|
+
* @type {Set<number>}
|
|
135
|
+
*/
|
|
136
|
+
#collected = new Set();
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @param {ContactProbe} probe
|
|
140
|
+
* @param {TransformAttachment} attachment
|
|
141
|
+
* @param {number} entity
|
|
142
|
+
*/
|
|
143
|
+
link(probe, attachment, entity) {
|
|
144
|
+
const record = new ProbeRecord();
|
|
145
|
+
|
|
146
|
+
record.entity = entity;
|
|
147
|
+
record.probe = probe;
|
|
148
|
+
record.attachment = attachment;
|
|
149
|
+
|
|
150
|
+
this.#records.push(record);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @param {ContactProbe} probe
|
|
155
|
+
* @param {TransformAttachment} attachment
|
|
156
|
+
* @param {number} entity
|
|
157
|
+
*/
|
|
158
|
+
unlink(probe, attachment, entity) {
|
|
159
|
+
const records = this.#records;
|
|
160
|
+
|
|
161
|
+
for (let i = 0; i < records.length; i++) {
|
|
162
|
+
if (records[i].entity === entity) {
|
|
163
|
+
records.splice(i, 1);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
update(time_delta_seconds) {
|
|
170
|
+
const em = this.entityManager;
|
|
171
|
+
const dataset = em.dataset;
|
|
172
|
+
|
|
173
|
+
if (dataset === null || dataset === undefined) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const physics = em.getSystem(PhysicsSystem);
|
|
178
|
+
|
|
179
|
+
if (physics === null) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const caches = this.#cache_list;
|
|
184
|
+
|
|
185
|
+
for (let i = 0; i < caches.length; i++) {
|
|
186
|
+
caches[i].invalidate();
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
this.#collected.clear();
|
|
190
|
+
|
|
191
|
+
const records = this.#records;
|
|
192
|
+
|
|
193
|
+
for (let i = 0; i < records.length; i++) {
|
|
194
|
+
this.#cast(records[i], physics, dataset);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* @param {number} entity
|
|
200
|
+
* @returns {boolean} whether the cast may stop at this body
|
|
201
|
+
*/
|
|
202
|
+
#accept(entity) {
|
|
203
|
+
return root_of(this.entityManager.dataset, entity) !== this.#owner;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @param {ProbeRecord} record
|
|
208
|
+
* @param {PhysicsSystem} physics
|
|
209
|
+
* @param {EntityComponentDataset} dataset
|
|
210
|
+
*/
|
|
211
|
+
#cast(record, physics, dataset) {
|
|
212
|
+
const probe = record.probe;
|
|
213
|
+
const reference = probe.reference;
|
|
214
|
+
|
|
215
|
+
if (!dataset.entityExists(reference)) {
|
|
216
|
+
probe.hit = false;
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
this.#world_of(reference_world, reference);
|
|
221
|
+
|
|
222
|
+
const ox = reference_world[TRANSFORM64_TRANSLATION_OFFSET] + probe.offset[0];
|
|
223
|
+
const oy = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 1] + probe.offset[1];
|
|
224
|
+
const oz = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 2] + probe.offset[2];
|
|
225
|
+
|
|
226
|
+
const dx = probe.direction[0], dy = probe.direction[1], dz = probe.direction[2];
|
|
227
|
+
|
|
228
|
+
ray.setOrigin(ox, oy, oz);
|
|
229
|
+
ray.setDirection(dx, dy, dz);
|
|
230
|
+
ray.tMax = probe.distance;
|
|
231
|
+
|
|
232
|
+
this.#owner = root_of(dataset, record.entity);
|
|
233
|
+
|
|
234
|
+
let hit;
|
|
235
|
+
|
|
236
|
+
if (probe.radius === 0) {
|
|
237
|
+
hit = physics.raycast(ray, surface, this.#filter);
|
|
238
|
+
} else {
|
|
239
|
+
record.sphere.radius = probe.radius;
|
|
240
|
+
|
|
241
|
+
hit = physics.shapeCast(ray, record.sphere, NO_TURN, surface, this.#filter);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
probe.hit = hit;
|
|
245
|
+
|
|
246
|
+
// where the entity goes, and how it is turned, in world
|
|
247
|
+
let px, py, pz;
|
|
248
|
+
|
|
249
|
+
const rx = reference_world[TRANSFORM64_ROTATION_OFFSET];
|
|
250
|
+
const ry = reference_world[TRANSFORM64_ROTATION_OFFSET + 1];
|
|
251
|
+
const rz = reference_world[TRANSFORM64_ROTATION_OFFSET + 2];
|
|
252
|
+
const rw = reference_world[TRANSFORM64_ROTATION_OFFSET + 3];
|
|
253
|
+
|
|
254
|
+
if (hit) {
|
|
255
|
+
const nx = surface.normal[0], ny = surface.normal[1], nz = surface.normal[2];
|
|
256
|
+
|
|
257
|
+
// a sphere's centre stands off the surface by its radius
|
|
258
|
+
px = surface.position[0] - nx * probe.radius;
|
|
259
|
+
py = surface.position[1] - ny * probe.radius;
|
|
260
|
+
pz = surface.position[2] - nz * probe.radius;
|
|
261
|
+
|
|
262
|
+
// the reference, tilted so that its up is the surface's
|
|
263
|
+
quat3_shortest_arc(scratch_arc, 0, 0, 1, 0, nx, ny, nz);
|
|
264
|
+
quat3_multiply(scratch_q, 0, scratch_arc[0], scratch_arc[1], scratch_arc[2], scratch_arc[3], rx, ry, rz, rw);
|
|
265
|
+
} else {
|
|
266
|
+
px = reference_world[TRANSFORM64_TRANSLATION_OFFSET];
|
|
267
|
+
py = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 1];
|
|
268
|
+
pz = reference_world[TRANSFORM64_TRANSLATION_OFFSET + 2];
|
|
269
|
+
|
|
270
|
+
scratch_q[0] = rx;
|
|
271
|
+
scratch_q[1] = ry;
|
|
272
|
+
scratch_q[2] = rz;
|
|
273
|
+
scratch_q[3] = rw;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
this.#place(record, px, py, pz, dataset);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Write the entity's offset so its world pose is `p` turned by `scratch_q`.
|
|
281
|
+
*
|
|
282
|
+
* @param {ProbeRecord} record
|
|
283
|
+
* @param {number} px
|
|
284
|
+
* @param {number} py
|
|
285
|
+
* @param {number} pz
|
|
286
|
+
* @param {EntityComponentDataset} dataset
|
|
287
|
+
*/
|
|
288
|
+
#place(record, px, py, pz, dataset) {
|
|
289
|
+
const parent = record.attachment.parent;
|
|
290
|
+
|
|
291
|
+
this.#world_of(parent_world, parent);
|
|
292
|
+
|
|
293
|
+
// conj(R_p)
|
|
294
|
+
const cx = -parent_world[TRANSFORM64_ROTATION_OFFSET];
|
|
295
|
+
const cy = -parent_world[TRANSFORM64_ROTATION_OFFSET + 1];
|
|
296
|
+
const cz = -parent_world[TRANSFORM64_ROTATION_OFFSET + 2];
|
|
297
|
+
const cw = parent_world[TRANSFORM64_ROTATION_OFFSET + 3];
|
|
298
|
+
|
|
299
|
+
// uniform scale, as TransformAttachment composes
|
|
300
|
+
const inverse_scale = 1 / parent_world[TRANSFORM64_SCALE_OFFSET];
|
|
301
|
+
|
|
302
|
+
v3_quaternion_apply(
|
|
303
|
+
scratch_v, 0,
|
|
304
|
+
(px - parent_world[TRANSFORM64_TRANSLATION_OFFSET]) * inverse_scale,
|
|
305
|
+
(py - parent_world[TRANSFORM64_TRANSLATION_OFFSET + 1]) * inverse_scale,
|
|
306
|
+
(pz - parent_world[TRANSFORM64_TRANSLATION_OFFSET + 2]) * inverse_scale,
|
|
307
|
+
cx, cy, cz, cw
|
|
308
|
+
);
|
|
309
|
+
|
|
310
|
+
quat3_multiply(scratch_arc, 0, cx, cy, cz, cw, scratch_q[0], scratch_q[1], scratch_q[2], scratch_q[3]);
|
|
311
|
+
|
|
312
|
+
const local = record.attachment.transform;
|
|
313
|
+
|
|
314
|
+
local.setTranslation(scratch_v[0], scratch_v[1], scratch_v[2]);
|
|
315
|
+
local.setRotation(scratch_arc[0], scratch_arc[1], scratch_arc[2], scratch_arc[3]);
|
|
316
|
+
local.updateMatrix();
|
|
317
|
+
|
|
318
|
+
dataset.sendEvent(record.entity, TRANSFORM_ATTACHMENT_EVENT_CHANGE);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* The entity's world pose this tick, exactly, under its own model's clips.
|
|
323
|
+
*
|
|
324
|
+
* @param {Transform64} result
|
|
325
|
+
* @param {number} entity
|
|
326
|
+
*/
|
|
327
|
+
#world_of(result, entity) {
|
|
328
|
+
const dataset = this.entityManager.dataset;
|
|
329
|
+
|
|
330
|
+
const model = model_of(dataset, entity);
|
|
331
|
+
|
|
332
|
+
let cache = this.#caches.get(model);
|
|
333
|
+
|
|
334
|
+
if (cache === undefined) {
|
|
335
|
+
cache = new T64WorldCache();
|
|
336
|
+
this.#caches.set(model, cache);
|
|
337
|
+
this.#cache_list.push(cache);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
let playbacks = this.#playbacks.get(model);
|
|
341
|
+
|
|
342
|
+
if (playbacks === undefined) {
|
|
343
|
+
playbacks = [];
|
|
344
|
+
this.#playbacks.set(model, playbacks);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (!this.#collected.has(model)) {
|
|
348
|
+
this.#collected.add(model);
|
|
349
|
+
|
|
350
|
+
playbacks.length = 0;
|
|
351
|
+
|
|
352
|
+
collect_entity_playbacks(playbacks, this.entityManager, model);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
cache.evaluate(result, dataset, entity, playbacks);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* The entity whose clips drive `entity`: the model its lifetime belongs to, or itself.
|
|
361
|
+
*
|
|
362
|
+
* @param {EntityComponentDataset} dataset
|
|
363
|
+
* @param {number} entity
|
|
364
|
+
* @returns {number}
|
|
365
|
+
*/
|
|
366
|
+
function model_of(dataset, entity) {
|
|
367
|
+
const owner = dataset.getComponent(entity, ParentEntity);
|
|
368
|
+
|
|
369
|
+
if (owner === undefined || owner === null) {
|
|
370
|
+
return entity;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
return owner.entity;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* The top of the lifetime chain an entity belongs to.
|
|
378
|
+
*
|
|
379
|
+
* @param {EntityComponentDataset} dataset
|
|
380
|
+
* @param {number} entity
|
|
381
|
+
* @returns {number}
|
|
382
|
+
*/
|
|
383
|
+
function root_of(dataset, entity) {
|
|
384
|
+
let e = entity;
|
|
385
|
+
|
|
386
|
+
for (let guard = 0; guard < 1024; guard++) {
|
|
387
|
+
const owner = dataset.getComponent(e, ParentEntity);
|
|
388
|
+
|
|
389
|
+
if (owner === undefined || owner === null || owner.entity < 0) {
|
|
390
|
+
return e;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
e = owner.entity;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return e;
|
|
397
|
+
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* origin} becomes system-managed in this case.
|
|
21
21
|
*
|
|
22
22
|
* NOTE on layout: sibling physics ECS code lives under `engine/ecs/*` (see
|
|
23
|
-
* `engine/ecs/ik/
|
|
23
|
+
* `engine/ecs/ik/IKGoalSystem.js`). This component is placed inside the
|
|
24
24
|
* fluid package because edits to the ECS folder were out-of-scope when it was first
|
|
25
25
|
* written. Moving it under `engine/ecs/fluid/` later is a pure relocation.
|
|
26
26
|
*/
|
|
@@ -24,7 +24,7 @@ import { FluidField } from "../FluidField.js";
|
|
|
24
24
|
* origin} becomes system-managed in this case.
|
|
25
25
|
*
|
|
26
26
|
* NOTE on layout: sibling physics ECS code lives under `engine/ecs/*` (see
|
|
27
|
-
* `engine/ecs/ik/
|
|
27
|
+
* `engine/ecs/ik/IKGoalSystem.js`). This component is placed inside the
|
|
28
28
|
* fluid package because edits to the ECS folder were out-of-scope when it was first
|
|
29
29
|
* written. Moving it under `engine/ecs/fluid/` later is a pure relocation.
|
|
30
30
|
*/
|
|
@@ -66,11 +66,11 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
66
66
|
/**
|
|
67
67
|
* @param {FluidComponent} fluid
|
|
68
68
|
*/
|
|
69
|
-
static "__#
|
|
69
|
+
static "__#429@#refresh_masks"(fluid: FluidComponent): void;
|
|
70
70
|
/**
|
|
71
71
|
* @param {FluidComponent} fluid
|
|
72
72
|
*/
|
|
73
|
-
static "__#
|
|
73
|
+
static "__#429@#clear_field"(fluid: FluidComponent): void;
|
|
74
74
|
/**
|
|
75
75
|
* Mark every cell of `fluid` whose centre lies within `inflation` of the
|
|
76
76
|
* posed shape as solid. Iteration is clipped to the shape's world AABB
|
|
@@ -82,7 +82,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
82
82
|
* @param {number} inflation world-units SDF threshold
|
|
83
83
|
* @param {Float64Array} point length-3 scratch
|
|
84
84
|
*/
|
|
85
|
-
static "__#
|
|
85
|
+
static "__#429@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
|
|
86
86
|
/**
|
|
87
87
|
* Write the obstacle's translation velocity onto every face of every cell
|
|
88
88
|
* it voxelized — the moving-wall boundary condition. Runs AFTER the mask
|
|
@@ -102,7 +102,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
102
102
|
* @param {number} wvy
|
|
103
103
|
* @param {number} wvz
|
|
104
104
|
*/
|
|
105
|
-
static "__#
|
|
105
|
+
static "__#429@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
|
|
106
106
|
constructor();
|
|
107
107
|
dependencies: (typeof FluidObstacle)[];
|
|
108
108
|
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof FluidComponent> | ResourceAccessSpecification<typeof FluidObstacle>)[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_grid_advect_maccormack_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,4DAbW,YAAY,EAAE,WACd,YAAY,EAAE,aACd,YAAY,aACZ,YAAY,aACZ,YAAY,mBACZ,YAAY,EAAE,SAEd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,
|
|
1
|
+
{"version":3,"file":"v3_grid_advect_maccormack_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,4DAbW,YAAY,EAAE,WACd,YAAY,EAAE,aACd,YAAY,aACZ,YAAY,aACZ,YAAY,mBACZ,YAAY,EAAE,SAEd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QAuHpB"}
|