1 #ifndef PHYSICS_DIRECT_H
2 #define PHYSICS_DIRECT_H
3 
4 //#include "SharedMemoryCommands.h"
5 
6 #include "PhysicsClient.h"
7 #include "LinearMath/btVector3.h"
8 
9 ///PhysicsDirect executes the commands directly, without transporting them or having a separate server executing commands
10 class PhysicsDirect : public PhysicsClient
11 {
12 protected:
13 	struct PhysicsDirectInternalData* m_data;
14 
15 	bool processDebugLines(const struct SharedMemoryCommand& orgCommand);
16 
17 	bool processCamera(const struct SharedMemoryCommand& orgCommand);
18 
19 	bool processContactPointData(const struct SharedMemoryCommand& orgCommand);
20 
21 	bool processOverlappingObjects(const struct SharedMemoryCommand& orgCommand);
22 
23 	bool processVisualShapeData(const struct SharedMemoryCommand& orgCommand);
24 
25 	bool processMeshData(const struct SharedMemoryCommand& orgCommand);
26 
27 	void processBodyJointInfo(int bodyUniqueId, const struct SharedMemoryStatus& serverCmd);
28 
29 	void processAddUserData(const struct SharedMemoryStatus& serverCmd);
30 
31 	bool processRequestBodyInfo(const struct SharedMemoryCommand& command, SharedMemoryStatus& status);
32 
33 	bool processCustomCommand(const struct SharedMemoryCommand& orgCommand);
34 
35 	void postProcessStatus(const struct SharedMemoryStatus& serverCmd);
36 
37 	void resetData();
38 
39 	void removeCachedBody(int bodyUniqueId);
40 
41 	void clearCachedBodies();
42 
43 public:
44 	PhysicsDirect(class PhysicsCommandProcessorInterface* physSdk, bool passSdkOwnership);
45 
46 	virtual ~PhysicsDirect();
47 
48 	// return true if connection succesfull, can also check 'isConnected'
49 	//it is OK to pass a null pointer for the gui helper
50 	virtual bool connect();
51 
52 	////todo: rename to 'disconnect'
53 	virtual void disconnectSharedMemory();
54 
55 	virtual bool isConnected() const;
56 
57 	// return non-null if there is a status, nullptr otherwise
58 	virtual const SharedMemoryStatus* processServerStatus();
59 
60 	virtual SharedMemoryCommand* getAvailableSharedMemoryCommand();
61 
62 	virtual bool canSubmitCommand() const;
63 
64 	virtual bool submitClientCommand(const struct SharedMemoryCommand& command);
65 
66 	virtual int getNumBodies() const;
67 
68 	virtual int getBodyUniqueId(int serialIndex) const;
69 
70 	virtual bool getBodyInfo(int bodyUniqueId, struct b3BodyInfo& info) const;
71 
72 	virtual int getNumJoints(int bodyUniqueId) const;
73 
74 	virtual int getNumDofs(int bodyUniqueId) const;
75 
76 	virtual bool getJointInfo(int bodyIndex, int jointIndex, struct b3JointInfo& info) const;
77 
78 	virtual int getNumUserConstraints() const;
79 
80 	virtual int getUserConstraintInfo(int constraintUniqueId, struct b3UserConstraint& info) const;
81 
82 	virtual int getUserConstraintId(int serialIndex) const;
83 
84 	///todo: move this out of the
85 	virtual void setSharedMemoryKey(int key);
86 
87 	void uploadBulletFileToSharedMemory(const char* data, int len);
88 
89 	virtual void uploadRaysToSharedMemory(struct SharedMemoryCommand& command, const double* rayFromWorldArray, const double* rayToWorldArray, int numRays);
90 
91 	virtual int getNumDebugLines() const;
92 
93 	virtual const float* getDebugLinesFrom() const;
94 	virtual const float* getDebugLinesTo() const;
95 	virtual const float* getDebugLinesColor() const;
96 
97 	virtual void getCachedCameraImage(b3CameraImageData* cameraData);
98 
99 	virtual void getCachedContactPointInformation(struct b3ContactInformation* contactPointData);
100 
101 	virtual void getCachedOverlappingObjects(struct b3AABBOverlapData* overlappingObjects);
102 
103 	virtual void getCachedVisualShapeInformation(struct b3VisualShapeInformation* visualShapesInfo);
104 
105 	virtual void getCachedCollisionShapeInformation(struct b3CollisionShapeInformation* collisionShapesInfo);
106 
107 	virtual void getCachedMeshData(struct b3MeshData* meshData);
108 
109 	virtual void getCachedVREvents(struct b3VREventsData* vrEventsData);
110 
111 	virtual void getCachedKeyboardEvents(struct b3KeyboardEventsData* keyboardEventsData);
112 
113 	virtual void getCachedMouseEvents(struct b3MouseEventsData* mouseEventsData);
114 
115 	virtual void getCachedRaycastHits(struct b3RaycastInformation* raycastHits);
116 
117 	virtual void getCachedMassMatrix(int dofCountCheck, double* massMatrix);
118 
119 	virtual bool getCachedReturnData(b3UserDataValue* returnData);
120 
121 	//the following APIs are for internal use for visualization:
122 	virtual bool connect(struct GUIHelperInterface* guiHelper);
123 	virtual void renderScene();
124 	virtual void debugDraw(int debugDrawMode);
125 
126 	virtual void setTimeOut(double timeOutInSeconds);
127 	virtual double getTimeOut() const;
128 
129 	virtual bool getCachedUserData(int userDataId, struct b3UserDataValue& valueOut) const;
130 	virtual int getCachedUserDataId(int bodyUniqueId, int linkIndex, int visualShapeIndex, const char* key) const;
131 	virtual int getNumUserData(int bodyUniqueId) const;
132 	virtual void getUserDataInfo(int bodyUniqueId, int userDataIndex, const char** keyOut, int* userDataIdOut, int* linkIndexOut, int* visualShapeIndexOut) const;
133 
134 	virtual void pushProfileTiming(const char* timingName);
135 	virtual void popProfileTiming();
136 };
137 
138 #endif  //PHYSICS_DIRECT_H
139