From 0771c6d09a5409d9bf5230f57781fee21f06f2af Mon Sep 17 00:00:00 2001 From: Willow Sparks Date: Tue, 3 Feb 2026 21:03:41 +0000 Subject: [PATCH] Add CollisionEvent and CollisionEventKind types - CollisionEventKind: BodyVsBody, BodyVsStatic, TriggerEnter, TriggerStay, TriggerExit - CollisionEvent wraps kind + contact info - Exported from rust4d_physics lib --- crates/rust4d_physics/src/collision.rs | 25 +++++++++++++++++++++++++ crates/rust4d_physics/src/lib.rs | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/crates/rust4d_physics/src/collision.rs b/crates/rust4d_physics/src/collision.rs index c40d78c..ac9741a 100644 --- a/crates/rust4d_physics/src/collision.rs +++ b/crates/rust4d_physics/src/collision.rs @@ -5,6 +5,7 @@ use bitflags::bitflags; +use crate::body::BodyKey; use crate::shapes::{Plane4D, Sphere4D, AABB4D}; use rust4d_math::Vec4; @@ -133,6 +134,30 @@ impl CollisionFilter { } } +/// What kind of collision event occurred +#[derive(Clone, Copy, Debug)] +pub enum CollisionEventKind { + /// Two dynamic/kinematic bodies collided + BodyVsBody { body_a: BodyKey, body_b: BodyKey }, + /// A body collided with a static collider + BodyVsStatic { body: BodyKey, static_index: usize }, + /// A body entered a trigger zone + TriggerEnter { body: BodyKey, trigger_index: usize }, + /// A body is staying inside a trigger zone + TriggerStay { body: BodyKey, trigger_index: usize }, + /// A body exited a trigger zone + TriggerExit { body: BodyKey, trigger_index: usize }, +} + +/// A collision event generated during physics simulation +#[derive(Clone, Debug)] +pub struct CollisionEvent { + /// What kind of collision this is + pub kind: CollisionEventKind, + /// Contact information (point, normal, penetration) + pub contact: Contact, +} + /// Contact information from a collision #[derive(Clone, Copy, Debug)] pub struct Contact { diff --git a/crates/rust4d_physics/src/lib.rs b/crates/rust4d_physics/src/lib.rs index 91f06d4..c2a9e1e 100644 --- a/crates/rust4d_physics/src/lib.rs +++ b/crates/rust4d_physics/src/lib.rs @@ -15,7 +15,7 @@ pub mod world; // Re-export commonly used types pub use body::{BodyKey, BodyType, RigidBody4D, StaticCollider}; -pub use collision::{aabb_vs_aabb, aabb_vs_plane, sphere_vs_aabb, sphere_vs_plane, sphere_vs_sphere, CollisionFilter, CollisionLayer, Contact}; +pub use collision::{aabb_vs_aabb, aabb_vs_plane, sphere_vs_aabb, sphere_vs_plane, sphere_vs_sphere, CollisionEvent, CollisionEventKind, CollisionFilter, CollisionLayer, Contact}; pub use material::PhysicsMaterial; pub use shapes::{Collider, Plane4D, Sphere4D, AABB4D}; pub use raycast::{RayHit, ray_vs_sphere, ray_vs_aabb, ray_vs_plane, ray_vs_collider}; -- knotmirror 0.0.1