aboutsummaryrefslogtreecommitdiff
path: root/src_testbed
diff options
context:
space:
mode:
Diffstat (limited to 'src_testbed')
-rw-r--r--src_testbed/box2d_backend.rs7
-rw-r--r--src_testbed/lib.rs1
-rw-r--r--src_testbed/physx_backend.rs7
-rw-r--r--src_testbed/testbed.rs17
-rw-r--r--src_testbed/ui.rs43
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."),
);
}