# Collision Manager
[](https://crates.io/crates/collision-manager)
[](https://docs.rs/collision-manager)
Efficient collision management system built on the [collide](https://crates.io/crates/collide) crate.
## Features
- **Stable Indices**: Safe object references even with frequent add/remove
- **Bidirectional Collisions**: Track collisions from the perspectives of both objects
- **Multiple Query Modes**: Find first/all collisions with simple API
- **Zero Allocation**: Reuses memory buffers for frequent updates
## Basic Usage
```rust
use collision_manager::CollisionManager;
use collide::Collider;
struct Sphere { ... }
impl Collider for Sphere { ... }
let mut manager = CollisionManager::<Sphere, u32>::new();
// Add colliders with associated IDs
let player_id = manager.insert_collider(Sphere::new(1.0), 1);
let enemy_id = manager.insert_collider(Sphere::new(1.0), 2);
// Check collisions
if manager.check_collision(&Sphere::new(1.0)) {
println!("Collision detected!");
}
```
## Advanced Usage
```rust
// Compute all internal collisions
let collisions = manager.compute_inner_collisions();
// Process collision results
for (obj_id, collisions) in collisions.indexed() {
for collision in collisions {
println!("Object {} collided with {}", obj_id, collision.index);
handle_collision(collision.info.vector);
}
}
```
## Performance
- O(1) insert/remove by index
- O(n²) broad-phase collision checks (suitable for <1000 objects)
- Zero heap allocations after initial setup