/** @file
* Original ReactPhysics3D C++ library by Daniel Chappuis This code is re-licensed with permission from ReactPhysics3D author.
* @author Daniel CHAPPUIS
* @author Edouard DUPIN
* @copyright 2010-2016, Daniel Chappuis
* @copyright 2017, Edouard DUPIN
* @license MPL v2.0 (see license file)
*/
// Libraries
#include
#include
using namespace ephysics;
DefaultCollisionDispatch::DefaultCollisionDispatch() {
}
void DefaultCollisionDispatch::init(CollisionDetection* _collisionDetection) {
// Initialize the collision algorithms
m_sphereVsSphereAlgorithm.init(_collisionDetection);
m_GJKAlgorithm.init(_collisionDetection);
m_concaveVsConvexAlgorithm.init(_collisionDetection);
}
NarrowPhaseAlgorithm* DefaultCollisionDispatch::selectAlgorithm(int32_t _type1, int32_t _type2) {
CollisionShapeType shape1Type = static_cast(_type1);
CollisionShapeType shape2Type = static_cast(_type2);
// Sphere vs Sphere algorithm
if (shape1Type == SPHERE && shape2Type == SPHERE) {
return &m_sphereVsSphereAlgorithm;
} else if ( ( !CollisionShape::isConvex(shape1Type)
&& CollisionShape::isConvex(shape2Type) )
|| ( !CollisionShape::isConvex(shape2Type)
&& CollisionShape::isConvex(shape1Type) ) ) {
// Concave vs Convex algorithm
return &m_concaveVsConvexAlgorithm;
} else if (CollisionShape::isConvex(shape1Type) && CollisionShape::isConvex(shape2Type)) {
// Convex vs Convex algorithm (GJK algorithm)
return &m_GJKAlgorithm;
} else {
return nullptr;
}
}