static void checkCollision(GameObject *a, GameObject *b) { // at least one of them should always be a ball. if (a->collisionClass == GameObject::BallCollisions) { b->checkBallCollision(static_cast (a)); } if (b->collisionClass == GameObject::BallCollisions) { a->checkBallCollision(static_cast (b)); } } void GameManager::handleCollisions() { for (GameObjectList::iterator i = objects.begin(); i != objects.end(); i++) { GameObject *a = *i; if (a->collisionClass != GameObject::NoCollisions) { for (GameObjectList::iterator j = i+1; j != objects.end(); j++) { GameObject *b = *j; if (b->collisionClass != GameObject::NoCollisions) { // don't process collisions between scenery and other // scenery. if (! ((a->collisionClass == GameObject::ObstacleCollisions) && (b->collisionClass == GameObject::ObstacleCollisions))) { checkCollision(a,b); } } } } } }