openVRTrackedObject.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #ifndef _OPENVR_TRACKED_OBJECT_H_
  2. #define _OPENVR_TRACKED_OBJECT_H_
  3. #ifndef _GAMEBASE_H_
  4. #include "T3D/gameBase/gameBase.h"
  5. #endif
  6. #ifndef _GFXVERTEXBUFFER_H_
  7. #include "gfx/gfxVertexBuffer.h"
  8. #endif
  9. #ifndef _GFXPRIMITIVEBUFFER_H_
  10. #include "gfx/gfxPrimitiveBuffer.h"
  11. #endif
  12. #ifndef _TSSHAPEINSTANCE_H_
  13. #include "ts/tsShapeInstance.h"
  14. #endif
  15. #include "collision/earlyOutPolyList.h"
  16. #include <openvr.h>
  17. class BaseMatInstance;
  18. class OpenVRRenderModel;
  19. class PhysicsBody;
  20. class OpenVRTrackedObjectData : public GameBaseData {
  21. public:
  22. typedef GameBaseData Parent;
  23. StringTableEntry mShapeFile;
  24. Resource<TSShape> mShape; ///< Torque model
  25. Point3F mCollisionBoxMin;
  26. Point3F mCollisionBoxMax;
  27. public:
  28. OpenVRTrackedObjectData();
  29. ~OpenVRTrackedObjectData();
  30. DECLARE_CONOBJECT(OpenVRTrackedObjectData);
  31. bool onAdd();
  32. bool preload(bool server, String &errorStr);
  33. static void initPersistFields();
  34. virtual void packData(BitStream* stream);
  35. virtual void unpackData(BitStream* stream);
  36. };
  37. /// Implements a GameObject which tracks an OpenVR controller
  38. class OpenVRTrackedObject : public GameBase
  39. {
  40. typedef GameBase Parent;
  41. enum MaskBits
  42. {
  43. UpdateMask = Parent::NextFreeMask << 0,
  44. NextFreeMask = Parent::NextFreeMask << 1
  45. };
  46. struct RenderModelSlot
  47. {
  48. StringTableEntry componentName; ///< Component name
  49. S16 mappedNodeIdx; ///< Mapped node idx in mShape
  50. OpenVRRenderModel *nativeModel; ///< Native model
  51. };
  52. OpenVRTrackedObjectData *mDataBlock;
  53. /// @name Rendering
  54. /// {
  55. TSShapeInstance *mShapeInstance; ///< Shape used to render controller (uses native model otherwise)
  56. StringTableEntry mModelName;
  57. OpenVRRenderModel *mBasicModel; ///< Basic model
  58. Vector<RenderModelSlot> mRenderComponents;
  59. /// }
  60. S32 mDeviceIndex; ///< Controller idx in openvr (for direct updating)
  61. S32 mMappedMoveIndex; ///< Movemanager move index for rotation
  62. vr::VRControllerState_t mCurrentControllerState;
  63. vr::VRControllerState_t mPreviousControllerState;
  64. IDevicePose mPose; ///< Current openvr pose data, or reconstructed data from the client
  65. Convex* mConvexList;
  66. EarlyOutPolyList mClippedList;
  67. PhysicsBody *mPhysicsRep;
  68. SimObjectPtr<SceneObject> mCollisionObject; ///< Object we're currently colliding with
  69. SimObjectPtr<SceneObject> mInteractObject; ///< Object we've designated as important to interact with
  70. bool mHoldInteractedObject; ///< Performs pickup logic with mInteractObject
  71. bool mIgnoreParentRotation; ///< Ignores the rotation of the parent object
  72. static bool smDebugControllerPosition; ///< Shows latest controller position in DebugDrawer
  73. static bool smDebugControllerMovePosition; ///< Shows move position in DebugDrawer
  74. static U32 sServerCollisionMask;
  75. static U32 sClientCollisionMask;
  76. public:
  77. OpenVRTrackedObject();
  78. virtual ~OpenVRTrackedObject();
  79. void updateRenderData();
  80. void setupRenderDataFromModel(bool loadComponentModels);
  81. void clearRenderData();
  82. DECLARE_CONOBJECT(OpenVRTrackedObject);
  83. static void initPersistFields();
  84. virtual void inspectPostApply();
  85. bool onAdd();
  86. void onRemove();
  87. void _updatePhysics();
  88. bool onNewDataBlock(GameBaseData *dptr, bool reload);
  89. void setInteractObject(SceneObject* object, bool holding);
  90. void setTransform(const MatrixF &mat);
  91. void setModelName(String &modelName);
  92. U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream);
  93. void unpackUpdate(NetConnection *conn, BitStream *stream);
  94. void writePacketData(GameConnection *conn, BitStream *stream);
  95. void readPacketData(GameConnection *conn, BitStream *stream);
  96. void prepRenderImage(SceneRenderState *state);
  97. MatrixF getTrackedTransform();
  98. MatrixF getLastTrackedTransform();
  99. MatrixF getBaseTrackingTransform();
  100. U32 getCollisionMask();
  101. void updateWorkingCollisionSet();
  102. // Time management
  103. void updateMove(const Move *move);
  104. void processTick(const Move *move);
  105. void interpolateTick(F32 delta);
  106. void advanceTime(F32 dt);
  107. // Collision
  108. bool castRay(const Point3F &start, const Point3F &end, RayInfo* info);
  109. void buildConvex(const Box3F& box, Convex* convex);
  110. bool testObject(SceneObject* enter);
  111. };
  112. #endif // _OPENVR_TRACKED_OBJECT_H_