aboutsummaryrefslogtreecommitdiff
path: root/src_testbed
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2021-02-24 11:26:53 +0100
committerGitHub <noreply@github.com>2021-02-24 11:26:53 +0100
commit649eba10130673534a60b17a0343b15208e5d622 (patch)
tree0a5532b645945bbe542ad9a41d1344a318f307d8 /src_testbed
parentd31a327b45118a77bd9676f350f110683a235acf (diff)
parent3cc2738e5fdcb0d25818b550cdff93eab75f1b20 (diff)
downloadrapier-649eba10130673534a60b17a0343b15208e5d622.tar.gz
rapier-649eba10130673534a60b17a0343b15208e5d622.tar.bz2
rapier-649eba10130673534a60b17a0343b15208e5d622.zip
Merge pull request #120 from dimforge/contact_modification
Add the ability to modify the contact points seen by the constraints solver
Diffstat (limited to 'src_testbed')
-rw-r--r--src_testbed/harness/mod.rs15
-rw-r--r--src_testbed/physics/mod.rs4
-rw-r--r--src_testbed/testbed.rs10
3 files changed, 16 insertions, 13 deletions
diff --git a/src_testbed/harness/mod.rs b/src_testbed/harness/mod.rs
index afdc23a..5e75d85 100644
--- a/src_testbed/harness/mod.rs
+++ b/src_testbed/harness/mod.rs
@@ -7,7 +7,7 @@ use plugin::HarnessPlugin;
use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet};
use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase};
use rapier::math::Vector;
-use rapier::pipeline::{ChannelEventCollector, PhysicsPipeline, QueryPipeline};
+use rapier::pipeline::{ChannelEventCollector, PhysicsHooks, PhysicsPipeline, QueryPipeline};
pub mod plugin;
@@ -111,15 +111,16 @@ impl Harness {
}
pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) {
- self.set_world_with_gravity(bodies, colliders, joints, Vector::y() * -9.81)
+ self.set_world_with_params(bodies, colliders, joints, Vector::y() * -9.81, ())
}
- pub fn set_world_with_gravity(
+ pub fn set_world_with_params(
&mut self,
bodies: RigidBodySet,
colliders: ColliderSet,
joints: JointSet,
gravity: Vector<f32>,
+ hooks: impl PhysicsHooks + 'static,
) {
// println!("Num bodies: {}", bodies.len());
// println!("Num joints: {}", joints.len());
@@ -127,6 +128,8 @@ impl Harness {
self.physics.bodies = bodies;
self.physics.colliders = colliders;
self.physics.joints = joints;
+ self.physics.hooks = Box::new(hooks);
+
self.physics.broad_phase = BroadPhase::new();
self.physics.narrow_phase = NarrowPhase::new();
self.state.timestep_id = 0;
@@ -176,8 +179,7 @@ impl Harness {
&mut physics.bodies,
&mut physics.colliders,
&mut physics.joints,
- None,
- None,
+ &*physics.hooks,
event_handler,
);
});
@@ -192,8 +194,7 @@ impl Harness {
&mut self.physics.bodies,
&mut self.physics.colliders,
&mut self.physics.joints,
- None,
- None,
+ &*self.physics.hooks,
&self.event_handler,
);
diff --git a/src_testbed/physics/mod.rs b/src_testbed/physics/mod.rs
index 808e9bd..0987e32 100644
--- a/src_testbed/physics/mod.rs
+++ b/src_testbed/physics/mod.rs
@@ -2,7 +2,7 @@ use crossbeam::channel::Receiver;
use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet};
use rapier::geometry::{BroadPhase, ColliderSet, ContactEvent, IntersectionEvent, NarrowPhase};
use rapier::math::Vector;
-use rapier::pipeline::{PhysicsPipeline, QueryPipeline};
+use rapier::pipeline::{PhysicsHooks, PhysicsPipeline, QueryPipeline};
pub struct PhysicsSnapshot {
timestep_id: usize,
@@ -77,6 +77,7 @@ pub struct PhysicsState {
pub query_pipeline: QueryPipeline,
pub integration_parameters: IntegrationParameters,
pub gravity: Vector<f32>,
+ pub hooks: Box<dyn PhysicsHooks>,
}
impl PhysicsState {
@@ -91,6 +92,7 @@ impl PhysicsState {
query_pipeline: QueryPipeline::new(),
integration_parameters: IntegrationParameters::default(),
gravity: Vector::y() * -9.81,
+ hooks: Box::new(()),
}
}
}
diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs
index b8ef324..bc5cd6c 100644
--- a/src_testbed/testbed.rs
+++ b/src_testbed/testbed.rs
@@ -25,6 +25,7 @@ use rapier::geometry::{ColliderHandle, ColliderSet, NarrowPhase};
#[cfg(feature = "dim3")]
use rapier::geometry::{InteractionGroups, Ray};
use rapier::math::{Isometry, Vector};
+use rapier::pipeline::PhysicsHooks;
#[cfg(all(feature = "dim2", feature = "other-backends"))]
use crate::box2d_backend::Box2dWorld;
@@ -245,20 +246,19 @@ impl Testbed {
}
pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) {
- self.set_world_with_gravity(bodies, colliders, joints, Vector::y() * -9.81)
+ self.set_world_with_params(bodies, colliders, joints, Vector::y() * -9.81, ())
}
- pub fn set_world_with_gravity(
+ pub fn set_world_with_params(
&mut self,
bodies: RigidBodySet,
colliders: ColliderSet,
joints: JointSet,
gravity: Vector<f32>,
+ hooks: impl PhysicsHooks + 'static,
) {
- println!("Num bodies: {}", bodies.len());
- println!("Num joints: {}", joints.len());
self.harness
- .set_world_with_gravity(bodies, colliders, joints, gravity);
+ .set_world_with_params(bodies, colliders, joints, gravity, hooks);
self.state
.action_flags