Bullet Collision Detection & Physics Library
btDynamicsWorld.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4 
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10 
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15 
16 #ifndef BT_DYNAMICS_WORLD_H
17 #define BT_DYNAMICS_WORLD_H
18 
21 
22 class btTypedConstraint;
23 class btActionInterface;
24 class btConstraintSolver;
25 class btDynamicsWorld;
26 
27 
29 typedef void (*btInternalTickCallback)(btDynamicsWorld *world, btScalar timeStep);
30 
32 {
39 };
40 
43 {
44 
45 protected:
49 
51 
52 public:
53 
54 
55  btDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* broadphase,btCollisionConfiguration* collisionConfiguration)
56  :btCollisionWorld(dispatcher,broadphase,collisionConfiguration), m_internalTickCallback(0),m_internalPreTickCallback(0), m_worldUserInfo(0)
57  {
58  }
59 
60  virtual ~btDynamicsWorld()
61  {
62  }
63 
68  virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))=0;
69 
70  virtual void debugDrawWorld() = 0;
71 
72  virtual void addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies=false)
73  {
74  (void)constraint; (void)disableCollisionsBetweenLinkedBodies;
75  }
76 
77  virtual void removeConstraint(btTypedConstraint* constraint) {(void)constraint;}
78 
79  virtual void addAction(btActionInterface* action) = 0;
80 
81  virtual void removeAction(btActionInterface* action) = 0;
82 
83  //once a rigidbody is added to the dynamics world, it will get this gravity assigned
84  //existing rigidbodies in the world get gravity assigned too, during this method
85  virtual void setGravity(const btVector3& gravity) = 0;
86  virtual btVector3 getGravity () const = 0;
87 
88  virtual void synchronizeMotionStates() = 0;
89 
90  virtual void addRigidBody(btRigidBody* body) = 0;
91 
92  virtual void addRigidBody(btRigidBody* body, int group, int mask) = 0;
93 
94  virtual void removeRigidBody(btRigidBody* body) = 0;
95 
96  virtual void setConstraintSolver(btConstraintSolver* solver) = 0;
97 
99 
100  virtual int getNumConstraints() const { return 0; }
101 
102  virtual btTypedConstraint* getConstraint(int index) { (void)index; return 0; }
103 
104  virtual const btTypedConstraint* getConstraint(int index) const { (void)index; return 0; }
105 
106  virtual btDynamicsWorldType getWorldType() const=0;
107 
108  virtual void clearForces() = 0;
109 
111  void setInternalTickCallback(btInternalTickCallback cb, void* worldUserInfo=0,bool isPreTick=false)
112  {
113  if (isPreTick)
114  {
116  } else
117  {
119  }
120  m_worldUserInfo = worldUserInfo;
121  }
122 
123  void setWorldUserInfo(void* worldUserInfo)
124  {
125  m_worldUserInfo = worldUserInfo;
126  }
127 
128  void* getWorldUserInfo() const
129  {
130  return m_worldUserInfo;
131  }
132 
134  {
135  return m_solverInfo;
136  }
137 
139  {
140  return m_solverInfo;
141  }
142 
143 
145  virtual void addVehicle(btActionInterface* vehicle) {(void)vehicle;}
147  virtual void removeVehicle(btActionInterface* vehicle) {(void)vehicle;}
149  virtual void addCharacter(btActionInterface* character) {(void)character;}
151  virtual void removeCharacter(btActionInterface* character) {(void)character;}
152 
153 
154 };
155 
158 {
161 };
162 
165 {
168 };
169 
170 
171 #endif //BT_DYNAMICS_WORLD_H
172 
173 
btTypedConstraint
TypedConstraint is the baseclass for Bullet constraints and vehicles.
Definition: btTypedConstraint.h:78
btDynamicsWorld::synchronizeMotionStates
virtual void synchronizeMotionStates()=0
btRigidBody
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:62
btDynamicsWorld::m_worldUserInfo
void * m_worldUserInfo
Definition: btDynamicsWorld.h:48
btDynamicsWorld::m_internalTickCallback
btInternalTickCallback m_internalTickCallback
Definition: btDynamicsWorld.h:46
btContactSolverInfo
Definition: btContactSolverInfo.h:69
btContactSolverInfoFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btContactSolverInfo.h:134
btDynamicsWorld::m_internalPreTickCallback
btInternalTickCallback m_internalPreTickCallback
Definition: btDynamicsWorld.h:47
btDynamicsWorldDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btDynamicsWorld.h:157
BT_GPU_DYNAMICS_WORLD
@ BT_GPU_DYNAMICS_WORLD
Definition: btDynamicsWorld.h:37
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:292
btDispatcher
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
Definition: btDispatcher.h:75
BT_DISCRETE_DYNAMICS_WORLD
@ BT_DISCRETE_DYNAMICS_WORLD
Definition: btDynamicsWorld.h:34
btDynamicsWorld::getConstraint
virtual btTypedConstraint * getConstraint(int index)
Definition: btDynamicsWorld.h:102
btDynamicsWorld::removeCharacter
virtual void removeCharacter(btActionInterface *character)
obsolete, use removeAction instead
Definition: btDynamicsWorld.h:151
btDynamicsWorld::getSolverInfo
btContactSolverInfo & getSolverInfo()
Definition: btDynamicsWorld.h:133
btDynamicsWorldFloatData::m_solverInfo
btContactSolverInfoFloatData m_solverInfo
Definition: btDynamicsWorld.h:166
btDynamicsWorld::getGravity
virtual btVector3 getGravity() const =0
btDynamicsWorld
The btDynamicsWorld is the interface class for several dynamics implementation, basic,...
Definition: btDynamicsWorld.h:42
btDynamicsWorldFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btDynamicsWorld.h:164
btDynamicsWorld::getConstraintSolver
virtual btConstraintSolver * getConstraintSolver()=0
btVector3FloatData
Definition: btVector3.h:1312
btCollisionWorld.h
btDynamicsWorld::setWorldUserInfo
void setWorldUserInfo(void *worldUserInfo)
Definition: btDynamicsWorld.h:123
btDynamicsWorld::removeRigidBody
virtual void removeRigidBody(btRigidBody *body)=0
BT_SOFT_RIGID_DYNAMICS_WORLD
@ BT_SOFT_RIGID_DYNAMICS_WORLD
Definition: btDynamicsWorld.h:36
btVector3DoubleData
Definition: btVector3.h:1317
btDynamicsWorld::addConstraint
virtual void addConstraint(btTypedConstraint *constraint, bool disableCollisionsBetweenLinkedBodies=false)
Definition: btDynamicsWorld.h:72
btDynamicsWorld::clearForces
virtual void clearForces()=0
btDynamicsWorld::addCharacter
virtual void addCharacter(btActionInterface *character)
obsolete, use addAction instead.
Definition: btDynamicsWorld.h:149
btDynamicsWorld::getNumConstraints
virtual int getNumConstraints() const
Definition: btDynamicsWorld.h:100
btDynamicsWorldType
btDynamicsWorldType
Definition: btDynamicsWorld.h:31
btDynamicsWorld::debugDrawWorld
virtual void debugDrawWorld()=0
btDynamicsWorld::setInternalTickCallback
void setInternalTickCallback(btInternalTickCallback cb, void *worldUserInfo=0, bool isPreTick=false)
Set the callback for when an internal tick (simulation substep) happens, optional user info.
Definition: btDynamicsWorld.h:111
btDynamicsWorld::getWorldUserInfo
void * getWorldUserInfo() const
Definition: btDynamicsWorld.h:128
btDynamicsWorld::addRigidBody
virtual void addRigidBody(btRigidBody *body)=0
btDynamicsWorld::getSolverInfo
const btContactSolverInfo & getSolverInfo() const
Definition: btDynamicsWorld.h:138
btActionInterface
Basic interface to allow actions such as vehicles and characters to be updated inside a btDynamicsWor...
Definition: btActionInterface.h:26
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
btDynamicsWorld::setGravity
virtual void setGravity(const btVector3 &gravity)=0
btDynamicsWorld::~btDynamicsWorld
virtual ~btDynamicsWorld()
Definition: btDynamicsWorld.h:60
BT_CONTINUOUS_DYNAMICS_WORLD
@ BT_CONTINUOUS_DYNAMICS_WORLD
Definition: btDynamicsWorld.h:35
btDynamicsWorld::m_solverInfo
btContactSolverInfo m_solverInfo
Definition: btDynamicsWorld.h:50
btDynamicsWorld::btDynamicsWorld
btDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *broadphase, btCollisionConfiguration *collisionConfiguration)
Definition: btDynamicsWorld.h:55
btDynamicsWorldDoubleData::m_solverInfo
btContactSolverInfoDoubleData m_solverInfo
Definition: btDynamicsWorld.h:159
btContactSolverInfoDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btContactSolverInfo.h:106
btDynamicsWorld::removeVehicle
virtual void removeVehicle(btActionInterface *vehicle)
obsolete, use removeAction instead
Definition: btDynamicsWorld.h:147
btDynamicsWorld::removeAction
virtual void removeAction(btActionInterface *action)=0
btDynamicsWorldDoubleData::m_gravity
btVector3DoubleData m_gravity
Definition: btDynamicsWorld.h:160
btContactSolverInfo.h
btBroadphaseInterface
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
Definition: btBroadphaseInterface.h:55
btDynamicsWorld::removeConstraint
virtual void removeConstraint(btTypedConstraint *constraint)
Definition: btDynamicsWorld.h:77
btDynamicsWorld::setConstraintSolver
virtual void setConstraintSolver(btConstraintSolver *solver)=0
BT_SIMPLE_DYNAMICS_WORLD
@ BT_SIMPLE_DYNAMICS_WORLD
Definition: btDynamicsWorld.h:33
btInternalTickCallback
void(* btInternalTickCallback)(btDynamicsWorld *world, btScalar timeStep)
Type for the callback for each tick.
Definition: btDynamicsWorld.h:29
btDynamicsWorld::stepSimulation
virtual int stepSimulation(btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))=0
stepSimulation proceeds the simulation over 'timeStep', units in preferably in seconds.
btDynamicsWorld::addVehicle
virtual void addVehicle(btActionInterface *vehicle)
obsolete, use addAction instead.
Definition: btDynamicsWorld.h:145
btDynamicsWorld::getWorldType
virtual btDynamicsWorldType getWorldType() const =0
btCollisionWorld
CollisionWorld is interface and container for the collision detection.
Definition: btCollisionWorld.h:88
btDynamicsWorld::addAction
virtual void addAction(btActionInterface *action)=0
btCollisionConfiguration
btCollisionConfiguration allows to configure Bullet collision detection stack allocator size,...
Definition: btCollisionConfiguration.h:26
BT_SOFT_MULTIBODY_DYNAMICS_WORLD
@ BT_SOFT_MULTIBODY_DYNAMICS_WORLD
Definition: btDynamicsWorld.h:38
btDynamicsWorldFloatData::m_gravity
btVector3FloatData m_gravity
Definition: btDynamicsWorld.h:167
btDynamicsWorld::getConstraint
virtual const btTypedConstraint * getConstraint(int index) const
Definition: btDynamicsWorld.h:104
btConstraintSolver
Definition: btConstraintSolver.h:40