Collision Handler
Centralized collision detection and response system that manages interactions between vehicles, track elements, and environmental objects.
🎯 Core Responsibilities
| Function | Description |
|---|---|
| Vehicle-Track Collisions | Handles cars going off-track |
| Effect Object Interactions | Manages special track objects |
| Vehicle-Vehicle Collisions | Processes car-to-car impacts |
| Collision Visualization | Provides debug rendering |
🛠️ Static Methods
handleEffectObjectsCollisions(gameScene: GameScene)
Processes interactions between vehicles and effect objects (puddles, obstacles, etc.)
Flow:
graph TD A[Get all effect objects] --> B[Check player collision] B --> C[Check opponent collisions] C --> D[Update effect objects] D --> E[Trigger effect callbacks]Parameters:
gameScene: Reference to the current game state
Key Logic:
- Uses
getCarCornersfor precise collision detection - Skips vehicles with
noCollisionflag - Aggregates all colliding vehicles before updating effects
handleCollisionChecks(gameScene: GameScene, deltaTime: number)
Manages vehicle collisions with track boundaries.
Parameters:
| Name | Type | Description |
|---|---|---|
gameScene | GameScene | Current game state |
deltaTime | number | Frame time for physics |
Behavior:
- Checks player against track collider
- Visualizes collision points (debug)
- Applies physics responses via
physicsDriver - Processes all opponents similarly
Visual Feedback:
- Calls
displayCollisionEffect()on impact - Shows collider corners in debug mode
handleCollisionsBetweenControllers(gameScene: GameScene)
Handles vehicle-to-vehicle collisions.
Collision Matrix:
| Check Type | Description |
|---|---|
| Player vs Opponent | Primary race collisions |
| Opponent vs Opponent | AI traffic management |
Optimizations:
- Skips
noCollisionflagged vehicles - Avoids duplicate checks (A vs B == B vs A)
- Uses efficient pairwise comparison
🧩 Implementation Details
Collision Detection
// Typical detection callconst isColliding = collisionManager.isCollidingWithAnotherObject( getCarCorners(position, height, width, angle), targetCollision);Physics Response
physicsDriver.handleCollision( vehicle, collisionNormal, trackCollider, deltaTime);🏎️ Usage Example
// Game loop integrationfunction updatePhysics(deltaTime: number) { CollisionHandlers.handleEffectObjectsCollisions(gameScene); CollisionHandlers.handleCollisionChecks(gameScene, deltaTime); CollisionHandlers.handleCollisionsBetweenControllers(gameScene);}
## 🛡️ Error Handling
**Safety Checks**:- Null checks for `playerController`- Track collider validation- Skip logic for `noCollision` vehicles
---
## 📊 Debugging Features
| Feature | Method | Description ||---------|--------|-------------|| Collider Visualization | `displayColliderCorners()` | Shows hitboxes || Impact Effects | `displayCollisionEffect()` | Visual feedback |
---
## 🧠 Design Considerations
### Single ResponsibilityEach handler method focuses on one collision type:1. Effect objects2. Track boundaries3. Inter-vehicle
### Frame Consistency- All collisions processed in single frame- Uses same physics timestep
### ExtensibilityEasy to add new collision types by adding handler methods
---
## ⚙️ Performance Tips
1. **Object Pooling**: - Reuse collision detection objects
2. **Early Outs**: - Check distance before precise collision
3. **Spatial Partitioning**: - Implement grid/quadtree for opponents
4. **LOD Colliders**: - Simplified colliders for distant objects