Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "clVector3.h"
- #include "btBulletDynamicsCommon.h"
- template<typename T> class clList;
- template<typename T> struct clMatrix4x4; using clMat4 = clMatrix4x4<float>;
- template<typename T> struct clQuaternion; using clQuat = clQuaternion<float>;
- class clBulletPhysicsObject
- {
- public:
- clBulletPhysicsObject(btCollisionObject *pObject, btDiscreteDynamicsWorld *pWorld);
- clVec3 Position() const;
- void SetPosition(const clVec3 &pos);
- clVec3 Velocity() const;
- void SetVelocity(const clVec3 &vel);
- clMat4 ModelMatrix() const;
- clQuat Orientation() const;
- void ApplyForce(const clVec3 &force, const clVec3 &offset = clVec3::Zero());
- void SetCanSleep(const bool &canSleep = true);
- void Destroy();
- private:
- btCollisionObject *m_pObject;
- btDiscreteDynamicsWorld *m_pWorld;
- clList<clByteList> m_meshDataBlocks;
- };
- class clBulletPhysicsScene
- {
- public:
- clBulletPhysicsScene(clVec3 gravity = clVec3{ 0, 0, -1 });
- ~clBulletPhysicsScene();
- bool RayCast(const clVec3 &start, const clVec3 &end, clVec3 *pHitLocation = nullptr);
- void Update(const float &timeStep = 1.f / 60.f, const int &maxSubSteps = 10, const float &fixedTimeStep = 0.0005);
- clBulletPhysicsObject* AddSphere(const clVec3 &position, const float &radius, const float &mass);
- clBulletPhysicsObject* AddBox(const clVec3 &position, const clVec3 &dimensions, const float &mass);
- clBulletPhysicsObject* AddMesh(const clVec3 &position, const clList<clVec3> &verts, const float &mass);
- private:
- btDiscreteDynamicsWorld *m_pWorld;
- btCollisionDispatcher *m_pDispatcher;
- btDbvtBroadphase m_overlappingPairsCache;
- btSequentialImpulseConstraintSolver m_solver;
- btDefaultCollisionConfiguration *m_pCollisionConfiguration;
- };
Add Comment
Please, Sign In to add comment