Blender V2.61 - r43446
|
00001 /* 00002 Bullet Continuous Collision Detection and Physics Library 00003 Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org 00004 00005 This software is provided 'as-is', without any express or implied warranty. 00006 In no event will the authors be held liable for any damages arising from the use of this software. 00007 Permission is granted to anyone to use this software for any purpose, 00008 including commercial applications, and to alter it and redistribute it freely, 00009 subject to the following restrictions: 00010 00011 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. 00012 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 00013 3. This notice may not be removed or altered from any source distribution. 00014 */ 00015 00016 00017 #ifndef BT_DISCRETE_DYNAMICS_WORLD_H 00018 #define BT_DISCRETE_DYNAMICS_WORLD_H 00019 00020 #include "btDynamicsWorld.h" 00021 00022 class btDispatcher; 00023 class btOverlappingPairCache; 00024 class btConstraintSolver; 00025 class btSimulationIslandManager; 00026 class btTypedConstraint; 00027 class btActionInterface; 00028 00029 class btIDebugDraw; 00030 #include "LinearMath/btAlignedObjectArray.h" 00031 00032 00035 class btDiscreteDynamicsWorld : public btDynamicsWorld 00036 { 00037 protected: 00038 00039 btConstraintSolver* m_constraintSolver; 00040 00041 btSimulationIslandManager* m_islandManager; 00042 00043 btAlignedObjectArray<btTypedConstraint*> m_constraints; 00044 00045 btAlignedObjectArray<btRigidBody*> m_nonStaticRigidBodies; 00046 00047 btVector3 m_gravity; 00048 00049 //for variable timesteps 00050 btScalar m_localTime; 00051 //for variable timesteps 00052 00053 bool m_ownsIslandManager; 00054 bool m_ownsConstraintSolver; 00055 bool m_synchronizeAllMotionStates; 00056 00057 btAlignedObjectArray<btActionInterface*> m_actions; 00058 00059 int m_profileTimings; 00060 00061 virtual void predictUnconstraintMotion(btScalar timeStep); 00062 00063 virtual void integrateTransforms(btScalar timeStep); 00064 00065 virtual void calculateSimulationIslands(); 00066 00067 virtual void solveConstraints(btContactSolverInfo& solverInfo); 00068 00069 void updateActivationState(btScalar timeStep); 00070 00071 void updateActions(btScalar timeStep); 00072 00073 void startProfiling(btScalar timeStep); 00074 00075 virtual void internalSingleStepSimulation( btScalar timeStep); 00076 00077 00078 virtual void saveKinematicState(btScalar timeStep); 00079 00080 void serializeRigidBodies(btSerializer* serializer); 00081 00082 public: 00083 00084 00086 btDiscreteDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration); 00087 00088 virtual ~btDiscreteDynamicsWorld(); 00089 00091 virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.)); 00092 00093 00094 virtual void synchronizeMotionStates(); 00095 00097 void synchronizeSingleMotionState(btRigidBody* body); 00098 00099 virtual void addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies=false); 00100 00101 virtual void removeConstraint(btTypedConstraint* constraint); 00102 00103 virtual void addAction(btActionInterface*); 00104 00105 virtual void removeAction(btActionInterface*); 00106 00107 btSimulationIslandManager* getSimulationIslandManager() 00108 { 00109 return m_islandManager; 00110 } 00111 00112 const btSimulationIslandManager* getSimulationIslandManager() const 00113 { 00114 return m_islandManager; 00115 } 00116 00117 btCollisionWorld* getCollisionWorld() 00118 { 00119 return this; 00120 } 00121 00122 virtual void setGravity(const btVector3& gravity); 00123 00124 virtual btVector3 getGravity () const; 00125 00126 virtual void addCollisionObject(btCollisionObject* collisionObject,short int collisionFilterGroup=btBroadphaseProxy::StaticFilter,short int collisionFilterMask=btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter); 00127 00128 virtual void addRigidBody(btRigidBody* body); 00129 00130 virtual void addRigidBody(btRigidBody* body, short group, short mask); 00131 00132 virtual void removeRigidBody(btRigidBody* body); 00133 00135 virtual void removeCollisionObject(btCollisionObject* collisionObject); 00136 00137 00138 void debugDrawConstraint(btTypedConstraint* constraint); 00139 00140 virtual void debugDrawWorld(); 00141 00142 virtual void setConstraintSolver(btConstraintSolver* solver); 00143 00144 virtual btConstraintSolver* getConstraintSolver(); 00145 00146 virtual int getNumConstraints() const; 00147 00148 virtual btTypedConstraint* getConstraint(int index) ; 00149 00150 virtual const btTypedConstraint* getConstraint(int index) const; 00151 00152 00153 virtual btDynamicsWorldType getWorldType() const 00154 { 00155 return BT_DISCRETE_DYNAMICS_WORLD; 00156 } 00157 00159 virtual void clearForces(); 00160 00162 virtual void applyGravity(); 00163 00164 virtual void setNumTasks(int numTasks) 00165 { 00166 (void) numTasks; 00167 } 00168 00170 virtual void updateVehicles(btScalar timeStep) 00171 { 00172 updateActions(timeStep); 00173 } 00174 00176 virtual void addVehicle(btActionInterface* vehicle); 00178 virtual void removeVehicle(btActionInterface* vehicle); 00180 virtual void addCharacter(btActionInterface* character); 00182 virtual void removeCharacter(btActionInterface* character); 00183 00184 void setSynchronizeAllMotionStates(bool synchronizeAll) 00185 { 00186 m_synchronizeAllMotionStates = synchronizeAll; 00187 } 00188 bool getSynchronizeAllMotionStates() const 00189 { 00190 return m_synchronizeAllMotionStates; 00191 } 00192 00194 virtual void serialize(btSerializer* serializer); 00195 00196 }; 00197 00198 #endif //BT_DISCRETE_DYNAMICS_WORLD_H