use boxddd::prelude::*;
fn main() -> boxddd::Result<()> {
let foundation = boxddd::Foundation::initialize_default()?;
#[cfg(not(feature = "double-precision"))]
let start_position = glam::Vec3::new(0.0, 2.0, 0.0);
#[cfg(feature = "double-precision")]
let start_position = glam::DVec3::new(0.0, 2.0, 0.0);
let mut world = foundation.create_world(
foundation
.world_def_builder()
.gravity(glam::Vec3::new(0.0, -9.8, 0.0))
.build()?,
)?;
let body = world.create_body(
foundation
.body_def_builder()
.body_type(BodyType::Dynamic)
.position(start_position)
.build()?,
)?;
world.create_sphere_shape(
body,
&foundation.shape_def_builder().density(1.0).build()?,
&Sphere::new(glam::Vec3::ZERO, 0.25),
)?;
world.step(1.0 / 60.0, 4)?;
#[cfg(not(feature = "double-precision"))]
let body_position: glam::Vec3 = world.body_position(body)?.into();
#[cfg(feature = "double-precision")]
let body_position: glam::DVec3 = world.body_position(body)?.into();
let rotation: glam::Quat = world.body_rotation(body)?.into();
let velocity: glam::Vec3 = world.body_linear_velocity(body)?.into();
println!(
"glam_interop: y={:.3}, qw={:.3}, vy={:.3}",
body_position.y, rotation.w, velocity.y
);
Ok(())
}