Crates.io | collide |
lib.rs | collide |
version | 0.2.1 |
created_at | 2021-05-25 19:42:16.445856+00 |
updated_at | 2025-03-29 12:18:37.641941+00 |
description | Simple extensible collision management |
homepage | |
repository | https://gitlab.com/porky11/collide |
max_upload_size | |
id | 401970 |
size | 6,448 |
A generic trait system for collision detection in Rust. Implement collision checking between arbitrary shapes while maintaining dimension and scalar-type flexibility.
Collider
trait for cross-library interoperabilityVectorSpace
traituse collide::{Collider, CollisionInfo, VectorSpace};
struct Sphere<V: VectorSpace> {
center: V,
radius: V::Scalar,
}
impl<V: VectorSpace> Collider for Sphere<V> {
type Vector = V;
fn collision_info(&self, other: &Self) -> Option<CollisionInfo<V>> {
let delta = other.center - self.center;
let distance = delta.magnitude();
let direction = delta / distance;
let min_distance = self.radius + other.radius;
if distance > min_distance {
return None;
}
Some(CollisionInfo {
self_contact: self.center + direction * self.radius,
other_contact: other.center - direction * other.radius,
vector: direction * (min_distance - distance),
})
}
}
Handle multiple collider types with an enum dispatch:
enum GenericCollider<V: VectorSpace> {
Sphere { center: V, radius: V::Scalar },
Box { center: V, size: V },
}