Blender V2.61 - r43446
|
00001 /* 00002 Bullet Continuous Collision Detection and Physics Library 00003 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ 00004 00005 This software is provided 'as-is', without any express or implied warranty. 00006 In no event will the authors be held liable for any damages arising from the use of this software. 00007 Permission is granted to anyone to use this software for any purpose, 00008 including commercial applications, and to alter it and redistribute it freely, 00009 subject to the following restrictions: 00010 00011 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 00012 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 00013 3. This notice may not be removed or altered from any source distribution. 00014 */ 00015 00016 #ifndef SOFT_RIGID_COLLISION_ALGORITHM_H 00017 #define SOFT_RIGID_COLLISION_ALGORITHM_H 00018 00019 #include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h" 00020 #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" 00021 #include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h" 00022 class btPersistentManifold; 00023 #include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" 00024 00025 #include "LinearMath/btVector3.h" 00026 class btSoftBody; 00027 00029 class btSoftRigidCollisionAlgorithm : public btCollisionAlgorithm 00030 { 00031 // bool m_ownManifold; 00032 // btPersistentManifold* m_manifoldPtr; 00033 00034 btSoftBody* m_softBody; 00035 btCollisionObject* m_rigidCollisionObject; 00036 00038 bool m_isSwapped; 00039 00040 public: 00041 00042 btSoftRigidCollisionAlgorithm(btPersistentManifold* mf,const btCollisionAlgorithmConstructionInfo& ci,btCollisionObject* col0,btCollisionObject* col1, bool isSwapped); 00043 00044 virtual ~btSoftRigidCollisionAlgorithm(); 00045 00046 virtual void processCollision (btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut); 00047 00048 virtual btScalar calculateTimeOfImpact(btCollisionObject* body0,btCollisionObject* body1,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut); 00049 00050 virtual void getAllContactManifolds(btManifoldArray& manifoldArray) 00051 { 00052 //we don't add any manifolds 00053 } 00054 00055 00056 struct CreateFunc :public btCollisionAlgorithmCreateFunc 00057 { 00058 virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, btCollisionObject* body0,btCollisionObject* body1) 00059 { 00060 void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSoftRigidCollisionAlgorithm)); 00061 if (!m_swapped) 00062 { 00063 return new(mem) btSoftRigidCollisionAlgorithm(0,ci,body0,body1,false); 00064 } else 00065 { 00066 return new(mem) btSoftRigidCollisionAlgorithm(0,ci,body0,body1,true); 00067 } 00068 } 00069 }; 00070 00071 }; 00072 00073 #endif //SOFT_RIGID_COLLISION_ALGORITHM_H 00074 00075