@woosh/meep-engine 3.44.0 → 3.46.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-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/assert.d.ts.map +1 -1
- package/src/core/assert.js +5 -1
- package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
- package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
- package/src/core/binary/hash/XXH128Hash.js +4 -55
- package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
- package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
- package/src/core/binary/hash/XXH3_SECRET.js +4 -25
- package/src/core/binary/hash/crc32.d.ts +1 -15
- package/src/core/binary/hash/crc32.d.ts.map +1 -1
- package/src/core/binary/hash/crc32.js +4 -96
- package/src/core/binary/hash/xxh3_128.d.ts +1 -9
- package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
- package/src/core/binary/hash/xxh3_128.js +4 -341
- package/src/core/binary/hash/xxh3_64.d.ts +1 -8
- package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
- package/src/core/binary/hash/xxh3_64.js +4 -241
- package/src/core/binary/hash/xxh3_common.d.ts +1 -223
- package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
- package/src/core/binary/hash/xxh3_common.js +90 -476
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts +19 -0
- package/src/core/collection/array/array_sort_insertion_ascending.d.ts.map +1 -0
- package/src/core/collection/array/array_sort_insertion_ascending.js +31 -0
- package/src/core/collection/array/combine_hash.d.ts +6 -0
- package/src/core/collection/array/combine_hash.d.ts.map +1 -1
- package/src/core/collection/array/combine_hash.js +6 -0
- package/src/core/function/FunctionCompiler.js +2 -2
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts +27 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/aabb3_array_round_outward_f32.js +39 -0
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_from_v3_array.js +4 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +2 -2
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +1 -1
- package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
- package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
- package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
- package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts +21 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_inverse_point_array.js +36 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts +25 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_apply_point_array.js +40 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts +28 -0
- package/src/core/geom/3d/pose/pose3_compose_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_compose_array.js +41 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts +29 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.d.ts.map +1 -0
- package/src/core/geom/3d/pose/pose3_to_local_array.js +42 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts +28 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_clamp_angle_array.js +66 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts +22 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_left_array.js +30 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts +23 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_multiply_conjugate_right_array.js +31 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts +26 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_compute_normal_area_weighted_array.js +46 -0
- package/src/core/geom/ConicRay.js +2 -2
- package/src/core/geom/Vector4.d.ts.map +1 -1
- package/src/core/geom/Vector4.js +8 -5
- package/src/core/geom/vec3/v3_distance_array.d.ts +11 -0
- package/src/core/geom/vec3/v3_distance_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_distance_array.js +19 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts +23 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_normalize_array_checked.js +49 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts +15 -0
- package/src/core/geom/vec3/v3_reject_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_reject_array.js +32 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts +26 -0
- package/src/core/graph/csr/csr_build_incidence.d.ts.map +1 -0
- package/src/core/graph/csr/csr_build_incidence.js +71 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts +25 -0
- package/src/core/graph/csr/csr_graph_color_greedy.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_color_greedy.js +83 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts +15 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.d.ts.map +1 -0
- package/src/core/graph/csr/csr_graph_validate_coloring.js +33 -0
- package/src/core/math/hash/XXH128Hash.d.ts +38 -0
- package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
- package/src/core/math/hash/XXH128Hash.js +55 -0
- package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
- package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
- package/src/core/math/hash/XXH3_SECRET.js +25 -0
- package/src/core/math/hash/crc32.d.ts +16 -0
- package/src/core/math/hash/crc32.d.ts.map +1 -0
- package/src/core/math/hash/crc32.js +96 -0
- package/src/core/math/hash/xxh3_128.d.ts +10 -0
- package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
- package/src/core/math/hash/xxh3_128.js +341 -0
- package/src/core/math/hash/xxh3_64.d.ts +9 -0
- package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
- package/src/core/math/hash/xxh3_64.js +241 -0
- package/src/core/math/hash/xxh3_common.d.ts +224 -0
- package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
- package/src/core/math/hash/xxh3_common.js +476 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts +26 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.d.ts.map +1 -0
- package/src/core/math/linalg/matrix_symmetric_3x3_solve_ldlt.js +71 -0
- package/src/core/math/lookup/ParameterLookupTable.js +2 -2
- package/src/core/math/max2_exact.d.ts +15 -0
- package/src/core/math/max2_exact.d.ts.map +1 -0
- package/src/core/math/max2_exact.js +30 -0
- package/src/core/math/min2_exact.d.ts +20 -0
- package/src/core/math/min2_exact.d.ts.map +1 -0
- package/src/core/math/min2_exact.js +35 -0
- package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
- package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
- package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
- package/src/engine/asset/AssetDescription.js +2 -2
- package/src/engine/ecs/animation/Animation.js +2 -2
- package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
- package/src/engine/ecs/animation/AnimationClip.js +7 -5
- package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
- package/src/engine/ecs/gui/GUIElement.js +7 -5
- package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
- package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
- package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKGoalSystem.js +3 -19
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts +17 -0
- package/src/engine/ecs/parent/parent_entity_model_of.d.ts.map +1 -0
- package/src/engine/ecs/parent/parent_entity_model_of.js +26 -0
- package/src/engine/ecs/transform/Transform64.d.ts +1 -1
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +5 -4
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts +15 -0
- package/src/engine/ecs/transform/t64_read_pose_array.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_pose_array.js +24 -0
- package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
- package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
- package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
- package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
- package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +2 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -1
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +10 -21
- package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +5 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +48 -2
- package/src/engine/graphics3/AnimationSystem.d.ts +5 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +47 -2
- package/src/engine/graphics3/ParticipatingMedia.js +204 -204
- package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
- package/src/engine/graphics3/animation/AnimationClips.js +5 -0
- package/src/engine/graphics3/register_clips.d.ts +29 -0
- package/src/engine/graphics3/register_clips.d.ts.map +1 -1
- package/src/engine/graphics3/register_clips.js +52 -0
- package/src/engine/grid/obstacle/GridObstacle.js +2 -2
- package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
- package/src/engine/interpolation/Interpolated.js +2 -2
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +9 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -1
- package/src/engine/physics/cloth/PLAN.md +10 -8
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts +22 -0
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_bind_in_frame.js +51 -19
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +16 -2
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_mesh.js +19 -24
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +7 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +85 -67
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +19 -101
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts +2 -5
- package/src/engine/physics/cloth/collider/cloth_collider_pack.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_pack.js +7 -15
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +16 -61
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
- package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.d.ts +0 -1
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +6 -19
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +1 -2
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +3 -12
- package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +40 -130
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +17 -58
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +3 -3
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +44 -104
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +6 -13
- package/src/engine/physics/cloth/ecs/cloth_holds.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_holds.js +15 -40
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +45 -79
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +7 -27
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +30 -62
- package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/cloth_playground_build.js +2 -3
- package/src/engine/physics/cloth/playground/collide_main.js +2 -28
- package/src/engine/physics/cloth/playground/garment_main.js +4 -19
- package/src/engine/physics/cloth/playground/main.js +6 -48
- package/src/engine/physics/cloth/playground/rig_main.js +947 -955
- package/src/engine/physics/cloth/playground/wind_main.js +8 -7
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +16 -76
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +10 -8
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_color_particles.js +30 -102
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +3 -2
- package/src/engine/physics/cloth/solver/cloth_hold_line.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_hold_line.js +2 -14
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_kinetic_energy.js +45 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts +32 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_coupling.js +133 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts +16 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_particle_of_source.js +19 -0
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +6 -55
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +30 -65
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +6 -28
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +2 -3
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts +21 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_stretch_residual.js +54 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +15 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +28 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts +30 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_worst_tether_ratio.js +56 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +3 -17
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +2 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -25
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts +3 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/cloth_sample_air.js +40 -62
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ContactProbeSystem.js +2 -18
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +9 -50
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +7 -5
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts +24 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_domain_bounds.js +42 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts +25 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/fluid_sample_velocity_world_mps.js +40 -0
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +40 -90
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +3 -5
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +2 -14
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +2 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +13 -32
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +2 -5
- package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitter.js +12 -7
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
- package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
- package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
- package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
- package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
- package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
- package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/EventDescription.js +23 -13
- package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
- package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
- package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +7 -5
- package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/effect/EqEffect.js +8 -5
- package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +2 -2
- package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
- package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
- package/src/format/image/png/PNGReader.js +644 -644
- package/src/format/image/png/crc32.d.ts +1 -1
- package/src/format/image/png/crc32.js +7 -8
- package/src/format/texture/basis/transcode/etc1s_to_astc.d.ts.map +1 -1
- package/src/format/texture/basis/transcode/etc1s_to_astc.js +2 -1
- package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
- package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
- package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
- package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
- package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
- package/src/shade/descriptor/blend/BlendComponent.js +2 -2
- package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
- package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
- package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
- package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
- package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
- package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
- package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
- package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
- package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
- package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
- package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
- package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
- package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
- package/src/shade/playground/image_decode_bench/main.js +2 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js +2 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +2 -1
- package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/statistics.js +2 -1
- package/src/shade/playground/texture_encode/main.d.ts.map +1 -1
- package/src/shade/playground/texture_encode/main.js +2 -1
- package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/measure.js +2 -1
- package/src/shade/renderer/binding/BufferBinding.js +2 -2
- package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_database_check_links.js +2 -1
- package/src/shade/renderer/camera/Camera.js +2 -2
- package/src/shade/renderer/geometry/Attribute.js +2 -2
- package/src/shade/renderer/geometry/Geometry.js +2 -2
- package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +3 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.js +2 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +2 -1
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
- package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +3 -2
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +3 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
- package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
- package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
- package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
- package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
- package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
- package/src/shade/renderer/texture/ShadeTexture.js +17 -10
- package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
- package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
- package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
- package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
- package/src/view/common/HTMLElementCacheKey.js +4 -3
- package/src/view/minimap/MinimapMarker.js +2 -2
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
m4_from_rotation_translation_scale_array
|
|
4
|
-
} from "../../../../core/geom/3d/mat4/m4_from_rotation_translation_scale_array.js";
|
|
1
|
+
import { aabb3_transform_oriented_array } from "../../../../core/geom/3d/aabb/aabb3_transform_oriented.js";
|
|
5
2
|
import { v3_quaternion_apply_array } from "../../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
3
|
+
import { max2_exact } from "../../../../core/math/max2_exact.js";
|
|
4
|
+
import { min2_exact } from "../../../../core/math/min2_exact.js";
|
|
6
5
|
import { ClothColliderKind } from "./ClothColliderKind.js";
|
|
7
6
|
import {
|
|
8
7
|
CCR_AABB_MAX_X,
|
|
9
8
|
CCR_AABB_MIN_X,
|
|
10
9
|
CCR_KIND,
|
|
11
10
|
CCR_PARAM_0,
|
|
12
|
-
CCR_PARAM_1,
|
|
13
|
-
CCR_PARAM_2,
|
|
14
11
|
CCR_PARAM_3,
|
|
15
12
|
CCR_PREV_QX,
|
|
16
13
|
CCR_PREV_TX,
|
|
@@ -87,91 +84,25 @@ export function cloth_collider_refit_bounds(table, record, stride) {
|
|
|
87
84
|
|
|
88
85
|
cloth_collider_local_bounds(LOCAL_BOUNDS, table, record, stride);
|
|
89
86
|
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
// Each pose is seven contiguous slots, translation then rotation, which is
|
|
88
|
+
// the layout the transform reads — so it reads them where they sit in the
|
|
89
|
+
// table rather than as numbers handed through a call, each of which would
|
|
90
|
+
// be boxed into a heap object wherever the call is not inlined.
|
|
91
|
+
aabb3_transform_oriented_array(CURRENT_BOUNDS, 0, LOCAL_BOUNDS, 0, table, r + CCR_TX);
|
|
92
|
+
aabb3_transform_oriented_array(PREVIOUS_BOUNDS, 0, LOCAL_BOUNDS, 0, table, r + CCR_PREV_TX);
|
|
92
93
|
|
|
94
|
+
// Not `aabb3_array_combine`: its `min2` / `max2` drop a NaN in their first
|
|
95
|
+
// operand, so a NaN pose would leave the other pose's bound depending on
|
|
96
|
+
// which side it was on. The refit keeps `Math.min`'s answer instead.
|
|
93
97
|
for (let axis = 0; axis < 3; axis++) {
|
|
94
|
-
table[r + CCR_AABB_MIN_X + axis] =
|
|
95
|
-
table[r + CCR_AABB_MAX_X + axis] =
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* `Math.min(a, b)` without the call: the smaller, NaN if either is, and `-0` below `+0`. The refit
|
|
101
|
-
* runs a few times a cloth a step, so V8 is slow to optimise it, and until it does `Math.min` is a
|
|
102
|
-
* call into a builtin that hands its answer back boxed into a heap object.
|
|
103
|
-
*
|
|
104
|
-
* The same as `Math.min` under `Object.is` for every pair of numbers. A NaN answer is the canonical
|
|
105
|
-
* NaN; which NaN `Math.min` answers is the platform's (on x64, the one with the sign bit set).
|
|
106
|
-
*
|
|
107
|
-
* @param {number} a
|
|
108
|
-
* @param {number} b
|
|
109
|
-
* @returns {number}
|
|
110
|
-
* @private
|
|
111
|
-
*/
|
|
112
|
-
function min_exact(a, b) {
|
|
113
|
-
if (a < b) {
|
|
114
|
-
return a;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (b < a) {
|
|
118
|
-
return b;
|
|
98
|
+
table[r + CCR_AABB_MIN_X + axis] = min2_exact(CURRENT_BOUNDS[axis], PREVIOUS_BOUNDS[axis]);
|
|
99
|
+
table[r + CCR_AABB_MAX_X + axis] = max2_exact(CURRENT_BOUNDS[axis + 3], PREVIOUS_BOUNDS[axis + 3]);
|
|
119
100
|
}
|
|
120
|
-
|
|
121
|
-
if (a === b) {
|
|
122
|
-
// equal, and of two zeros the negative one if either is
|
|
123
|
-
return a === 0 && 1 / a > 0 ? b : a;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// one of them is NaN
|
|
127
|
-
return NaN;
|
|
128
101
|
}
|
|
129
102
|
|
|
130
103
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* @param {number} a
|
|
135
|
-
* @param {number} b
|
|
136
|
-
* @returns {number}
|
|
137
|
-
* @private
|
|
138
|
-
*/
|
|
139
|
-
function max_exact(a, b) {
|
|
140
|
-
if (a > b) {
|
|
141
|
-
return a;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (b > a) {
|
|
145
|
-
return b;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (a === b) {
|
|
149
|
-
// equal, and of two zeros the positive one if either is
|
|
150
|
-
return a === 0 && 1 / a < 0 ? b : a;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return NaN;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* @param {Float64Array} out
|
|
158
|
-
* @param {Float32Array|Float64Array} table
|
|
159
|
-
* @param {number} rotation slot of the pose's rotation
|
|
160
|
-
* @param {number} translation slot of the pose's translation
|
|
161
|
-
* @private
|
|
162
|
-
*/
|
|
163
|
-
function project(out, table, rotation, translation) {
|
|
164
|
-
// The pose is read where it sits in the table. Handed to the compose as ten numbers, the seven
|
|
165
|
-
// that are not small integers were each boxed into a heap object wherever the call was not
|
|
166
|
-
// inlined.
|
|
167
|
-
m4_from_rotation_translation_scale_array(POSE, table, rotation, table, translation, UNIT_SCALE, 0);
|
|
168
|
-
|
|
169
|
-
aabb3_matrix4_project(out, LOCAL_BOUNDS, POSE);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* A half-space's bounds, which cannot go through {@link aabb3_matrix4_project}
|
|
174
|
-
* — an infinite extent multiplied by a zero matrix element is `NaN`. The
|
|
104
|
+
* A half-space's bounds, which cannot go through {@link aabb3_transform_oriented_array}
|
|
105
|
+
* — an infinite extent multiplied by a zero rotation element is `NaN`. The
|
|
175
106
|
* plane's world normal is its local normal rotated by the pose, and the bound
|
|
176
107
|
* exists on an axis exactly when that normal is aligned with it.
|
|
177
108
|
*
|
|
@@ -190,7 +121,7 @@ function refit_plane(table, r) {
|
|
|
190
121
|
const rotation = r + PLANE_POSES[p];
|
|
191
122
|
const translation = r + PLANE_POSES[p + 1];
|
|
192
123
|
|
|
193
|
-
// the local normal and the rotation straight from the table, as
|
|
124
|
+
// the local normal and the rotation straight from the table, as for the other kinds
|
|
194
125
|
v3_quaternion_apply_array(PLANE_NORMAL, 0, table, r + CCR_PARAM_0, table, rotation);
|
|
195
126
|
|
|
196
127
|
// The boundary plane passes through `R·(offset·n_local) + t`, so its
|
|
@@ -208,9 +139,9 @@ function refit_plane(table, r) {
|
|
|
208
139
|
// different ways is not a half-space, so the looser of the two wins
|
|
209
140
|
// and a rotating plane simply stops bounding anything.
|
|
210
141
|
if (n > PLANE_AXIS_TOLERANCE) {
|
|
211
|
-
table[r + CCR_AABB_MAX_X + axis] =
|
|
142
|
+
table[r + CCR_AABB_MAX_X + axis] = max2_exact(table[r + CCR_AABB_MAX_X + axis], offset);
|
|
212
143
|
} else if (n < -PLANE_AXIS_TOLERANCE) {
|
|
213
|
-
table[r + CCR_AABB_MIN_X + axis] =
|
|
144
|
+
table[r + CCR_AABB_MIN_X + axis] = min2_exact(table[r + CCR_AABB_MIN_X + axis], -offset);
|
|
214
145
|
}
|
|
215
146
|
}
|
|
216
147
|
}
|
|
@@ -268,16 +199,3 @@ const CURRENT_BOUNDS = new Float64Array(6);
|
|
|
268
199
|
* @private
|
|
269
200
|
*/
|
|
270
201
|
const PREVIOUS_BOUNDS = new Float64Array(6);
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* @type {Float64Array}
|
|
274
|
-
* @private
|
|
275
|
-
*/
|
|
276
|
-
const POSE = new Float64Array(16);
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* The scale {@link project} composes with: a collider's pose is rigid.
|
|
280
|
-
* @type {Float64Array}
|
|
281
|
-
* @private
|
|
282
|
-
*/
|
|
283
|
-
const UNIT_SCALE = new Float64Array([1, 1, 1]);
|
|
@@ -5,11 +5,8 @@
|
|
|
5
5
|
* It runs when a `ClothCollider` is linked or its shape changes, never per step
|
|
6
6
|
* and never per particle.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* and because a marker per kind would be five new fields on `core` shapes for
|
|
11
|
-
* one consumer's benefit. The ordering matters in one place and is commented
|
|
12
|
-
* where it does.
|
|
8
|
+
* Each kind is asked by its prototype marker, as the physics narrowphase asks;
|
|
9
|
+
* the five are unrelated classes, so the order of the tests does not matter.
|
|
13
10
|
*
|
|
14
11
|
* @author Alex Goldring
|
|
15
12
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloth_collider_pack.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/collider/cloth_collider_pack.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloth_collider_pack.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/collider/cloth_collider_pack.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG;AACH,2CAPW,YAAY,GAAC,YAAY,UACzB,MAAM,kCAEN,MAAM,GACJ,OAAO,CAiFnB;AAED;;;;;;;;;;;;;;GAcG;AACH,iDANW,YAAY,GAAC,MAAM,EAAE,SACrB,YAAY,GAAC,YAAY,UACzB,MAAM,UACN,MAAM,GACJ,OAAO,CAqCnB"}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import { BoxShape3D } from "../../../../core/geom/3d/shape/BoxShape3D.js";
|
|
2
|
-
import { CapsuleShape3D } from "../../../../core/geom/3d/shape/CapsuleShape3D.js";
|
|
3
|
-
import { CylinderShape3D } from "../../../../core/geom/3d/shape/CylinderShape3D.js";
|
|
4
|
-
import { PlaneShape3D } from "../../../../core/geom/3d/shape/PlaneShape3D.js";
|
|
5
|
-
import { SphereShape3D } from "../../../../core/geom/3d/shape/SphereShape3D.js";
|
|
6
1
|
import { ClothColliderKind } from "./ClothColliderKind.js";
|
|
7
2
|
import {
|
|
8
3
|
CCR_FEATURE,
|
|
@@ -20,11 +15,8 @@ import {
|
|
|
20
15
|
* It runs when a `ClothCollider` is linked or its shape changes, never per step
|
|
21
16
|
* and never per particle.
|
|
22
17
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* and because a marker per kind would be five new fields on `core` shapes for
|
|
26
|
-
* one consumer's benefit. The ordering matters in one place and is commented
|
|
27
|
-
* where it does.
|
|
18
|
+
* Each kind is asked by its prototype marker, as the physics narrowphase asks;
|
|
19
|
+
* the five are unrelated classes, so the order of the tests does not matter.
|
|
28
20
|
*
|
|
29
21
|
* @author Alex Goldring
|
|
30
22
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -43,7 +35,7 @@ import {
|
|
|
43
35
|
export function cloth_collider_pack(table, record, shape, stride) {
|
|
44
36
|
const r = record * stride;
|
|
45
37
|
|
|
46
|
-
if (shape
|
|
38
|
+
if (shape.isSphereShape3D === true) {
|
|
47
39
|
// Covers UnitSphereShape3D, which is a SphereShape3D of radius 1.
|
|
48
40
|
const radius = shape.radius;
|
|
49
41
|
|
|
@@ -57,7 +49,7 @@ export function cloth_collider_pack(table, record, shape, stride) {
|
|
|
57
49
|
return true;
|
|
58
50
|
}
|
|
59
51
|
|
|
60
|
-
if (shape
|
|
52
|
+
if (shape.isCapsuleShape3D === true) {
|
|
61
53
|
const radius = shape.radius;
|
|
62
54
|
|
|
63
55
|
table[r + CCR_KIND] = ClothColliderKind.Capsule;
|
|
@@ -72,7 +64,7 @@ export function cloth_collider_pack(table, record, shape, stride) {
|
|
|
72
64
|
return true;
|
|
73
65
|
}
|
|
74
66
|
|
|
75
|
-
if (shape
|
|
67
|
+
if (shape.isBoxShape3D === true) {
|
|
76
68
|
// Covers UnitCubeShape3D, which is a BoxShape3D pinned to 0.5.
|
|
77
69
|
const h = shape.half_extents;
|
|
78
70
|
|
|
@@ -90,7 +82,7 @@ export function cloth_collider_pack(table, record, shape, stride) {
|
|
|
90
82
|
return true;
|
|
91
83
|
}
|
|
92
84
|
|
|
93
|
-
if (shape
|
|
85
|
+
if (shape.isCylinderShape3D === true) {
|
|
94
86
|
const radius = shape.radius;
|
|
95
87
|
|
|
96
88
|
table[r + CCR_KIND] = ClothColliderKind.Cylinder;
|
|
@@ -103,7 +95,7 @@ export function cloth_collider_pack(table, record, shape, stride) {
|
|
|
103
95
|
return true;
|
|
104
96
|
}
|
|
105
97
|
|
|
106
|
-
if (shape
|
|
98
|
+
if (shape.isPlaneShape3D === true) {
|
|
107
99
|
table[r + CCR_KIND] = ClothColliderKind.Plane;
|
|
108
100
|
table[r + CCR_PARAM_0] = shape.normal_x;
|
|
109
101
|
table[r + CCR_PARAM_1] = shape.normal_y;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloth_collider_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/collider/cloth_collider_sdf.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloth_collider_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/collider/cloth_collider_sdf.js"],"names":[],"mappings":"AA4BA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,8CALW,YAAY,GAAC,YAAY,SACzB,MAAM,KACN,MAAM,GACJ,IAAI,CAmBhB;AAED;;;;;;;;;;;;;;GAcG;AACH,yDATW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,mBAClC,MAAM,SACN,YAAY,GAAC,YAAY,UACzB,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAclB;AAED;;;;;;;;;;;;;;GAcG;AACH,0DATW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,cAElC,MAAM,SACN,YAAY,GAAC,YAAY,UACzB,MAAM,SACN,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,gBAClC,MAAM,GACJ,IAAI,CAgChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,+CATW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,cAClC,MAAM,SACN,YAAY,GAAC,YAAY,UACzB,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,IAAI,CAQhB;AAED;;;;;;;;;;;GAWG;AACH,qDARW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,cAClC,MAAM,SACN,YAAY,GAAC,YAAY,UACzB,MAAM,SACN,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,gBAClC,MAAM,GACJ,IAAI,CAMhB;AAED;;;;;;;;;;;;;GAaG;AACH,6CATW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,cAClC,MAAM,SACN,YAAY,GAAC,YAAY,UACzB,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,IAAI,CAQhB;AAED;;;;;;;;;;;GAWG;AACH,mDARW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,cAClC,MAAM,SACN,YAAY,GAAC,YAAY,UACzB,MAAM,SACN,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,gBAClC,MAAM,GACJ,IAAI,CAMhB"}
|
|
@@ -1,31 +1,24 @@
|
|
|
1
|
+
import { pose3_apply_inverse_point_array } from "../../../../core/geom/3d/pose/pose3_apply_inverse_point_array.js";
|
|
2
|
+
import { pose3_apply_point_array } from "../../../../core/geom/3d/pose/pose3_apply_point_array.js";
|
|
3
|
+
import { quat3_nlerp_array } from "../../../../core/geom/3d/quaternion/quat3_nlerp.js";
|
|
1
4
|
import { sdf3_box_gradient_array } from "../../../../core/geom/3d/shape/sdf/sdf3_box.js";
|
|
2
5
|
import { sdf3_capsule_gradient_array } from "../../../../core/geom/3d/shape/sdf/sdf3_capsule.js";
|
|
3
6
|
import { sdf3_cylinder_gradient_array } from "../../../../core/geom/3d/shape/sdf/sdf3_cylinder.js";
|
|
4
7
|
import { sdf3_plane_gradient_array } from "../../../../core/geom/3d/shape/sdf/sdf3_plane.js";
|
|
5
8
|
import { sdf3_sphere_gradient_array } from "../../../../core/geom/3d/shape/sdf/sdf3_sphere.js";
|
|
6
9
|
import { v3_quaternion_apply_array } from "../../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
7
|
-
import { v3_quaternion_apply_inverse_array } from "../../../../core/geom/vec3/v3_quaternion_apply_inverse.js";
|
|
8
10
|
import {
|
|
9
|
-
CCR_INTERP_QW,
|
|
10
11
|
CCR_INTERP_QX,
|
|
11
|
-
CCR_INTERP_QY,
|
|
12
|
-
CCR_INTERP_QZ,
|
|
13
12
|
CCR_INTERP_TX,
|
|
14
13
|
CCR_INTERP_TY,
|
|
15
14
|
CCR_INTERP_TZ,
|
|
16
15
|
CCR_KIND,
|
|
17
16
|
CCR_PARAM_0,
|
|
18
|
-
CCR_PREV_QW,
|
|
19
17
|
CCR_PREV_QX,
|
|
20
|
-
CCR_PREV_QY,
|
|
21
|
-
CCR_PREV_QZ,
|
|
22
18
|
CCR_PREV_TX,
|
|
23
19
|
CCR_PREV_TY,
|
|
24
20
|
CCR_PREV_TZ,
|
|
25
|
-
CCR_QW,
|
|
26
21
|
CCR_QX,
|
|
27
|
-
CCR_QY,
|
|
28
|
-
CCR_QZ,
|
|
29
22
|
CCR_STRIDE,
|
|
30
23
|
CCR_TX,
|
|
31
24
|
CCR_TY,
|
|
@@ -89,42 +82,12 @@ export function cloth_collider_pose_at(table, count, t) {
|
|
|
89
82
|
table[r + CCR_INTERP_TY] = s * table[r + CCR_PREV_TY] + t * table[r + CCR_TY];
|
|
90
83
|
table[r + CCR_INTERP_TZ] = s * table[r + CCR_PREV_TZ] + t * table[r + CCR_TZ];
|
|
91
84
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
let by = table[r + CCR_QY];
|
|
99
|
-
let bz = table[r + CCR_QZ];
|
|
100
|
-
let bw = table[r + CCR_QW];
|
|
101
|
-
|
|
102
|
-
// `q` and `−q` are one rotation, so the pair has to be brought onto the
|
|
103
|
-
// same hemisphere or the interpolation takes the long way round — which
|
|
104
|
-
// for a collider is a bone that spins through the character.
|
|
105
|
-
if (ax * bx + ay * by + az * bz + aw * bw < 0) {
|
|
106
|
-
bx = -bx;
|
|
107
|
-
by = -by;
|
|
108
|
-
bz = -bz;
|
|
109
|
-
bw = -bw;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
const qx = s * ax + t * bx;
|
|
113
|
-
const qy = s * ay + t * by;
|
|
114
|
-
const qz = s * az + t * bz;
|
|
115
|
-
const qw = s * aw + t * bw;
|
|
116
|
-
|
|
117
|
-
const length = Math.sqrt(qx * qx + qy * qy + qz * qz + qw * qw);
|
|
118
|
-
|
|
119
|
-
// Two opposed quaternions cancel exactly, which the hemisphere fix
|
|
120
|
-
// above makes impossible; the guard is for a record whose poses were
|
|
121
|
-
// never written rather than for a rotation.
|
|
122
|
-
const inverse = length > 0 ? 1 / length : 0;
|
|
123
|
-
|
|
124
|
-
table[r + CCR_INTERP_QX] = qx * inverse;
|
|
125
|
-
table[r + CCR_INTERP_QY] = qy * inverse;
|
|
126
|
-
table[r + CCR_INTERP_QZ] = qz * inverse;
|
|
127
|
-
table[r + CCR_INTERP_QW] = length > 0 ? qw * inverse : 1;
|
|
85
|
+
// Both poses' quaternions are contiguous `[x, y, z, w]` slots, so the
|
|
86
|
+
// blend reads them in place. `q` and `−q` are one rotation; the
|
|
87
|
+
// hemisphere flip inside the nlerp is what keeps the pair from
|
|
88
|
+
// interpolating the long way round — which for a collider is a bone
|
|
89
|
+
// that spins through the character.
|
|
90
|
+
quat3_nlerp_array(table, r + CCR_INTERP_QX, table, r + CCR_PREV_QX, table, r + CCR_QX, t);
|
|
128
91
|
}
|
|
129
92
|
}
|
|
130
93
|
|
|
@@ -175,11 +138,11 @@ export function cloth_collider_signed_distance(gradient, gradient_offset, table,
|
|
|
175
138
|
export function cloth_collider_signed_distance_array(out, out_offset, table, record, point, point_offset) {
|
|
176
139
|
const r = record * CCR_STRIDE;
|
|
177
140
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
141
|
+
pose3_apply_inverse_point_array(
|
|
142
|
+
LOCAL_POINT, 0,
|
|
143
|
+
table, r + CCR_INTERP_TX, table, r + CCR_INTERP_QX,
|
|
144
|
+
point, point_offset
|
|
145
|
+
);
|
|
183
146
|
|
|
184
147
|
const kind = table[r + CCR_KIND];
|
|
185
148
|
|
|
@@ -243,11 +206,7 @@ export function cloth_collider_from_local(out, out_offset, table, record, x, y,
|
|
|
243
206
|
export function cloth_collider_from_local_array(out, out_offset, table, record, point, point_offset) {
|
|
244
207
|
const r = record * CCR_STRIDE;
|
|
245
208
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
out[out_offset] += table[r + CCR_INTERP_TX];
|
|
249
|
-
out[out_offset + 1] += table[r + CCR_INTERP_TY];
|
|
250
|
-
out[out_offset + 2] += table[r + CCR_INTERP_TZ];
|
|
209
|
+
pose3_apply_point_array(out, out_offset, table, r + CCR_INTERP_TX, table, r + CCR_INTERP_QX, point, point_offset);
|
|
251
210
|
}
|
|
252
211
|
|
|
253
212
|
/**
|
|
@@ -287,11 +246,7 @@ export function cloth_collider_to_local(out, out_offset, table, record, x, y, z)
|
|
|
287
246
|
export function cloth_collider_to_local_array(out, out_offset, table, record, point, point_offset) {
|
|
288
247
|
const r = record * CCR_STRIDE;
|
|
289
248
|
|
|
290
|
-
|
|
291
|
-
LOCAL_POINT[1] = point[point_offset + 1] - table[r + CCR_INTERP_TY];
|
|
292
|
-
LOCAL_POINT[2] = point[point_offset + 2] - table[r + CCR_INTERP_TZ];
|
|
293
|
-
|
|
294
|
-
v3_quaternion_apply_inverse_array(out, out_offset, LOCAL_POINT, 0, table, r + CCR_INTERP_QX);
|
|
249
|
+
pose3_apply_inverse_point_array(out, out_offset, table, r + CCR_INTERP_TX, table, r + CCR_INTERP_QX, point, point_offset);
|
|
295
250
|
}
|
|
296
251
|
|
|
297
252
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cloth.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/Cloth.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH;IAkDI;;;;;;;;;OASG;IACH,uBATW,aAAa;QAGC,KAAK,GAAnB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACJ,KAAK,CA6BjB;IArFD;;;;;;;OAOG;IACH,UAFU,aAAa,CAEQ;IAE/B;;;;;;;;OAQG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,MAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,OAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,cAHW,MAAM,GAAC,UAAU,GACf,OAAO,CAInB;IAyCD;;;OAGG;IACH,cAHW,KAAK,GACH,OAAO,CAgBnB;IAED;;OAEG;IACH,QAFa,MAAM,
|
|
1
|
+
{"version":3,"file":"Cloth.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/Cloth.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH;IAkDI;;;;;;;;;OASG;IACH,uBATW,aAAa;QAGC,KAAK,GAAnB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACJ,KAAK,CA6BjB;IArFD;;;;;;;OAOG;IACH,UAFU,aAAa,CAEQ;IAE/B;;;;;;;;OAQG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,MAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,OAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,cAHW,MAAM,GAAC,UAAU,GACf,OAAO,CAInB;IAyCD;;;OAGG;IACH,cAHW,KAAK,GACH,OAAO,CAgBnB;IAED;;OAEG;IACH,QAFa,MAAM,CAYlB;IAED;;;;;;;;;;;;;;;;;MAQC;IAED;;OAEG;IACH,kDAFW,MAAM,QAehB;IAED,mBAEC;IAGL;;;OAGG;IACH,kBAFU,OAAO,CAEM;CANtB;;;;8BAlN6B,oBAAoB;2BACvB,iBAAiB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { hash_mix3 } from "../../../../core/math/hash/hash_mix3.js";
|
|
3
3
|
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
4
4
|
import { ClothDynamics } from "./ClothDynamics.js";
|
|
5
5
|
import { ClothFlags } from "./ClothFlags.js";
|
|
@@ -169,10 +169,12 @@ export class Cloth {
|
|
|
169
169
|
* @returns {number}
|
|
170
170
|
*/
|
|
171
171
|
hash() {
|
|
172
|
-
return
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
return hash_mix3(
|
|
173
|
+
hash_mix3(
|
|
174
|
+
this.dynamics.hash(),
|
|
175
|
+
computeHashFloat(this.blend),
|
|
176
|
+
this.layer
|
|
177
|
+
),
|
|
176
178
|
this.mask,
|
|
177
179
|
this.flags
|
|
178
180
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothCollider.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothCollider.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH;IA0CI;;;;;;;;OAQG;IACH;QAPyB,SAAS,GAAvB,MAAM;QACQ,cAAc,GAA5B,MAAM;QACQ,KAAK,GAAnB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACJ,aAAa,CA0BzB;IAzED;;;;;;;;;OASG;IACH,WAFU,MAAM,CAEF;IAEd;;;;;;;OAOG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,MAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,OAFU,MAAM,CAEgB;IAqChC;;;OAGG;IACH,cAHW,MAAM,GAAC,kBAAkB,GACvB,OAAO,CAInB;IAED;;;OAGG;IACH,cAHW,aAAa,GACX,OAAO,CAgBnB;IAED;;OAEG;IACH,QAFa,MAAM,
|
|
1
|
+
{"version":3,"file":"ClothCollider.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothCollider.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH;IA0CI;;;;;;;;OAQG;IACH;QAPyB,SAAS,GAAvB,MAAM;QACQ,cAAc,GAA5B,MAAM;QACQ,KAAK,GAAnB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACJ,aAAa,CA0BzB;IAzED;;;;;;;;;OASG;IACH,WAFU,MAAM,CAEF;IAEd;;;;;;;OAOG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,MAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,OAFU,MAAM,CAEgB;IAqChC;;;OAGG;IACH,cAHW,MAAM,GAAC,kBAAkB,GACvB,OAAO,CAInB;IAED;;;OAGG;IACH,cAHW,aAAa,GACX,OAAO,CAgBnB;IAED;;OAEG;IACH,QAFa,MAAM,CAYlB;IAED;;;;;;MAQC;IAED;;OAEG;IACH,4DAFW,MAAM,QAchB;IAED,mBAEC;IAGL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;CANtC;;;;mCA7LkC,yBAAyB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { hash_mix3 } from "../../../../core/math/hash/hash_mix3.js";
|
|
3
3
|
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
4
4
|
import { ClothColliderFlags } from "./ClothColliderFlags.js";
|
|
5
5
|
|
|
@@ -149,10 +149,12 @@ export class ClothCollider {
|
|
|
149
149
|
* @returns {number}
|
|
150
150
|
*/
|
|
151
151
|
hash() {
|
|
152
|
-
return
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
return hash_mix3(
|
|
153
|
+
hash_mix3(
|
|
154
|
+
computeHashFloat(this.inflation),
|
|
155
|
+
computeHashFloat(this.friction_scale),
|
|
156
|
+
this.layer
|
|
157
|
+
),
|
|
156
158
|
this.mask,
|
|
157
159
|
this.flags
|
|
158
160
|
);
|
|
@@ -8,26 +8,13 @@
|
|
|
8
8
|
* @copyright Company Named Limited (c) 2026
|
|
9
9
|
*/
|
|
10
10
|
export const ClothColliderFlags = {
|
|
11
|
-
None: 0
|
|
11
|
+
None: 0
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* refitting the swept bounds is the per-collider, per-step cost of that. A
|
|
19
|
-
* ground plane, a wall, a rock pays it for nothing, and a large static
|
|
20
|
-
* collider pays the most because its bounds are the biggest thing the
|
|
21
|
-
* broadphase tests against.
|
|
22
|
-
*
|
|
23
|
-
* Set this and the pose is written once, at link, into **both** slots, so
|
|
24
|
-
* the sweep degenerates to the pose it already had. Move the entity anyway
|
|
25
|
-
* and the cloth will not notice: that is the trade, and it is why this is
|
|
26
|
-
* an author's assertion rather than something derived from a pose that
|
|
27
|
-
* happens not to have changed yet. An explicit TRANSFORM64_EVENT_PLACED
|
|
28
|
-
* (including PhysicsSystem.setPose) does re-place a static proxy.
|
|
29
|
-
*/
|
|
30
|
-
Static: 1
|
|
13
|
+
// Bit 0 was `Static`: "this collider never moves, so place it once and
|
|
14
|
+
// never sweep it". It is retired rather than reused, because saves carry
|
|
15
|
+
// it. The index skips the refit of a collider whose pose did not change,
|
|
16
|
+
// which is the saving the flag bought, observed rather than promised — and
|
|
17
|
+
// a "static" collider that moves anyway is swept like any other.
|
|
31
18
|
};
|
|
32
19
|
|
|
33
20
|
Object.freeze(ClothColliderFlags);
|
|
@@ -100,8 +100,7 @@ export class ClothColliderSystem extends System<any> {
|
|
|
100
100
|
*/
|
|
101
101
|
refreshSurface(entity: number): void;
|
|
102
102
|
/**
|
|
103
|
-
* Reset motion history at an explicitly published placement
|
|
104
|
-
* static proxies. The next refresh can still sweep any subsequent motion.
|
|
103
|
+
* Reset motion history at an explicitly published placement. The next refresh can still sweep any subsequent motion.
|
|
105
104
|
* @param {number} handle
|
|
106
105
|
* @param {Transform64} transform
|
|
107
106
|
* @private
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothColliderSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothColliderSystem.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClothColliderSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothColliderSystem.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH;;IAEI,8EAAsD;IAEtD,wKAIE;IAEF;;OAEG;IACH,OAFU,kBAAkB,CAEK;IAEjC;;;;;;OAMG;IACH,kBAAsB;IAEtB;;;;;;;;OAQG;IACH,iBAAc;IAEd;;;;;OAKG;IACH,qBALW,aAAa,YACb,QAAQ,aACR,WAAW,UACX,MAAM,QAoChB;IAED;;;;;OAKG;IACH,uBALW,aAAa,YACb,QAAQ,aACR,WAAW,UACX,MAAM,QAqBhB;IAED;;;;;;OAMG;IACH,WAFa,IAAI,CA2BhB;IAED;;;;;;;;OAQG;IACH,uBAHW,MAAM,GACJ,IAAI,CAyBhB;IAED;;;;;OAKG;IACH,gBAWC;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,MAAM,CAIlB;CACJ;uBA5PsB,wBAAwB;4BAMxC,uCAAuC;yBACrB,uBAAuB;8BAElB,oBAAoB;4CAVN,uDAAuD;mCAShE,mCAAmC"}
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
import { Collider } from "../../ecs/Collider.js";
|
|
11
11
|
import { ClothColliderIndex } from "../collider/ClothColliderIndex.js";
|
|
12
12
|
import { ClothCollider } from "./ClothCollider.js";
|
|
13
|
-
import { ClothColliderFlags } from "./ClothColliderFlags.js";
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* # The index's owner
|
|
@@ -176,15 +175,8 @@ export class ClothColliderSystem extends System {
|
|
|
176
175
|
for (let i = 0; i < linked.length; i++) {
|
|
177
176
|
const entry = linked[i];
|
|
178
177
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
if ((cloth_collider.flags & ClothColliderFlags.Static) !== 0) {
|
|
182
|
-
// Placed once at link and never swept. `advance` has just made
|
|
183
|
-
// its previous pose equal to its current one, which is exactly
|
|
184
|
-
// the state a static collider wants and costs nothing to leave.
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
|
|
178
|
+
// A collider that has not moved since the last step is a pose equal
|
|
179
|
+
// to the one the index holds, which it does not refit.
|
|
188
180
|
const transform = entry.transform;
|
|
189
181
|
|
|
190
182
|
index.setPose(
|
|
@@ -235,8 +227,7 @@ export class ClothColliderSystem extends System {
|
|
|
235
227
|
}
|
|
236
228
|
|
|
237
229
|
/**
|
|
238
|
-
* Reset motion history at an explicitly published placement
|
|
239
|
-
* static proxies. The next refresh can still sweep any subsequent motion.
|
|
230
|
+
* Reset motion history at an explicitly published placement. The next refresh can still sweep any subsequent motion.
|
|
240
231
|
* @param {number} handle
|
|
241
232
|
* @param {Transform64} transform
|
|
242
233
|
* @private
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothDynamics.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothDynamics.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClothDynamics.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothDynamics.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH;IAgGI;;;;;;;;;;;;;;;;OAgBG;IACH;QAZyB,OAAO,GAArB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACQ,OAAO,GAArB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACQ,SAAS,GAAvB,MAAM;QACQ,OAAO,GAArB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACQ,QAAQ,GAAtB,MAAM;QACQ,UAAU,GAAxB,MAAM;QACQ,KAAK,GAAnB,MAAM;QACJ,aAAa,CAQzB;IArHD;;;;;OAKG;IACH,SAFU,MAAM,CAEF;IAEd;;;;OAIG;IACH,MAFU,MAAM,CAEL;IAEX;;;;OAIG;IACH,SAFU,MAAM,CAED;IAEf;;;;;;;OAOG;IACH,OAFU,MAAM,CAEJ;IAEZ;;;;;OAKG;IACH,WAFU,MAAM,CAEC;IAEjB;;;;;OAKG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;;;;;;;;;;;;OAcG;IACH,MAFU,MAAM,CAEL;IAEX;;;;;OAKG;IACH,UAFU,MAAM,CAEH;IAEb;;;;OAIG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,OAFU,MAAM,CAEuB;IAEvC;;;OAGG;IACH,cAHW,MAAM,GAAC,kBAAkB,GACvB,OAAO,CAInB;IAkED;;;;;;OAMG;IACH,SAFa,aAAa,CAiBzB;IAED;;;OAGG;IACH,YAHW,aAAa,GACX,OAAO,CAenB;IAED;;;OAGG;IACH,cAHW,aAAa,GACX,OAAO,CAqBnB;IAED;;OAEG;IACH,QAFa,MAAM,CAuBlB;IAED;;;;;;;;;;;MAaC;IAED;;OAEG;IACH,eAFW,MAAM,QAIhB;IAED,mBAEC;IAGL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;;CANtC;;;;mCAhVkC,yBAAyB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
|
|
3
|
+
import { hash_mix3 } from "../../../../core/math/hash/hash_mix3.js";
|
|
3
4
|
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
4
5
|
import { ClothDynamicsFlags } from "./ClothDynamicsFlags.js";
|
|
5
6
|
|
|
@@ -290,16 +291,24 @@ export class ClothDynamics {
|
|
|
290
291
|
* @returns {number}
|
|
291
292
|
*/
|
|
292
293
|
hash() {
|
|
293
|
-
return
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
294
|
+
return hash_mix2(
|
|
295
|
+
hash_mix3(
|
|
296
|
+
hash_mix3(
|
|
297
|
+
hash_mix3(
|
|
298
|
+
hash_mix3(
|
|
299
|
+
computeHashFloat(this.stretch),
|
|
300
|
+
computeHashFloat(this.bend),
|
|
301
|
+
computeHashFloat(this.damping)
|
|
302
|
+
),
|
|
303
|
+
computeHashFloat(this.slack),
|
|
304
|
+
computeHashFloat(this.thickness)
|
|
305
|
+
),
|
|
306
|
+
computeHashFloat(this.inertia),
|
|
307
|
+
computeHashFloat(this.drag)
|
|
308
|
+
),
|
|
309
|
+
this.substeps,
|
|
310
|
+
this.iterations
|
|
311
|
+
),
|
|
303
312
|
this.flags
|
|
304
313
|
);
|
|
305
314
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothWorld.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothWorld.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClothWorld.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/ecs/ClothWorld.js"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH;IAEI;;;OAGG;IACH,SAFU,YAAY,CAEoB;IAE1C;;;;;;;;;;;;OAYG;IACH,WAFU,aAAa,EAAE,CAEV;IAEf;;OAEG;IACH,eAFU,gBAAc,IAAI,CAEP;IAErB;;OAEG;IACH,aAFU,yBAAyB,GAAC,IAAI,CAErB;IAEnB;;;;;;OAMG;IACH,WAFU,mBAAmB,GAAC,IAAI,CAEjB;IAEjB;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAFU,oBAAkB,IAAI,CAEpB;IAEZ;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAFU,MAAM,CAEP;IAET;;;;;OAKG;IACH,uBAAmB;IAEnB;;;;;OAKG;IACH,cAFU,OAAO,CAEI;IAErB;;;OAGG;IACH,oBAAwB;IAExB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,uBAKE;IAEF;;;;;;OAMG;IACH,uBAKE;IA0BF;;;;;OAKG;IACH,2CAaC;IAED;;;;;OAKG;IACH,YALW,KAAK,aACL,WAAW,UACX,MAAM,GACJ,aAAa,CAczB;IAED;;;;;;;;OAQG;IACH,iDAFa,IAAI,CAehB;IAED;;;OAGG;IACH,iDAFa,IAAI,CAOhB;IAmXD;;;OAGG;IACH,eAHW,MAAM,GACJ,aAAa,GAAC,SAAS,CA0BnC;IAyED;;;;;;;;;;;OAWG;IACH,eAHW,MAAM,GACJ,aAAa,GAAC,SAAS,CAuBnC;IAED;;;;;;;;OAQG;IACH,aAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,aAAa,GAAC,SAAS,CAInC;IAED;;;;;;;;;;;;OAYG;IACH,mBALW,MAAM,UACN,MAAM,GACJ,MAAM,CAmBlB;IAED;;;;;OAKG;IACH,uCAFW,MAAM,QAgBhB;IAED;;;;;;;;;OASG;IACH,wBANW,aAAa,mCAEb,MAAM,GACJ,OAAO,CA8BnB;IAED;;;;;;;OAOG;IACH,iBAJW,aAAa,gCAEX,IAAI,CA4ChB;IAyFD;;;;;;;;;;;;OAYG;IACH,kBAPW,aAAa,MACb,MAAM,UACN,YAAY,UACZ,MAAM,GACJ,OAAO,CA6TnB;;CA0GJ;8BAtiD6B,oBAAoB;0CApB3C,gEAAgE;oCAgBnC,0BAA0B;sBA+BxC,YAAY;4BA1C3B,uCAAuC"}
|