Permalink
Fetching contributors…
Cannot retrieve contributors at this time
90 lines (78 sloc) 2.2 KB
extern crate nalgebra as na;
extern crate ncollide2d;
extern crate nphysics2d;
extern crate nphysics_testbed2d;
use na::{Isometry2, Point2, Vector2};
use ncollide2d::shape::{Cuboid, ShapeHandle};
use nphysics2d::object::{BodyHandle, Material};
use nphysics2d::volumetric::Volumetric;
use nphysics2d::world::World;
use nphysics_testbed2d::Testbed;
const COLLIDER_MARGIN: f32 = 0.01;
fn main() {
/*
* World
*/
let mut world = World::new();
world.set_gravity(Vector2::new(0.0, -9.81));
/*
* Ground
*/
let ground_radx = 25.0;
let ground_rady = 1.0;
let ground_shape = ShapeHandle::new(Cuboid::new(Vector2::new(
ground_radx - COLLIDER_MARGIN,
ground_rady - COLLIDER_MARGIN,
)));
let ground_pos = Isometry2::new(-Vector2::y() * ground_rady, na::zero());
world.add_collider(
COLLIDER_MARGIN,
ground_shape,
BodyHandle::ground(),
ground_pos,
Material::default(),
);
/*
* Create the boxes
*/
let num = 25;
let radx = 0.1;
let rady = 0.1;
let shiftx = radx * 2.0;
let shifty = rady * 2.0;
let centerx = shiftx * (num as f32) / 2.0;
let centery = shifty / 2.0;
let geom = ShapeHandle::new(Cuboid::new(Vector2::new(
radx - COLLIDER_MARGIN,
rady - COLLIDER_MARGIN,
)));
let inertia = geom.inertia(1.0);
let center_of_mass = geom.center_of_mass();
for i in 0usize..num {
for j in 0..num {
let x = i as f32 * shiftx - centerx;
let y = j as f32 * shifty + centery;
/*
* Create the rigid body.
*/
let pos = Isometry2::new(Vector2::new(x, y), 0.0);
let handle = world.add_rigid_body(pos, inertia, center_of_mass);
/*
* Create the collider.
*/
world.add_collider(
COLLIDER_MARGIN,
geom.clone(),
handle,
Isometry2::identity(),
Material::default(),
);
}
}
/*
* Set up the testbed.
*/
let mut testbed = Testbed::new(world);
testbed.look_at(Point2::new(0.0, -2.5), 95.0);
testbed.run();
}