wrapped2d 0.4.2

Rust binding for Box2D
Documentation
#[macro_use]
extern crate approx;
extern crate wrapped2d;

use wrapped2d::b2;
use wrapped2d::user_data::NoUserData;

#[test]
fn fall() {
    let time_step = 1./60.;
    let velocity_iterations = 6;
    let position_iterations = 2;

    let gravity = b2::Vec2 { x: 0., y: -10. };
    let mut world = b2::World::<NoUserData>::new(&gravity);

    assert_eq!(world.body_count(), 0);
    assert_relative_eq!(world.gravity().x, gravity.x);
    assert_relative_eq!(world.gravity().y, gravity.y);

    let mut ground_body_def = b2::BodyDef::new();
    ground_body_def.position = b2::Vec2 { x: 0., y: -10. };
    let ground_handle = world.create_body(&ground_body_def);
    {
        let mut ground = world.body_mut(ground_handle);

        assert_relative_eq!(ground.position().x, 0.);
        assert_relative_eq!(ground.position().y, -10.);
        assert_eq!(world.body_count(), 1);

        let ground_box = b2::PolygonShape::new_box(50., 10.);
        ground.create_fast_fixture(&ground_box, 0.);
    }

    let mut body_def = b2::BodyDef::new();
    body_def.body_type = b2::BodyType::Dynamic;
    body_def.position = b2::Vec2 { x: 0., y: 4. };
    let body = world.create_body(&body_def);

    {
        let body = world.body(body);
        assert_eq!(body.body_type(), b2::BodyType::Dynamic);
        assert_relative_eq!(body.position().x, 0.);
        assert_relative_eq!(body.position().y, 4.);
    }
    assert_eq!(world.body_count(), 2);

    let body_box = b2::PolygonShape::new_box(1., 1.);
    let mut fixture_def = b2::FixtureDef::new();
    fixture_def.density = 1.;
    fixture_def.friction = 0.3;
    world.body_mut(body).create_fixture(&body_box, &mut fixture_def);

    println!("(x, y) angle");
    for _ in 0..60 {
        world.step(time_step, velocity_iterations, position_iterations);
        let body = world.body(body);
        let pos = body.position();
        let angle = body.angle();
        println!("({}, {}) {}", pos.x, pos.y, angle);
    }

    world.destroy_body(body);
    assert_eq!(world.body_count(), 1);
}