Skip to content

Collision Handler

Centralized collision detection and response system that manages interactions between vehicles, track elements, and environmental objects.


🎯 Core Responsibilities

FunctionDescription
Vehicle-Track CollisionsHandles cars going off-track
Effect Object InteractionsManages special track objects
Vehicle-Vehicle CollisionsProcesses car-to-car impacts
Collision VisualizationProvides 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 getCarCorners for precise collision detection
  • Skips vehicles with noCollision flag
  • Aggregates all colliding vehicles before updating effects

handleCollisionChecks(gameScene: GameScene, deltaTime: number)

Manages vehicle collisions with track boundaries.

Parameters:

NameTypeDescription
gameSceneGameSceneCurrent game state
deltaTimenumberFrame time for physics

Behavior:

  1. Checks player against track collider
  2. Visualizes collision points (debug)
  3. Applies physics responses via physicsDriver
  4. 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 TypeDescription
Player vs OpponentPrimary race collisions
Opponent vs OpponentAI traffic management

Optimizations:

  • Skips noCollision flagged vehicles
  • Avoids duplicate checks (A vs B == B vs A)
  • Uses efficient pairwise comparison

🧩 Implementation Details

Collision Detection

// Typical detection call
const isColliding = collisionManager.isCollidingWithAnotherObject(
getCarCorners(position, height, width, angle),
targetCollision
);

Physics Response

physicsDriver.handleCollision(
vehicle,
collisionNormal,
trackCollider,
deltaTime
);

🏎️ Usage Example

// Game loop integration
function 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 Responsibility
Each handler method focuses on one collision type:
1. Effect objects
2. Track boundaries
3. Inter-vehicle
### Frame Consistency
- All collisions processed in single frame
- Uses same physics timestep
### Extensibility
Easy 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