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