diff options
| author | Austin J. Garrett <agarrett777@gmail.com> | 2025-01-08 12:03:01 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-08 18:03:01 +0100 |
| commit | 552cfebab06f33290a9593fd3e2f5d835ee0dc72 (patch) | |
| tree | 6b86c26395483e14afd86dc0643c359759dcc43c /examples3d/debug_shape_modification3.rs | |
| parent | 2ed19347563f2f8b9dabcf4f818805dede148135 (diff) | |
| download | rapier-552cfebab06f33290a9593fd3e2f5d835ee0dc72.tar.gz rapier-552cfebab06f33290a9593fd3e2f5d835ee0dc72.tar.bz2 rapier-552cfebab06f33290a9593fd3e2f5d835ee0dc72.zip | |
Fix shape modification not updating graphics in testbed (#708)
* Fix shape modification not updating graphics in testbed
* Add update collider to Testbed
* chore: lint shape_modifications3
* chore: simplify GraphicsManager::remove_collider_nodes
---------
Co-authored-by: Sébastien Crozet <sebcrozet@dimforge.com>
Diffstat (limited to 'examples3d/debug_shape_modification3.rs')
| -rw-r--r-- | examples3d/debug_shape_modification3.rs | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/examples3d/debug_shape_modification3.rs b/examples3d/debug_shape_modification3.rs index 0fc3cc5..8974218 100644 --- a/examples3d/debug_shape_modification3.rs +++ b/examples3d/debug_shape_modification3.rs @@ -35,13 +35,32 @@ pub fn init_world(testbed: &mut Testbed) { let collider = ColliderBuilder::ball(ball_rad).density(100.0); let ball_coll_handle = colliders.insert_with_parent(collider, ball_handle, &mut bodies); + /* + * Colliders without bodies + */ + let shape_size = 3.0; + let static_collider = + ColliderBuilder::ball(shape_size).translation(vector![-15.0, shape_size, 18.0]); + colliders.insert(static_collider); + + let shapes = [ + SharedShape::ball(shape_size), + SharedShape::cuboid(shape_size, shape_size, shape_size), + SharedShape::cone(shape_size, shape_size), + SharedShape::cylinder(shape_size, shape_size), + ]; + let mut shape_idx = 0; + let shapeshifting_collider = ColliderBuilder::new(shapes[shape_idx].clone()) + .translation(vector![-15.0, shape_size, 9.0]); + let shapeshifting_coll_handle = colliders.insert(shapeshifting_collider); + let mut linvel = Vector::zeros(); let mut angvel = Vector::zeros(); let mut pos = Isometry::identity(); let mut step = 0; let snapped_frame = 51; - testbed.add_callback(move |_, physics, _, _| { + testbed.add_callback(move |mut gfx, physics, _, _| { step += 1; // Snap the ball velocity or restore it. @@ -53,6 +72,15 @@ pub fn init_world(testbed: &mut Testbed) { pos = *ball.position(); } + let shapeshifting_coll = physics + .colliders + .get_mut(shapeshifting_coll_handle) + .unwrap(); + if step % 50 == 0 { + shape_idx = (shape_idx + 1) % 4; + shapeshifting_coll.set_shape(shapes[shape_idx].clone()) + } + if step == 100 { ball.set_linvel(linvel, true); ball.set_angvel(angvel, true); @@ -62,6 +90,11 @@ pub fn init_world(testbed: &mut Testbed) { let ball_coll = physics.colliders.get_mut(ball_coll_handle).unwrap(); ball_coll.set_shape(SharedShape::ball(ball_rad * step as f32 * 2.0)); + + if let Some(gfx) = &mut gfx { + gfx.update_collider(ball_coll_handle, &physics.colliders); + gfx.update_collider(shapeshifting_coll_handle, &physics.colliders); + } }); /* @@ -111,5 +144,5 @@ pub fn init_world(testbed: &mut Testbed) { * Set up the testbed. */ testbed.set_world(bodies, colliders, impulse_joints, multibody_joints); - testbed.look_at(point![10.0, 10.0, 10.0], Point::origin()); + testbed.look_at(point![40.0, 40.0, 40.0], Point::origin()); } |
