Terminus
bulletworld.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <unordered_map>
4 
5 #include <bullet/btBulletDynamicsCommon.h>
6 
7 namespace terminus
8 {
9 
10 class AbstractPhysicsObject;
11 
18 {
19 protected:
28  static void btStaticTickCallback(btDynamicsWorld * world, btScalar timeStep);
29 
30 public:
31  BulletWorld();
32  ~BulletWorld();
33 
34  BulletWorld(const BulletWorld &other) = delete;
35  BulletWorld &operator=(const BulletWorld &other) = delete;
36 
42  void addRigidBody(btRigidBody* rigidBody);
43 
51  void addRigidBody(btRigidBody* rigidBody, short group, short mask);
52 
56  void removeRigidBody(btRigidBody* rigidBody);
57 
61  int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.)/btScalar(60.));
62 
70  void addCollisionMapping(const btCollisionObject * collisionObject, AbstractPhysicsObject * graphicsObject);
71 
76  void removeCollisionMapping(const btCollisionObject * collisionObject);
77  AbstractPhysicsObject * getPhysicsObjectForCollisionObject(const btCollisionObject * collisionObject) const;
78 
85  {
90  };
91 
92 protected:
99  void btTickCallback(btDynamicsWorld * world, btScalar timeStep);
100 
101  btBroadphaseInterface * m_bulletBroadphase;
102  btDefaultCollisionConfiguration * m_bulletCollisionConfig;
103  btCollisionDispatcher * m_bulletDispatcher;
104  btSequentialImpulseConstraintSolver * m_bulletSolver;
105  btDiscreteDynamicsWorld * m_bulletWorld;
106 
113  std::unordered_map<const btCollisionObject*, AbstractPhysicsObject*> m_collisionMap;
114 };
115 
116 } // namespace terminus
btDiscreteDynamicsWorld * m_bulletWorld
Definition: bulletworld.h:105
BulletWorld & operator=(const BulletWorld &other)=delete
Definition: bulletworld.h:87
static void btStaticTickCallback(btDynamicsWorld *world, btScalar timeStep)
Static wrapper for BulletWorld::btTickCallback()
Definition: bulletworld.cpp:8
~BulletWorld()
Definition: bulletworld.cpp:34
The AbstractPhysicsObject class represents a graphical scene element with a physics-based aspect...
Definition: abstractphysicsobject.h:21
AbstractPhysicsObject * getPhysicsObjectForCollisionObject(const btCollisionObject *collisionObject) const
Definition: bulletworld.cpp:75
void removeCollisionMapping(const btCollisionObject *collisionObject)
Remove mapping from m_collisionMap.
Definition: bulletworld.cpp:70
void addRigidBody(btRigidBody *rigidBody)
Wraps btDiscreteDynamicsWorld::addRigidBody()
Definition: bulletworld.cpp:43
BulletWorld()
Definition: bulletworld.cpp:15
void btTickCallback(btDynamicsWorld *world, btScalar timeStep)
A Callback that is called on every simulation tick.
Definition: bulletworld.cpp:87
CollisionTypes
Bitfield values that describe the groups of objects that can collide with each other.
Definition: bulletworld.h:84
std::unordered_map< const btCollisionObject *, AbstractPhysicsObject * > m_collisionMap
This map is used to get the AbstractPhysicsObject belonging to a btCollisionObject.
Definition: bulletworld.h:113
btSequentialImpulseConstraintSolver * m_bulletSolver
Definition: bulletworld.h:104
btDefaultCollisionConfiguration * m_bulletCollisionConfig
Definition: bulletworld.h:102
btBroadphaseInterface * m_bulletBroadphase
Definition: bulletworld.h:101
Definition: eventhandler.cpp:18
int stepSimulation(btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))
Wraps btDiscreteDynamicsWorld::stepSimulation()
Definition: bulletworld.cpp:59
A Wrapper class for a btDiscreteDynamicsWorld.
Definition: bulletworld.h:17
btCollisionDispatcher * m_bulletDispatcher
Definition: bulletworld.h:103
void addCollisionMapping(const btCollisionObject *collisionObject, AbstractPhysicsObject *graphicsObject)
Add mapping from btCollisionObject to AbstractPhysicsObject to m_collisionMap.
Definition: bulletworld.cpp:64
void removeRigidBody(btRigidBody *rigidBody)
Wraps btDiscreteDynamicsWorld::removeRigidBody()
Definition: bulletworld.cpp:54