aboutsummaryrefslogtreecommitdiff
path: root/examples2d
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2021-09-12 09:58:47 +0200
committerSébastien Crozet <sebastien@crozet.re>2021-09-12 01:49:09 -0700
commitd858ae4c4e04d37c6b5a2e37d10c55bf2f239714 (patch)
tree9d78e6917318e86bb56bf6a6b1d31ae2aa1902d9 /examples2d
parent5e133aac92ee5376131d0449daef2ae32e8f2848 (diff)
downloadrapier-d858ae4c4e04d37c6b5a2e37d10c55bf2f239714.tar.gz
rapier-d858ae4c4e04d37c6b5a2e37d10c55bf2f239714.tar.bz2
rapier-d858ae4c4e04d37c6b5a2e37d10c55bf2f239714.zip
Make the 2D add-remove demo more intereting.
Diffstat (limited to 'examples2d')
-rw-r--r--examples2d/add_remove2.rs58
1 files changed, 25 insertions, 33 deletions
diff --git a/examples2d/add_remove2.rs b/examples2d/add_remove2.rs
index 4c830c3..f701a90 100644
--- a/examples2d/add_remove2.rs
+++ b/examples2d/add_remove2.rs
@@ -13,27 +13,20 @@ pub fn init_world(testbed: &mut Testbed) {
.map(|pos| {
let rigid_body = RigidBodyBuilder::new_kinematic_position_based()
.translation(pos)
- // .ccd_enabled(true)
.build();
let handle = bodies.insert(rigid_body);
- let collider = ColliderBuilder::cuboid(rad * 10.0, rad)
- .active_events(ActiveEvents::CONTACT_EVENTS)
- .build();
- let coll_handle = colliders.insert_with_parent(collider, handle, &mut bodies);
- (pos, handle, coll_handle)
+ let collider = ColliderBuilder::cuboid(rad * 10.0, rad).build();
+ colliders.insert_with_parent(collider, handle, &mut bodies);
+ handle
})
.collect::<Vec<_>>();
- let mut rotation = 0.0;
-
// Callback that will be executed on the main loop to handle proximities.
- testbed.add_callback(move |mut graphics, physics, events, state| {
+ testbed.add_callback(move |mut graphics, physics, _, state| {
let rot = state.time * -1.0;
- let pos = state.time.sin() * 5.0;
- for (p, i, _) in platform_handles.iter() {
- let mut c = physics.bodies.get_mut(*i).unwrap();
- c.set_next_kinematic_rotation(rot);
- //c.set_next_kinematic_translation(vector![pos, 0.0]);
+ for rb_handle in &platform_handles {
+ let rb = physics.bodies.get_mut(*rb_handle).unwrap();
+ rb.set_next_kinematic_rotation(rot);
}
if state.timestep_id % 10 == 0 {
@@ -41,7 +34,6 @@ pub fn init_world(testbed: &mut Testbed) {
let y = rand::random::<f32>() * 10.0 + 10.0;
let rigid_body = RigidBodyBuilder::new_dynamic()
.translation(vector![x, y])
- // .ccd_enabled(true)
.build();
let handle = physics.bodies.insert(rigid_body);
let collider = ColliderBuilder::cuboid(rad, rad).build();
@@ -54,24 +46,24 @@ pub fn init_world(testbed: &mut Testbed) {
}
}
- // let to_remove: Vec<_> = physics
- // .bodies
- // .iter()
- // .filter(|(_, b)| b.position().translation.vector.y < -10.0)
- // .map(|e| e.0)
- // .collect();
- // for handle in to_remove {
- // physics.bodies.remove(
- // handle,
- // &mut physics.islands,
- // &mut physics.colliders,
- // &mut physics.joints,
- // );
- //
- // if let Some(graphics) = &mut graphics {
- // graphics.remove_body(handle);
- // }
- // }
+ let to_remove: Vec<_> = physics
+ .bodies
+ .iter()
+ .filter(|(_, b)| b.position().translation.vector.y < -10.0)
+ .map(|e| e.0)
+ .collect();
+ for handle in to_remove {
+ physics.bodies.remove(
+ handle,
+ &mut physics.islands,
+ &mut physics.colliders,
+ &mut physics.joints,
+ );
+
+ if let Some(graphics) = &mut graphics {
+ graphics.remove_body(handle);
+ }
+ }
});
/*