2 #ifndef BT_FRACTURE_BODY
\r
3 #define BT_FRACTURE_BODY
\r
5 class btCollisionShape;
\r
6 class btDynamicsWorld;
\r
7 class btCollisionWorld;
\r
8 class btCompoundShape;
\r
9 class btManifoldPoint;
\r
11 #include "LinearMath/btAlignedObjectArray.h"
\r
12 #include "BulletDynamics/Dynamics/btRigidBody.h"
\r
14 #define CUSTOM_FRACTURE_TYPE (btRigidBody::CO_USER_TYPE+1)
\r
20 btCollisionShape* m_childShape0;
\r
21 btCollisionShape* m_childShape1;
\r
24 btScalar m_strength;
\r
27 class btFractureBody : public btRigidBody
\r
32 btDynamicsWorld* m_world;
\r
33 btAlignedObjectArray<btScalar> m_masses;
\r
34 btAlignedObjectArray<btConnection> m_connections;
\r
38 btFractureBody( const btRigidBodyConstructionInfo& constructionInfo, btDynamicsWorld* world)
\r
39 :btRigidBody(constructionInfo),
\r
42 m_masses.push_back(constructionInfo.m_mass);
\r
43 m_internalType=CUSTOM_FRACTURE_TYPE+CO_RIGID_BODY;
\r
48 ///btRigidBody constructor for backwards compatibility.
\r
49 ///To specify friction (etc) during rigid body construction, please use the other constructor (using btRigidBodyConstructionInfo)
\r
50 btFractureBody( btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia, btScalar* masses, int numMasses, btDynamicsWorld* world)
\r
51 :btRigidBody(mass,motionState,collisionShape,localInertia),
\r
55 for (int i=0;i<numMasses;i++)
\r
56 m_masses.push_back(masses[i]);
\r
58 m_internalType=CUSTOM_FRACTURE_TYPE+CO_RIGID_BODY;
\r
63 void recomputeConnectivity(btCollisionWorld* world);
\r
66 static btCompoundShape* shiftTransform(btCompoundShape* boxCompound,btScalar* masses,btTransform& shift, btVector3& principalInertia);
\r
68 static btCompoundShape* shiftTransformDistributeMass(btCompoundShape* boxCompound,btScalar mass,btTransform& shift);
\r
70 static bool collisionCallback(btManifoldPoint& cp, const btCollisionObject* colObj0,int partId0,int index0,const btCollisionObject* colObj1,int partId1,int index1);
\r
75 void fractureCallback(btDynamicsWorld* world, btScalar timeStep);
\r
76 void glueCallback(btDynamicsWorld* world, btScalar timeStep);
\r
78 #endif //BT_FRACTURE_BODY
\r