aboutsummaryrefslogtreecommitdiff
path: root/examples2d
diff options
context:
space:
mode:
Diffstat (limited to 'examples2d')
-rw-r--r--examples2d/Cargo.toml2
-rw-r--r--examples2d/all_examples2.rs2
-rw-r--r--examples2d/debug_intersection2.rs64
-rw-r--r--examples2d/trimesh2.rs1
4 files changed, 68 insertions, 1 deletions
diff --git a/examples2d/Cargo.toml b/examples2d/Cargo.toml
index dc214b3..a5e81f6 100644
--- a/examples2d/Cargo.toml
+++ b/examples2d/Cargo.toml
@@ -20,7 +20,7 @@ usvg = "0.14"
[dependencies.rapier_testbed2d]
path = "../crates/rapier_testbed2d"
-features = ["profiling"]
+features = ["profiler_ui"]
[dependencies.rapier2d]
path = "../crates/rapier2d"
diff --git a/examples2d/all_examples2.rs b/examples2d/all_examples2.rs
index 3d065a5..74bd89d 100644
--- a/examples2d/all_examples2.rs
+++ b/examples2d/all_examples2.rs
@@ -16,6 +16,7 @@ mod convex_polygons2;
mod damping2;
mod debug_box_ball2;
mod debug_compression2;
+mod debug_intersection2;
mod debug_total_overlap2;
mod debug_vertical_column2;
mod drum2;
@@ -99,6 +100,7 @@ pub fn main() {
("Joint motor position", joint_motor_position2::init_world),
("(Debug) box ball", debug_box_ball2::init_world),
("(Debug) compression", debug_compression2::init_world),
+ ("(Debug) intersection", debug_intersection2::init_world),
("(Debug) total overlap", debug_total_overlap2::init_world),
(
"(Debug) vertical column",
diff --git a/examples2d/debug_intersection2.rs b/examples2d/debug_intersection2.rs
new file mode 100644
index 0000000..f54521a
--- /dev/null
+++ b/examples2d/debug_intersection2.rs
@@ -0,0 +1,64 @@
+use rapier2d::prelude::*;
+use rapier_testbed2d::Testbed;
+
+pub fn init_world(testbed: &mut Testbed) {
+ /*
+ * World
+ */
+ let mut bodies = RigidBodySet::new();
+ let mut colliders = ColliderSet::new();
+ let impulse_joints = ImpulseJointSet::new();
+ let multibody_joints = MultibodyJointSet::new();
+
+ let rad = 1.0;
+ let collider = ColliderBuilder::ball(rad);
+
+ let count = 100;
+ for x in 0..count {
+ for y in 0..count {
+ let rigid_body = RigidBodyBuilder::fixed().translation(vector![
+ (x as f32 - count as f32 / 2.0) * rad * 3.0,
+ (y as f32 - count as f32 / 2.0) * rad * 3.0
+ ]);
+ let handle = bodies.insert(rigid_body);
+ colliders.insert_with_parent(collider.clone(), handle, &mut bodies);
+ testbed.set_initial_body_color(
+ handle,
+ [
+ x as f32 / count as f32,
+ (count - y) as f32 / count as f32,
+ 0.5,
+ ],
+ );
+ }
+ }
+
+ /*
+ * Set up the testbed.
+ */
+ testbed.set_world(bodies, colliders, impulse_joints, multibody_joints);
+ testbed.look_at(point![0.0, 0.0], 50.0);
+
+ testbed.add_callback(move |graphics, physics, _, run| {
+ let slow_time = run.timestep_id as f32 / 3.0;
+ let intersection = physics.query_pipeline.intersection_with_shape(
+ &physics.bodies,
+ &physics.colliders,
+ &Isometry::translation(slow_time.cos() * 10.0, slow_time.sin() * 10.0),
+ &Ball::new(rad / 2.0),
+ QueryFilter::default(),
+ );
+
+ if let Some(graphics) = graphics {
+ for (handle, _) in physics.bodies.iter() {
+ graphics.set_body_color(handle, [0.5, 0.5, 0.5]);
+ }
+ if let Some(intersection) = intersection {
+ let collider = physics.colliders.get(intersection).unwrap();
+ let body_handle = collider.parent().unwrap();
+
+ graphics.set_body_color(body_handle, [1.0, 0.0, 0.0]);
+ }
+ }
+ });
+}
diff --git a/examples2d/trimesh2.rs b/examples2d/trimesh2.rs
index a57c0fe..1e4084a 100644
--- a/examples2d/trimesh2.rs
+++ b/examples2d/trimesh2.rs
@@ -85,6 +85,7 @@ pub fn init_world(testbed: &mut Testbed) {
for k in 0..5 {
let collider = ColliderBuilder::trimesh(vertices.clone(), indices.clone())
+ .unwrap()
.contact_skin(0.2);
let rigid_body = RigidBodyBuilder::dynamic()
.translation(vector![ith as f32 * 8.0 - 20.0, 20.0 + k as f32 * 11.0])