Tizen 2.1 base
[platform/upstream/libbullet.git] / Demos / FractureDemo / btFractureBody.h
1 \r
2 #ifndef BT_FRACTURE_BODY\r
3 #define BT_FRACTURE_BODY\r
4 \r
5 class btCollisionShape;\r
6 class btDynamicsWorld;\r
7 class btCollisionWorld;\r
8 class btCompoundShape;\r
9 class btManifoldPoint;\r
10 \r
11 #include "LinearMath/btAlignedObjectArray.h"\r
12 #include "BulletDynamics/Dynamics/btRigidBody.h"\r
13 \r
14 #define CUSTOM_FRACTURE_TYPE (btRigidBody::CO_USER_TYPE+1)\r
15 \r
16 \r
17 struct btConnection\r
18 {\r
19         \r
20         btCollisionShape*       m_childShape0;\r
21         btCollisionShape*       m_childShape1;\r
22         int     m_childIndex0;\r
23         int     m_childIndex1;\r
24         btScalar        m_strength;\r
25 };\r
26 \r
27 class btFractureBody : public btRigidBody\r
28 {\r
29         //connections\r
30 public:\r
31 \r
32         btDynamicsWorld*        m_world;\r
33         btAlignedObjectArray<btScalar>  m_masses;\r
34         btAlignedObjectArray<btConnection>      m_connections;\r
35 \r
36 \r
37 \r
38         btFractureBody( const btRigidBodyConstructionInfo& constructionInfo, btDynamicsWorld*   world)\r
39                 :btRigidBody(constructionInfo),\r
40                 m_world(world)\r
41         {\r
42                 m_masses.push_back(constructionInfo.m_mass);\r
43                 m_internalType=CUSTOM_FRACTURE_TYPE+CO_RIGID_BODY;\r
44         }\r
45 \r
46 \r
47 \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
52                 m_world(world)\r
53         {\r
54 \r
55                 for (int i=0;i<numMasses;i++)\r
56                         m_masses.push_back(masses[i]);\r
57 \r
58                 m_internalType=CUSTOM_FRACTURE_TYPE+CO_RIGID_BODY;\r
59         }\r
60 \r
61         \r
62 \r
63         void    recomputeConnectivity(btCollisionWorld* world);\r
64         \r
65 \r
66         static btCompoundShape* shiftTransform(btCompoundShape* boxCompound,btScalar* masses,btTransform& shift, btVector3& principalInertia);\r
67         \r
68         static btCompoundShape* shiftTransformDistributeMass(btCompoundShape* boxCompound,btScalar mass,btTransform& shift);\r
69         \r
70         static bool collisionCallback(btManifoldPoint& cp,      const btCollisionObject* colObj0,int partId0,int index0,const btCollisionObject* colObj1,int partId1,int index1);\r
71 \r
72 };\r
73 \r
74 \r
75 void fractureCallback(btDynamicsWorld* world, btScalar timeStep);\r
76 void glueCallback(btDynamicsWorld* world, btScalar timeStep);\r
77 \r
78 #endif //BT_FRACTURE_BODY\r