diff options
| author | Sébastien Crozet <sebcrozet@dimforge.com> | 2024-01-21 21:02:23 +0100 |
|---|---|---|
| committer | Sébastien Crozet <sebcrozet@dimforge.com> | 2024-01-21 21:02:27 +0100 |
| commit | 9b87f06a856c4d673642e210f8b0986cfdbac3af (patch) | |
| tree | b4f4eaac0e5004f8ba3fccd42e5aea4fd565dcc6 /examples3d/platform3.rs | |
| parent | 9ac3503b879f95fcdf5414470ba5aedf195b9a97 (diff) | |
| download | rapier-9b87f06a856c4d673642e210f8b0986cfdbac3af.tar.gz rapier-9b87f06a856c4d673642e210f8b0986cfdbac3af.tar.bz2 rapier-9b87f06a856c4d673642e210f8b0986cfdbac3af.zip | |
feat: implement new "small-steps" solver + joint improvements
Diffstat (limited to 'examples3d/platform3.rs')
| -rw-r--r-- | examples3d/platform3.rs | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/examples3d/platform3.rs b/examples3d/platform3.rs index d42cb76..9025afa 100644 --- a/examples3d/platform3.rs +++ b/examples3d/platform3.rs @@ -29,12 +29,12 @@ pub fn init_world(testbed: &mut Testbed) { let shift = rad * 2.0; let centerx = shift * num as f32 / 2.0; - let centery = shift / 2.0 + 3.04; let centerz = shift * num as f32 / 2.0; for i in 0usize..num { for j in 0usize..num { for k in 0usize..num { + let centery = if j >= num / 2 { 5.0 } else { 3.0 }; let x = i as f32 * shift - centerx; let y = j as f32 * shift + centery; let z = k as f32 * shift - centerz; @@ -51,11 +51,8 @@ pub fn init_world(testbed: &mut Testbed) { /* * Setup a velocity-based kinematic rigid body. */ - let platform_body = RigidBodyBuilder::kinematic_velocity_based().translation(vector![ - 0.0, - 1.5 + 0.8, - -10.0 * rad - ]); + let platform_body = + RigidBodyBuilder::kinematic_velocity_based().translation(vector![0.0, 1.5 + 0.8, 0.0]); let velocity_based_platform_handle = bodies.insert(platform_body); let collider = ColliderBuilder::cuboid(rad * 10.0, rad, rad * 10.0); colliders.insert_with_parent(collider, velocity_based_platform_handle, &mut bodies); @@ -65,8 +62,8 @@ pub fn init_world(testbed: &mut Testbed) { */ let platform_body = RigidBodyBuilder::kinematic_position_based().translation(vector![ 0.0, - 2.0 + 1.5 + 0.8, - -10.0 * rad + 3.0 + 1.5 + 0.8, + 0.0 ]); let position_based_platform_handle = bodies.insert(platform_body); let collider = ColliderBuilder::cuboid(rad * 10.0, rad, rad * 10.0); @@ -75,22 +72,17 @@ pub fn init_world(testbed: &mut Testbed) { /* * Setup a callback to control the platform. */ - let mut count = 0; testbed.add_callback(move |_, physics, _, run_state| { - count += 1; - if count % 100 > 50 { - return; - } - let velocity = vector![ 0.0, - (run_state.time * 5.0).sin(), - run_state.time.sin() * 5.0 + (run_state.time * 2.0).sin(), + run_state.time.sin() * 2.0 ]; // Update the velocity-based kinematic body by setting its velocity. if let Some(platform) = physics.bodies.get_mut(velocity_based_platform_handle) { platform.set_linvel(velocity, true); + platform.set_angvel(vector![0.0, 0.2, 0.0], true); } // Update the position-based kinematic body by setting its next position. |
