void PhysicsSystem::NarrowPhaseCollisions() { for (int i = 0; i < allNodes.size(); i++) { PhysicsNode& first = *allNodes[i]; CollisionVolume* fv = first.GetCollisionVolume(); if (!fv) continue; for (int j = i + 1; j < allNodes.size(); j++) { PhysicsNode& second = *allNodes[j]; CollisionVolume* sv = second.GetCollisionVolume(); if (!sv) continue; switch(fv->GetType()) { case COLLISION_VOL_SPHERE: switch(sv->GetType()) { case COLLISION_VOL_SPHERE: CollisionData data; if (CollisionHelper::SphereSphereCollision(first, second, &data)) { CollisionHelper::AddCollisionImpulse(first, second, data); } continue; } case COLLISION_VOL_PLANE: switch(sv->GetType()) { case COLLISION_VOL_SPHERE: CollisionData data; if (CollisionHelper::PlaneSphereCollision(first, second, &data)) { CollisionHelper::AddCollisionImpulse(first, second, data); } continue; } } } } }