diff options
Diffstat (limited to 'src_testbed')
| -rw-r--r-- | src_testbed/box2d_backend.rs | 7 | ||||
| -rw-r--r-- | src_testbed/lib.rs | 1 | ||||
| -rw-r--r-- | src_testbed/physx_backend.rs | 7 | ||||
| -rw-r--r-- | src_testbed/testbed.rs | 17 | ||||
| -rw-r--r-- | src_testbed/ui.rs | 43 |
5 files changed, 30 insertions, 45 deletions
diff --git a/src_testbed/box2d_backend.rs b/src_testbed/box2d_backend.rs index 9cb4b5f..b9bc97e 100644 --- a/src_testbed/box2d_backend.rs +++ b/src_testbed/box2d_backend.rs @@ -223,11 +223,8 @@ impl Box2dWorld { pub fn step(&mut self, counters: &mut Counters, params: &IntegrationParameters) { counters.step_started(); - self.world.step( - params.dt, - params.max_velocity_iterations as i32, - params.max_stabilization_iterations as i32, - ); + self.world + .step(params.dt, params.num_solver_iterations.get() as i32, 1); counters.step_completed(); } diff --git a/src_testbed/lib.rs b/src_testbed/lib.rs index 46364cb..12339e5 100644 --- a/src_testbed/lib.rs +++ b/src_testbed/lib.rs @@ -12,6 +12,7 @@ pub use crate::harness::plugin::HarnessPlugin; pub use crate::physics::PhysicsState; pub use crate::plugin::TestbedPlugin; pub use crate::testbed::{Testbed, TestbedApp, TestbedGraphics, TestbedState}; +pub use bevy::prelude::KeyCode; #[cfg(all(feature = "dim2", feature = "other-backends"))] mod box2d_backend; diff --git a/src_testbed/physx_backend.rs b/src_testbed/physx_backend.rs index 208426c..7070c81 100644 --- a/src_testbed/physx_backend.rs +++ b/src_testbed/physx_backend.rs @@ -209,10 +209,9 @@ impl PhysxWorld { actor.set_linear_velocity(&linvel, true); actor.set_angular_velocity(&angvel, true); actor.set_solver_iteration_counts( - // Use our number of velocity iterations as their number of position iterations. - integration_parameters.max_velocity_iterations.max(1) as u32, - // Use our number of velocity stabilization iterations as their number of velocity iterations. - integration_parameters.max_stabilization_iterations.max(1) as u32, + // Use our number of solver iterations as their number of position iterations. + integration_parameters.num_solver_iterations.get() as u32, + 1, ); rapier2dynamic.insert(rapier_handle, actor); diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs index 9b08e90..aac73e8 100644 --- a/src_testbed/testbed.rs +++ b/src_testbed/testbed.rs @@ -1,5 +1,6 @@ use std::env; use std::mem; +use std::num::NonZeroUsize; use bevy::prelude::*; @@ -147,6 +148,7 @@ pub struct TestbedGraphics<'a, 'b, 'c, 'd, 'e, 'f> { #[allow(dead_code)] // Dead in 2D but not in 3D. camera_transform: GlobalTransform, camera: &'a mut OrbitCamera, + keys: &'a Input<KeyCode>, } pub struct Testbed<'a, 'b, 'c, 'd, 'e, 'f> { @@ -284,11 +286,7 @@ impl TestbedApp { self.harness .physics .integration_parameters - .max_velocity_iterations = 4; - self.harness - .physics - .integration_parameters - .max_stabilization_iterations = 1; + .num_solver_iterations = NonZeroUsize::new(4).unwrap(); // Init world. let mut testbed = Testbed { @@ -458,6 +456,10 @@ impl<'a, 'b, 'c, 'd, 'e, 'f> TestbedGraphics<'a, 'b, 'c, 'd, 'e, 'f> { colliders, ) } + + pub fn keys(&self) -> &Input<KeyCode> { + &*self.keys + } } impl<'a, 'b, 'c, 'd, 'e, 'f> Testbed<'a, 'b, 'c, 'd, 'e, 'f> { @@ -910,7 +912,7 @@ impl<'a, 'b, 'c, 'd, 'e, 'f> Testbed<'a, 'b, 'c, 'd, 'e, 'f> { .multibody_joints .iter() .next() - .map(|a| a.2.rigid_body_handle()); + .map(|(_, _, _, link)| link.rigid_body_handle()); if let Some(to_delete) = to_delete { self.harness .physics @@ -1107,6 +1109,7 @@ fn update_testbed( components: &mut gfx_components, camera_transform: *cameras.single().1, camera: &mut cameras.single_mut().2, + keys: &*keys, }; let mut testbed = Testbed { @@ -1200,6 +1203,7 @@ fn update_testbed( components: &mut gfx_components, camera_transform: *cameras.single().1, camera: &mut cameras.single_mut().2, + keys: &*keys, }; let mut testbed = Testbed { @@ -1351,6 +1355,7 @@ fn update_testbed( components: &mut gfx_components, camera_transform: *cameras.single().1, camera: &mut cameras.single_mut().2, + keys: &*keys, }; harness.step_with_graphics(Some(&mut testbed_graphics)); diff --git a/src_testbed/ui.rs b/src_testbed/ui.rs index fee4abc..3a51b32 100644 --- a/src_testbed/ui.rs +++ b/src_testbed/ui.rs @@ -1,5 +1,6 @@ use rapier::counters::Counters; use rapier::math::Real; +use std::num::NonZeroUsize; use crate::debug_render::DebugRenderPipelineResource; use crate::harness::Harness; @@ -98,43 +99,25 @@ pub fn update_ui( let integration_parameters = &mut harness.physics.integration_parameters; - ui.checkbox( - &mut integration_parameters.interleave_restitution_and_friction_resolution, - "interleave friction resolution", - ); - if state.selected_backend == PHYSX_BACKEND_PATCH_FRICTION || state.selected_backend == PHYSX_BACKEND_TWO_FRICTION_DIR { - ui.add( - Slider::new(&mut integration_parameters.max_velocity_iterations, 1..=200) - .text("pos. iters."), - ); - ui.add( - Slider::new( - &mut integration_parameters.max_stabilization_iterations, - 1..=200, - ) - .text("vel. iters."), - ); + let mut num_iterations = integration_parameters.num_solver_iterations.get(); + ui.add(Slider::new(&mut num_iterations, 1..=40).text("pos. iters.")); + integration_parameters.num_solver_iterations = + NonZeroUsize::new(num_iterations).unwrap(); } else { - ui.add( - Slider::new(&mut integration_parameters.max_velocity_iterations, 1..=200) - .text("vel. rest. iters."), - ); - ui.add( - Slider::new( - &mut integration_parameters.max_velocity_friction_iterations, - 1..=200, - ) - .text("vel. frict. iters."), - ); + let mut num_iterations = integration_parameters.num_solver_iterations.get(); + ui.add(Slider::new(&mut num_iterations, 1..=40).text("num solver iters.")); + integration_parameters.num_solver_iterations = + NonZeroUsize::new(num_iterations).unwrap(); + ui.add( Slider::new( - &mut integration_parameters.max_stabilization_iterations, - 1..=200, + &mut integration_parameters.num_friction_iteration_per_solver_iteration, + 1..=40, ) - .text("vel. stab. iters."), + .text("frict. iters. per solver iters."), ); } |
