My Project
ParaPhysicsWorld.h
1 #pragma once
2 
3 #include "btBulletDynamicsCommon.h"
4 #include "IParaPhysics.h"
5 #include "PhysicsDebugDraw.h"
6 
7 #include <set>
8 #include <list>
9 
10 #define CONVERT_BTVECTOR3(x) *((btVector3*)&(x))
11 
12 #define CONVERT_PARAVECTOR3(x) *((PARAVECTOR3*)&(x))
13 
14 
15 
21 namespace ParaEngine
22 {
25  {
28 
29  virtual void* GetUserData() {return m_pUserData;};
30  virtual void SetUserData(void* pData) {m_pUserData = pData;};
31 
32  virtual void* get() {return m_pShape;};
33  virtual void Release();
34 
36  btCollisionShape* m_pShape;
37  btTriangleIndexVertexArray* m_indexVertexArrays;
38  int32* m_triangleIndices;
39  btScalar* m_vertices;
40 
42  void* m_pUserData;
43  };
44 
47  {
48  BulletPhysicsActor(btRigidBody* pActor);
50  virtual void* GetUserData() {return m_pUserData;};
51  virtual void SetUserData(void* pData) {m_pUserData = pData;};
52  virtual void* get() {return m_pActor;};
53  virtual void Release();
54 
56  btRigidBody* m_pActor;
58  void* m_pUserData;
59  };
60 
61  using namespace std;
62 
64  {
65  public:
66  typedef std::set<BulletPhysicsActor*> BulletPhysicsActor_Map_Type;
67  typedef std::set<BulletPhysicsShape*> BulletPhysicsShape_Array_Type;
69  virtual ~CParaPhysicsWorld();
70 
72  virtual bool InitPhysics();
73 
77  virtual bool StepSimulation(float fDeltaTime);
78 
81  virtual bool ExitPhysics();
82 
85  virtual void Release();
86 
90  virtual IParaPhysicsShape* CreateTriangleMeshShap(const ParaPhysicsTriangleMeshDesc& meshDesc);
91 
93  virtual void ReleaseShape(IParaPhysicsShape* pShape);
94 
96  virtual IParaPhysicsActor* CreateActor(const ParaPhysicsActorDesc& meshDesc);
97 
99  virtual void ReleaseActor(IParaPhysicsActor* pActor);
100 
101 
103  virtual IParaPhysicsActor* RaycastClosestShape(const PARAVECTOR3& vOrigin, const PARAVECTOR3& vDirection, DWORD dwType, RayCastHitResult& hit, short dwGroupMask, float fSensorRange);
104 
106  virtual void SetDebugDrawer(IParaDebugDraw* debugDrawer);
107 
109  virtual IParaDebugDraw* GetDebugDrawer();
110 
112  virtual void DebugDrawObject(const PARAVECTOR3& vOrigin, const PARAMATRIX3x3& vRotation, const IParaPhysicsShape* pShape, const PARAVECTOR3& color);
113 
115  virtual void DebugDrawWorld();
116 
118  virtual void SetDebugDrawMode(int debugMode);
119 
121  virtual int GetDebugDrawMode();
122  public:
124  virtual btDynamicsWorld* GetScene()
125  {
126  return m_dynamicsWorld;
127  }
128 
129  protected:
130  btBroadphaseInterface* m_broadphase;
131  btCollisionDispatcher* m_dispatcher;
132  btConstraintSolver* m_solver;
133  btDefaultCollisionConfiguration* m_collisionConfiguration;
134 
135  btDiscreteDynamicsWorld* m_dynamicsWorld;
136  btCollisionWorld* m_collisionWorld;
137 
139  BulletPhysicsShape_Array_Type m_collisionShapes;
140 
141  // keep all actors
142  BulletPhysicsActor_Map_Type m_actors;
143 
144  CPhysicsDebugDraw m_physics_debug_draw;
145  bool m_bInvertFaceWinding;
146  };
147 }
BulletPhysicsShape_Array_Type m_collisionShapes
keep the collision shapes, for deletion/cleanup
Definition: ParaPhysicsWorld.h:139
Definition: PEtypes.h:327
different physics engine has different winding order.
Definition: EventBinding.h:32
virtual btDynamicsWorld * GetScene()
get a pointer to physics scene object
Definition: ParaPhysicsWorld.h:124
Definition: ParaPhysicsWorld.h:63
Create descriptor for triangle mesh shape.
Definition: IParaPhysics.h:30
it is represent a shape that can be used to create various actors in the scene.
Definition: IParaPhysics.h:42
virtual void * GetUserData()
get user data associated with the shape
Definition: ParaPhysicsWorld.h:50
virtual void * GetUserData()
get user data associated with the shape
Definition: ParaPhysicsWorld.h:29
void * m_pUserData
keep some user data here
Definition: ParaPhysicsWorld.h:42
IParaDebugDraw draw interface draws line based primitives for debugging purposes. ...
Definition: IParaDebugDraw.h:10
Definition: PhysicsDebugDraw.h:11
Definition: IParaPhysics.h:91
ParaPhysics core interface.
Definition: IParaPhysics.h:100
it is represent a shape that can be used to create various actors in the scene.
Definition: IParaPhysics.h:79
it is represent a shape that can be used to create various actors in the scene.
Definition: ParaPhysicsWorld.h:46
void * m_pUserData
keep some user data here
Definition: ParaPhysicsWorld.h:58
Definition: PEtypes.h:298
btRigidBody * m_pActor
pointer to the low level physics engine actor(rigid body).
Definition: ParaPhysicsWorld.h:56
it is represent a shape that can be used to create various actors in the scene.
Definition: ParaPhysicsWorld.h:24
btCollisionShape * m_pShape
pointer to the low level physics engine shape object.
Definition: ParaPhysicsWorld.h:36
Create descriptor for a physics actor.
Definition: IParaPhysics.h:56