PhysicsDirect.h 4.7 KB

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