use glam_det::nums::num_traits::*;
use glam_det::nums::{f32x4, u32x4};
use glam_det::{UnitQuat, UnitQuatx4, UnitVec3x4, Vec3, Vec3x4};
use crate::collision_tasks::{ShapeTester, ShapeWideTester};
use crate::convex_contact_manifold::{Convex4ContactManifoldWide, ConvexContactManifold};
use crate::shapes::{Sphere, SphereWide};
use crate::traits::{ContactContext, ContactManifoldWide, CreateShapeWide, PairTest, PairWideTest};
use crate::ShapeContainer;
impl PairWideTest<SphereWide, SphereWide> for ShapeWideTester {
#[inline]
fn should_reset_manifold_before_test() -> bool {
false
}
#[inline]
fn test(
a: &SphereWide,
b: &SphereWide,
contact_context: &ContactContext,
manifold: &mut Convex4ContactManifoldWide,
) {
let center_distance = contact_context.offset_b.length();
let inverse_distance = -center_distance.recip();
manifold.normal = (contact_context.offset_b * inverse_distance).as_unit_vec3x4_unchecked();
let normal_is_valid = center_distance.gt(f32x4::ZERO);
manifold.normal = UnitVec3x4::lane_select(normal_is_valid, manifold.normal, UnitVec3x4::Y);
manifold.depth[0] = a.radius + b.radius - center_distance;
let negative_offset_from_a = -a.radius;
manifold.offset_a[0] = manifold.normal * negative_offset_from_a;
manifold.contact_exists[0] = manifold.depth[0].gt(-contact_context.speculative_margin);
manifold.feature_id[0] = u32x4::ZERO;
}
}
impl_pair_narrowphase!(Sphere, Sphere, SphereWide, SphereWide, 1);