Bullet Collision Detection & Physics Library
btDynamicsWorld.h
Go to the documentation of this file.
1/*
2Bullet Continuous Collision Detection and Physics Library
3Copyright (c) 2003-2006 Erwin Coumans https://bulletphysics.org
4
5This software is provided 'as-is', without any express or implied warranty.
6In no event will the authors be held liable for any damages arising from the use of this software.
7Permission is granted to anyone to use this software for any purpose,
8including commercial applications, and to alter it and redistribute it freely,
9subject to the following restrictions:
10
111. 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.
122. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
133. 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
25class btDynamicsWorld;
26
28typedef void (*btInternalTickCallback)(btDynamicsWorld* world, btScalar timeStep);
29
31{
39};
40
43{
44protected:
48
50
51public:
52 btDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* broadphase, btCollisionConfiguration* collisionConfiguration)
53 : btCollisionWorld(dispatcher, broadphase, collisionConfiguration), m_internalTickCallback(0), m_internalPreTickCallback(0), m_worldUserInfo(0)
54 {
55 }
56
58 {
59 }
60
65 virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.)) = 0;
66
67 virtual void debugDrawWorld() = 0;
68
69 virtual void addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies = false)
70 {
71 (void)constraint;
72 (void)disableCollisionsBetweenLinkedBodies;
73 }
74
75 virtual void removeConstraint(btTypedConstraint* constraint) { (void)constraint; }
76
77 virtual void addAction(btActionInterface* action) = 0;
78
79 virtual void removeAction(btActionInterface* action) = 0;
80
81 //once a rigidbody is added to the dynamics world, it will get this gravity assigned
82 //existing rigidbodies in the world get gravity assigned too, during this method
83 virtual void setGravity(const btVector3& gravity) = 0;
84 virtual btVector3 getGravity() const = 0;
85
86 virtual void synchronizeMotionStates() = 0;
87
88 virtual void addRigidBody(btRigidBody* body) = 0;
89
90 virtual void addRigidBody(btRigidBody* body, int group, int mask) = 0;
91
92 virtual void removeRigidBody(btRigidBody* body) = 0;
93
94 virtual void setConstraintSolver(btConstraintSolver* solver) = 0;
95
97
98 virtual int getNumConstraints() const { return 0; }
99
101 {
102 (void)index;
103 return 0;
104 }
105
106 virtual const btTypedConstraint* getConstraint(int index) const
107 {
108 (void)index;
109 return 0;
110 }
111
113
114 virtual void clearForces() = 0;
115
117 void setInternalTickCallback(btInternalTickCallback cb, void* worldUserInfo = 0, bool isPreTick = false)
118 {
119 if (isPreTick)
120 {
122 }
123 else
124 {
126 }
127 m_worldUserInfo = worldUserInfo;
128 }
129
130 void setWorldUserInfo(void* worldUserInfo)
131 {
132 m_worldUserInfo = worldUserInfo;
133 }
134
135 void* getWorldUserInfo() const
136 {
137 return m_worldUserInfo;
138 }
139
141 {
142 return m_solverInfo;
143 }
144
146 {
147 return m_solverInfo;
148 }
149
151 virtual void addVehicle(btActionInterface* vehicle) { (void)vehicle; }
153 virtual void removeVehicle(btActionInterface* vehicle) { (void)vehicle; }
155 virtual void addCharacter(btActionInterface* character) { (void)character; }
157 virtual void removeCharacter(btActionInterface* character) { (void)character; }
158};
159
162{
165};
166
169{
172};
173
174#endif //BT_DYNAMICS_WORLD_H
btDynamicsWorldType
@ BT_SIMPLE_DYNAMICS_WORLD
@ BT_CONTINUOUS_DYNAMICS_WORLD
@ BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD
@ BT_GPU_DYNAMICS_WORLD
@ BT_SOFT_RIGID_DYNAMICS_WORLD
@ BT_SOFT_MULTIBODY_DYNAMICS_WORLD
@ BT_DISCRETE_DYNAMICS_WORLD
void(* btInternalTickCallback)(btDynamicsWorld *world, btScalar timeStep)
Type for the callback for each tick.
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
Basic interface to allow actions such as vehicles and characters to be updated inside a btDynamicsWor...
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
btCollisionConfiguration allows to configure Bullet collision detection stack allocator size,...
CollisionWorld is interface and container for the collision detection.
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
Definition: btDispatcher.h:77
The btDynamicsWorld is the interface class for several dynamics implementation, basic,...
virtual void removeRigidBody(btRigidBody *body)=0
const btContactSolverInfo & getSolverInfo() const
virtual btConstraintSolver * getConstraintSolver()=0
virtual btVector3 getGravity() const =0
virtual void removeAction(btActionInterface *action)=0
virtual void debugDrawWorld()=0
btContactSolverInfo m_solverInfo
btContactSolverInfo & getSolverInfo()
virtual void addCharacter(btActionInterface *character)
obsolete, use addAction instead.
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.
virtual void addRigidBody(btRigidBody *body, int group, int mask)=0
virtual int getNumConstraints() const
virtual void setConstraintSolver(btConstraintSolver *solver)=0
void setInternalTickCallback(btInternalTickCallback cb, void *worldUserInfo=0, bool isPreTick=false)
Set the callback for when an internal tick (simulation substep) happens, optional user info.
btInternalTickCallback m_internalTickCallback
btInternalTickCallback m_internalPreTickCallback
virtual ~btDynamicsWorld()
virtual const btTypedConstraint * getConstraint(int index) const
virtual btDynamicsWorldType getWorldType() const =0
virtual void removeConstraint(btTypedConstraint *constraint)
virtual void addRigidBody(btRigidBody *body)=0
virtual void clearForces()=0
virtual void addConstraint(btTypedConstraint *constraint, bool disableCollisionsBetweenLinkedBodies=false)
void * getWorldUserInfo() const
virtual void addVehicle(btActionInterface *vehicle)
obsolete, use addAction instead.
virtual void removeVehicle(btActionInterface *vehicle)
obsolete, use removeAction instead
void setWorldUserInfo(void *worldUserInfo)
virtual void addAction(btActionInterface *action)=0
btDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *broadphase, btCollisionConfiguration *collisionConfiguration)
virtual void removeCharacter(btActionInterface *character)
obsolete, use removeAction instead
virtual btTypedConstraint * getConstraint(int index)
virtual void synchronizeMotionStates()=0
virtual void setGravity(const btVector3 &gravity)=0
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:60
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:82
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
btContactSolverInfoDoubleData m_solverInfo
btVector3DoubleData m_gravity
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
btVector3FloatData m_gravity
btContactSolverInfoFloatData m_solverInfo