Example #1
0
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;
				}
			}
		
		}
	}
}