boxddd 0.4.0

Safe, ergonomic Rust bindings for Box3D
Documentation
use boxddd::prelude::*;
use mint::{Point3, Quaternion, Vector3};

fn main() -> boxddd::Result<()> {
    let foundation = boxddd::Foundation::initialize_default()?;
    let gravity = Vector3 {
        x: 0.0,
        y: -9.8,
        z: 0.0,
    };
    let mut world =
        foundation.create_world(foundation.world_def_builder().gravity(gravity).build()?)?;

    let position = Point3 {
        x: 0.0,
        y: 2.0,
        z: 0.0,
    };
    let body = world.create_body(
        foundation
            .body_def_builder()
            .body_type(BodyType::Dynamic)
            .position(position)
            .build()?,
    )?;
    world.create_sphere_shape(
        body,
        &foundation.shape_def_builder().density(1.0).build()?,
        &Sphere::new([0.0, 0.0, 0.0], 0.25),
    )?;

    world.step(1.0 / 60.0, 4)?;

    let body_position: Point3<boxddd::types::PosScalar> = world.body_position(body)?.into();
    let rotation: Quaternion<f32> = world.body_rotation(body)?.into();
    let recovered = Quat::try_from(rotation)?;

    println!(
        "mint_interop: y={:.3}, quaternion_s={:.3}",
        body_position.y, recovered.s
    );
    Ok(())
}