#ifndef _BT_FRACTURE_DYNAMICS_WORLD_H #define _BT_FRACTURE_DYNAMICS_WORLD_H #include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" #include "LinearMath/btAlignedObjectArray.h" class btFractureBody; class btCompoundShape; class btTransform; ///The btFractureDynamicsWorld class enabled basic glue and fracture of objects. ///If/once this implementation is stablized/tested we might merge it into btDiscreteDynamicsWorld and remove the class. class btFractureDynamicsWorld : public btDiscreteDynamicsWorld { btAlignedObjectArray m_fractureBodies; bool m_fracturingMode; btFractureBody* addNewBody(const btTransform& oldTransform, btScalar* masses, btCompoundShape* oldCompound); void breakDisconnectedParts(btFractureBody* fracObj); public: btFractureDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration); virtual void addRigidBody(btRigidBody* body); virtual void removeRigidBody(btRigidBody* body); void solveConstraints(btContactSolverInfo& solverInfo); ///either fracture or glue (!fracture) void setFractureMode(bool fracture) { m_fracturingMode = fracture; } bool getFractureMode() const { return m_fracturingMode; } ///normally those callbacks are called internally by the 'solveConstraints' void glueCallback(); ///normally those callbacks are called internally by the 'solveConstraints' void fractureCallback(); }; #endif //_BT_FRACTURE_DYNAMICS_WORLD_H