You got some great basic collision detection and handling in this chapter, but there's always room for improvement. Here are a few ideas:

  • Implement sphere trees for more accurate object-to-object tests.
  • Perform extra checks for whether an object travels a large enough distance in between frames; a collision could occur between the start and end locations.
  • Allow the player to crouch or crawl to get in tight places.
  • Physics-wise, you could implement "head bobbing," which just bounces the camera up and down when the player is moving.