parry3d 0.26.0

3 dimensional collision detection library in Rust.
Documentation
use parry3d::math::{Pose, Vector};
use parry3d::query::{self, ShapeCastOptions};
use parry3d::shape::{Ball, Cuboid};

fn main() {
    let cuboid = Cuboid::new(Vector::new(1.0, 1.0, 1.0));
    let ball = Ball::new(1.0);

    let cuboid_pos = Pose::identity();
    let ball_pos_intersecting = Pose::translation(1.0, 1.0, 1.0);
    let ball_pos_will_touch = Pose::translation(2.0, 2.0, 2.0);
    let ball_pos_wont_touch = Pose::translation(3.0, 3.0, 3.0);

    let cuboid_vel1 = Vector::new(-1.0, 1.0, 1.0);
    let cuboid_vel2 = Vector::new(1.0, 1.0, 1.0);

    let ball_vel1 = Vector::new(2.0, 2.0, 2.0);
    let ball_vel2 = Vector::new(-0.5, -0.5, -0.5);

    let toi_intersecting = query::cast_shapes(
        &ball_pos_intersecting,
        ball_vel1,
        &ball,
        &cuboid_pos,
        cuboid_vel1,
        &cuboid,
        ShapeCastOptions::default(),
    )
    .unwrap();
    let toi_will_touch = query::cast_shapes(
        &ball_pos_will_touch,
        ball_vel2,
        &ball,
        &cuboid_pos,
        cuboid_vel2,
        &cuboid,
        ShapeCastOptions::default(),
    )
    .unwrap();
    let toi_wont_touch = query::cast_shapes(
        &ball_pos_wont_touch,
        ball_vel1,
        &ball,
        &cuboid_pos,
        cuboid_vel1,
        &cuboid,
        ShapeCastOptions::default(),
    )
    .unwrap();

    assert_eq!(toi_intersecting.map(|hit| hit.time_of_impact), Some(0.0));
    assert!(toi_will_touch.is_some() && toi_will_touch.unwrap().time_of_impact > 0.0);
    assert_eq!(toi_wont_touch.map(|hit| hit.time_of_impact), None);
}