Bullet Collision Detection & Physics Library
btDiscreteDynamicsWorld.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
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 
17 #ifndef BT_DISCRETE_DYNAMICS_WORLD_H
18 #define BT_DISCRETE_DYNAMICS_WORLD_H
19 
20 #include "btDynamicsWorld.h"
21 
22 class btDispatcher;
24 class btConstraintSolver;
26 class btTypedConstraint;
27 class btActionInterface;
29 class btIDebugDraw;
31 
33 
34 
38 {
39 protected:
40 
43 
45 
47 
49 
51 
53 
54  //for variable timesteps
56  //for variable timesteps
57 
62 
64 
66 
68 
69  virtual void predictUnconstraintMotion(btScalar timeStep);
70 
71  virtual void integrateTransforms(btScalar timeStep);
72 
73  virtual void calculateSimulationIslands();
74 
75  virtual void solveConstraints(btContactSolverInfo& solverInfo);
76 
77  void updateActivationState(btScalar timeStep);
78 
79  void updateActions(btScalar timeStep);
80 
81  void startProfiling(btScalar timeStep);
82 
83  virtual void internalSingleStepSimulation( btScalar timeStep);
84 
85  void createPredictiveContacts(btScalar timeStep);
86 
87  virtual void saveKinematicState(btScalar timeStep);
88 
89  void serializeRigidBodies(btSerializer* serializer);
90 
91  void serializeDynamicsWorldInfo(btSerializer* serializer);
92 
93 public:
94 
95 
97 
99  btDiscreteDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration);
100 
101  virtual ~btDiscreteDynamicsWorld();
102 
104  virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.));
105 
106 
107  virtual void synchronizeMotionStates();
108 
110  void synchronizeSingleMotionState(btRigidBody* body);
111 
112  virtual void addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies=false);
113 
114  virtual void removeConstraint(btTypedConstraint* constraint);
115 
116  virtual void addAction(btActionInterface*);
117 
118  virtual void removeAction(btActionInterface*);
119 
121  {
122  return m_islandManager;
123  }
124 
126  {
127  return m_islandManager;
128  }
129 
131  {
132  return this;
133  }
134 
135  virtual void setGravity(const btVector3& gravity);
136 
137  virtual btVector3 getGravity () const;
138 
139  virtual void addCollisionObject(btCollisionObject* collisionObject,short int collisionFilterGroup=btBroadphaseProxy::StaticFilter,short int collisionFilterMask=btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter);
140 
141  virtual void addRigidBody(btRigidBody* body);
142 
143  virtual void addRigidBody(btRigidBody* body, short group, short mask);
144 
145  virtual void removeRigidBody(btRigidBody* body);
146 
148  virtual void removeCollisionObject(btCollisionObject* collisionObject);
149 
150 
151  void debugDrawConstraint(btTypedConstraint* constraint);
152 
153  virtual void debugDrawWorld();
154 
155  virtual void setConstraintSolver(btConstraintSolver* solver);
156 
157  virtual btConstraintSolver* getConstraintSolver();
158 
159  virtual int getNumConstraints() const;
160 
161  virtual btTypedConstraint* getConstraint(int index) ;
162 
163  virtual const btTypedConstraint* getConstraint(int index) const;
164 
165 
167  {
169  }
170 
172  virtual void clearForces();
173 
175  virtual void applyGravity();
176 
177  virtual void setNumTasks(int numTasks)
178  {
179  (void) numTasks;
180  }
181 
183  virtual void updateVehicles(btScalar timeStep)
184  {
185  updateActions(timeStep);
186  }
187 
189  virtual void addVehicle(btActionInterface* vehicle);
191  virtual void removeVehicle(btActionInterface* vehicle);
193  virtual void addCharacter(btActionInterface* character);
195  virtual void removeCharacter(btActionInterface* character);
196 
197  void setSynchronizeAllMotionStates(bool synchronizeAll)
198  {
199  m_synchronizeAllMotionStates = synchronizeAll;
200  }
202  {
203  return m_synchronizeAllMotionStates;
204  }
205 
207  {
208  m_applySpeculativeContactRestitution = enable;
209  }
210 
212  {
213  return m_applySpeculativeContactRestitution;
214  }
215 
217  virtual void serialize(btSerializer* serializer);
218 
219 };
220 
221 #endif //BT_DISCRETE_DYNAMICS_WORLD_H