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_SPU_CONTACTMANIFOLD_COLLISION_ALGORITHM_H
00017 #define BT_SPU_CONTACTMANIFOLD_COLLISION_ALGORITHM_H
00018
00019 #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
00020 #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
00021 #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
00022 #include "BulletCollision/BroadphaseCollision/btDispatcher.h"
00023 #include "LinearMath/btTransformUtil.h"
00024 #include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
00025
00026 class btPersistentManifold;
00027
00028
00029
00031 ATTRIBUTE_ALIGNED16(class) SpuContactManifoldCollisionAlgorithm : public btCollisionAlgorithm
00032 {
00033 btVector3 m_shapeDimensions0;
00034 btVector3 m_shapeDimensions1;
00035 btPersistentManifold* m_manifoldPtr;
00036 int m_shapeType0;
00037 int m_shapeType1;
00038 float m_collisionMargin0;
00039 float m_collisionMargin1;
00040
00041 const btCollisionObject* m_collisionObject0;
00042 const btCollisionObject* m_collisionObject1;
00043
00044
00045
00046
00047 public:
00048
00049 virtual void processCollision (const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00050
00051 virtual btScalar calculateTimeOfImpact(btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut);
00052
00053
00054 SpuContactManifoldCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci,const btCollisionObject* body0,const btCollisionObject* body1);
00055 #ifdef USE_SEPDISTANCE_UTIL
00056 btConvexSeparatingDistanceUtil m_sepDistance;
00057 #endif //USE_SEPDISTANCE_UTIL
00058
00059 virtual ~SpuContactManifoldCollisionAlgorithm();
00060
00061 virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
00062 {
00063 if (m_manifoldPtr)
00064 manifoldArray.push_back(m_manifoldPtr);
00065 }
00066
00067 btPersistentManifold* getContactManifoldPtr()
00068 {
00069 return m_manifoldPtr;
00070 }
00071
00072 const btCollisionObject* getCollisionObject0()
00073 {
00074 return m_collisionObject0;
00075 }
00076
00077 const btCollisionObject* getCollisionObject1()
00078 {
00079 return m_collisionObject1;
00080 }
00081
00082 int getShapeType0() const
00083 {
00084 return m_shapeType0;
00085 }
00086
00087 int getShapeType1() const
00088 {
00089 return m_shapeType1;
00090 }
00091 float getCollisionMargin0() const
00092 {
00093 return m_collisionMargin0;
00094 }
00095 float getCollisionMargin1() const
00096 {
00097 return m_collisionMargin1;
00098 }
00099
00100 const btVector3& getShapeDimensions0() const
00101 {
00102 return m_shapeDimensions0;
00103 }
00104
00105 const btVector3& getShapeDimensions1() const
00106 {
00107 return m_shapeDimensions1;
00108 }
00109
00110 struct CreateFunc :public btCollisionAlgorithmCreateFunc
00111 {
00112 virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap)
00113 {
00114 void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(SpuContactManifoldCollisionAlgorithm));
00115 return new(mem) SpuContactManifoldCollisionAlgorithm(ci,body0Wrap->getCollisionObject(),body1Wrap->getCollisionObject());
00116 }
00117 };
00118
00119 };
00120
00121 #endif //BT_SPU_CONTACTMANIFOLD_COLLISION_ALGORITHM_H