diff options
Diffstat (limited to 'examples2d')
| -rw-r--r-- | examples2d/Cargo.toml | 2 | ||||
| -rw-r--r-- | examples2d/all_examples2.rs | 2 | ||||
| -rw-r--r-- | examples2d/debug_intersection2.rs | 64 | ||||
| -rw-r--r-- | examples2d/trimesh2.rs | 1 |
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]) |
