aboutsummaryrefslogtreecommitdiff
path: root/src/pipeline/event_handler.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2021-06-02 17:15:46 +0200
committerGitHub <noreply@github.com>2021-06-02 17:15:46 +0200
commit6ba1c9dec184adcba2c68cc1851dc05587fd0bf0 (patch)
treeb672cfc4db1d2f426dad931d77098ecb4a600358 /src/pipeline/event_handler.rs
parent3bac79ecacdeaa18de19127b7a6c82cbfab29d14 (diff)
parentbde6657287cd32a801abb996322c520673406418 (diff)
downloadrapier-6ba1c9dec184adcba2c68cc1851dc05587fd0bf0.tar.gz
rapier-6ba1c9dec184adcba2c68cc1851dc05587fd0bf0.tar.bz2
rapier-6ba1c9dec184adcba2c68cc1851dc05587fd0bf0.zip
Merge pull request #196 from dimforge/api_changes
More API changes
Diffstat (limited to 'src/pipeline/event_handler.rs')
-rw-r--r--src/pipeline/event_handler.rs25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/pipeline/event_handler.rs b/src/pipeline/event_handler.rs
index 9d7b17a..c54acc2 100644
--- a/src/pipeline/event_handler.rs
+++ b/src/pipeline/event_handler.rs
@@ -1,6 +1,23 @@
-use crate::geometry::{ContactEvent, IntersectionEvent};
+use crate::geometry::{ContactEvent, ContactPair, IntersectionEvent};
use crossbeam::channel::Sender;
+bitflags::bitflags! {
+ #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
+ /// Flags affecting the events generated for this collider.
+ pub struct ActiveEvents: u32 {
+ /// If set, Rapier will call `EventHandler::handle_intersection_event` whenever relevant for this collider.
+ const INTERSECTION_EVENTS = 0b0001;
+ /// If set, Rapier will call `PhysicsHooks::handle_contact_event` whenever relevant for this collider.
+ const CONTACT_EVENTS = 0b0010;
+ }
+}
+
+impl Default for ActiveEvents {
+ fn default() -> Self {
+ ActiveEvents::empty()
+ }
+}
+
/// Trait implemented by structures responsible for handling events generated by the physics engine.
///
/// Implementors of this trait will typically collect these events for future processing.
@@ -13,12 +30,12 @@ pub trait EventHandler: Send + Sync {
///
/// A contact event is emitted when two collider start or stop touching, independently from the
/// number of contact points involved.
- fn handle_contact_event(&self, event: ContactEvent);
+ fn handle_contact_event(&self, event: ContactEvent, contact_pair: &ContactPair);
}
impl EventHandler for () {
fn handle_intersection_event(&self, _event: IntersectionEvent) {}
- fn handle_contact_event(&self, _event: ContactEvent) {}
+ fn handle_contact_event(&self, _event: ContactEvent, _contact_pair: &ContactPair) {}
}
/// A physics event handler that collects events into a crossbeam channel.
@@ -45,7 +62,7 @@ impl EventHandler for ChannelEventCollector {
let _ = self.intersection_event_sender.send(event);
}
- fn handle_contact_event(&self, event: ContactEvent) {
+ fn handle_contact_event(&self, event: ContactEvent, _: &ContactPair) {
let _ = self.contact_event_sender.send(event);
}
}