Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef BT_SPHERE_BOX_COLLISION_ALGORITHM_H
00017 #define BT_SPHERE_BOX_COLLISION_ALGORITHM_H
00018
00019 #include "btActivatingCollisionAlgorithm.h"
00020 #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
00021 #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
00022 class btPersistentManifold;
00023 #include "btCollisionDispatcher.h"
00024
00025 #include "LinearMath/btVector3.h"
00026
00029 class btSphereBoxCollisionAlgorithm : public btActivatingCollisionAlgorithm
00030 {
00031 bool m_ownManifold;
00032 btPersistentManifold* m_manifoldPtr;
00033 bool m_isSwapped;
00034
00035 public:
00036
00037 btSphereBoxCollisionAlgorithm(btPersistentManifold* mf,const btCollisionAlgorithmConstructionInfo& ci,btCollisionObject* col0,btCollisionObject* col1, bool isSwapped);
00038
00039 virtual ~btSphereBoxCollisionAlgorithm();
00040
00041 virtual void processCollision (btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00042
00043 virtual btScalar calculateTimeOfImpact(btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00044
00045 virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
00046 {
00047 if (m_manifoldPtr && m_ownManifold)
00048 {
00049 manifoldArray.push_back(m_manifoldPtr);
00050 }
00051 }
00052
00053 btScalar getSphereDistance( btCollisionObject* boxObj,btVector3& v3PointOnBox, btVector3& v3PointOnSphere, const btVector3& v3SphereCenter, btScalar fRadius );
00054
00055 btScalar getSpherePenetration( btCollisionObject* boxObj, btVector3& v3PointOnBox, btVector3& v3PointOnSphere, const btVector3& v3SphereCenter, btScalar fRadius, const btVector3& aabbMin, const btVector3& aabbMax);
00056
00057 struct CreateFunc :public btCollisionAlgorithmCreateFunc
00058 {
00059 virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, btCollisionObject* body0,btCollisionObject* body1)
00060 {
00061 void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSphereBoxCollisionAlgorithm));
00062 if (!m_swapped)
00063 {
00064 return new(mem) btSphereBoxCollisionAlgorithm(0,ci,body0,body1,false);
00065 } else
00066 {
00067 return new(mem) btSphereBoxCollisionAlgorithm(0,ci,body0,body1,true);
00068 }
00069 }
00070 };
00071
00072 };
00073
00074 #endif //BT_SPHERE_BOX_COLLISION_ALGORITHM_H
00075