2021년 4학년 1학기 기업연계프로젝트2 컴퓨터소프트웨어공학과 <원광투어팀> 팀장 : 송유진 팀원 : 김나영, 이경희, 한유진
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

469 lines
24 KiB

5 years ago
  1. //========= Copyright 2016-2020, HTC Corporation. All rights reserved. ===========
  2. using HTC.UnityPlugin.Utility;
  3. #if VIU_OCULUSVR
  4. using UnityEngine;
  5. using HTC.UnityPlugin.Vive;
  6. using HTC.UnityPlugin.Vive.OculusVRExtension;
  7. #if UNITY_2017_2_OR_NEWER
  8. using UnityEngine.XR;
  9. #else
  10. using XRDevice = UnityEngine.VR.VRDevice;
  11. using XRSettings = UnityEngine.VR.VRSettings;
  12. #endif
  13. #if VIU_XR_GENERAL_SETTINGS
  14. using UnityEngine.XR.Management;
  15. using UnityEngine.SpatialTracking;
  16. #endif
  17. #endif
  18. namespace HTC.UnityPlugin.VRModuleManagement
  19. {
  20. public partial class VRModule : SingletonBehaviour<VRModule>
  21. {
  22. public static readonly bool isOculusVRPluginDetected =
  23. #if VIU_OCULUSVR
  24. true;
  25. #else
  26. false;
  27. #endif
  28. public static readonly bool isOculusVRDesktopSupported =
  29. #if VIU_OCULUSVR_DESKTOP_SUPPORT
  30. true;
  31. #else
  32. false;
  33. #endif
  34. public static readonly bool isOculusVRAndroidSupported =
  35. #if VIU_OCULUSVR_ANDROID_SUPPORT
  36. true;
  37. #else
  38. false;
  39. #endif
  40. public static readonly bool isOculusVRAvatarSupported =
  41. #if VIU_OCULUSVR_AVATAR
  42. true;
  43. #else
  44. false;
  45. #endif
  46. }
  47. public sealed class OculusVRModule : VRModule.ModuleBase
  48. {
  49. public override int moduleOrder { get { return (int)DefaultModuleOrder.OculusVR; } }
  50. public override int moduleIndex { get { return (int)VRModuleSelectEnum.OculusVR; } }
  51. public const string OCULUS_XR_LOADER_NAME = "Oculus Loader";
  52. public const string OCULUS_XR_LOADER_CLASS_NAME = "OculusLoader";
  53. #if VIU_OCULUSVR
  54. private class CameraCreator : VRCameraHook.CameraCreator
  55. {
  56. public override bool shouldActive { get { return s_moduleInstance == null ? false : s_moduleInstance.isActivated; } }
  57. public override void CreateCamera(VRCameraHook hook)
  58. {
  59. #if UNITY_2019_3_OR_NEWER && VIU_XR_GENERAL_SETTINGS
  60. if (hook.GetComponent<TrackedPoseDriver>() == null)
  61. {
  62. hook.gameObject.AddComponent<TrackedPoseDriver>();
  63. }
  64. #endif
  65. }
  66. }
  67. #endif
  68. #if VIU_OCULUSVR_1_32_0_OR_NEWER || VIU_OCULUSVR_1_36_0_OR_NEWER || VIU_OCULUSVR_1_37_0_OR_NEWER
  69. private class RenderModelCreator : RenderModelHook.RenderModelCreator
  70. {
  71. private uint m_index = INVALID_DEVICE_INDEX;
  72. private VIUOculusVRRenderModel m_model;
  73. public override bool shouldActive { get { return s_moduleInstance == null ? false : s_moduleInstance.isActivated; } }
  74. public override void UpdateRenderModel()
  75. {
  76. if (!ChangeProp.Set(ref m_index, hook.GetModelDeviceIndex())) { return; }
  77. if (VRModule.IsValidDeviceIndex(m_index))
  78. {
  79. // create object for render model
  80. if (m_model == null)
  81. {
  82. var go = new GameObject("Model");
  83. go.transform.SetParent(hook.transform, false);
  84. m_model = go.AddComponent<VIUOculusVRRenderModel>();
  85. }
  86. // set render model index
  87. m_model.gameObject.SetActive(true);
  88. m_model.shaderOverride = hook.overrideShader;
  89. #if VIU_OCULUSVR_1_32_0_OR_NEWER || VIU_OCULUSVR_1_36_0_OR_NEWER
  90. m_model.gameObject.AddComponent(System.Type.GetType("OvrAvatarTouchController"));
  91. #endif
  92. m_model.SetDeviceIndex(m_index);
  93. }
  94. else
  95. {
  96. // deacitvate object for render model
  97. if (m_model != null)
  98. {
  99. m_model.gameObject.SetActive(false);
  100. }
  101. }
  102. }
  103. public override void CleanUpRenderModel()
  104. {
  105. if (m_model != null)
  106. {
  107. Object.Destroy(m_model.gameObject);
  108. m_model = null;
  109. m_index = INVALID_DEVICE_INDEX;
  110. }
  111. }
  112. }
  113. private static OculusVRModule s_moduleInstance;
  114. #endif
  115. #if VIU_OCULUSVR
  116. public const int VALID_NODE_COUNT = 7;
  117. private static readonly OVRPlugin.Node[] s_index2node;
  118. private static readonly uint[] s_node2index;
  119. private static readonly VRModuleDeviceClass[] s_node2class;
  120. private OVRPlugin.TrackingOrigin m_prevTrackingSpace;
  121. static OculusVRModule()
  122. {
  123. s_index2node = new OVRPlugin.Node[VALID_NODE_COUNT];
  124. for (int i = 0; i < s_index2node.Length; ++i) { s_index2node[i] = OVRPlugin.Node.None; }
  125. s_index2node[0] = OVRPlugin.Node.Head;
  126. s_index2node[1] = OVRPlugin.Node.HandLeft;
  127. s_index2node[2] = OVRPlugin.Node.HandRight;
  128. s_index2node[3] = OVRPlugin.Node.TrackerZero;
  129. s_index2node[4] = OVRPlugin.Node.TrackerOne;
  130. s_index2node[5] = OVRPlugin.Node.TrackerTwo;
  131. s_index2node[6] = OVRPlugin.Node.TrackerThree;
  132. s_node2index = new uint[(int)OVRPlugin.Node.Count];
  133. for (int i = 0; i < s_node2index.Length; ++i) { s_node2index[i] = INVALID_DEVICE_INDEX; }
  134. s_node2index[(int)OVRPlugin.Node.Head] = 0;
  135. s_node2index[(int)OVRPlugin.Node.HandLeft] = 1;
  136. s_node2index[(int)OVRPlugin.Node.HandRight] = 2;
  137. s_node2index[(int)OVRPlugin.Node.TrackerZero] = 3;
  138. s_node2index[(int)OVRPlugin.Node.TrackerOne] = 4;
  139. s_node2index[(int)OVRPlugin.Node.TrackerTwo] = 5;
  140. s_node2index[(int)OVRPlugin.Node.TrackerThree] = 6;
  141. s_node2class = new VRModuleDeviceClass[(int)OVRPlugin.Node.Count];
  142. for (int i = 0; i < s_node2class.Length; ++i) { s_node2class[i] = VRModuleDeviceClass.Invalid; }
  143. s_node2class[(int)OVRPlugin.Node.Head] = VRModuleDeviceClass.HMD;
  144. s_node2class[(int)OVRPlugin.Node.HandLeft] = VRModuleDeviceClass.Controller;
  145. s_node2class[(int)OVRPlugin.Node.HandRight] = VRModuleDeviceClass.Controller;
  146. s_node2class[(int)OVRPlugin.Node.TrackerZero] = VRModuleDeviceClass.TrackingReference;
  147. s_node2class[(int)OVRPlugin.Node.TrackerOne] = VRModuleDeviceClass.TrackingReference;
  148. s_node2class[(int)OVRPlugin.Node.TrackerTwo] = VRModuleDeviceClass.TrackingReference;
  149. s_node2class[(int)OVRPlugin.Node.TrackerThree] = VRModuleDeviceClass.TrackingReference;
  150. }
  151. public override bool ShouldActiveModule()
  152. {
  153. #if UNITY_2019_3_OR_NEWER && VIU_XR_GENERAL_SETTINGS
  154. return VIUSettings.activateOculusVRModule && (UnityXRModule.HasActiveLoader(OCULUS_XR_LOADER_NAME) ||
  155. XRSettings.enabled && XRSettings.loadedDeviceName == "Oculus");
  156. #else
  157. return VIUSettings.activateOculusVRModule && XRSettings.enabled && XRSettings.loadedDeviceName == "Oculus";
  158. #endif
  159. }
  160. public override void OnActivated()
  161. {
  162. m_prevTrackingSpace = OVRPlugin.GetTrackingOriginType();
  163. UpdateTrackingSpaceType();
  164. EnsureDeviceStateLength(VALID_NODE_COUNT);
  165. #if VIU_OCULUSVR_1_32_0_OR_NEWER || VIU_OCULUSVR_1_36_0_OR_NEWER || VIU_OCULUSVR_1_37_0_OR_NEWER
  166. s_moduleInstance = this;
  167. #endif
  168. }
  169. public override void OnDeactivated()
  170. {
  171. OVRPlugin.SetTrackingOriginType(m_prevTrackingSpace);
  172. }
  173. public override void UpdateTrackingSpaceType()
  174. {
  175. switch (VRModule.trackingSpaceType)
  176. {
  177. case VRModuleTrackingSpaceType.RoomScale:
  178. #if !VIU_OCULUSVR_19_0_OR_NEWER
  179. if (OVRPlugin.GetSystemHeadsetType().Equals(OVRPlugin.SystemHeadset.Oculus_Go))
  180. {
  181. OVRPlugin.SetTrackingOriginType(OVRPlugin.TrackingOrigin.EyeLevel);
  182. }
  183. else
  184. #endif
  185. {
  186. OVRPlugin.SetTrackingOriginType(OVRPlugin.TrackingOrigin.FloorLevel);
  187. }
  188. break;
  189. case VRModuleTrackingSpaceType.Stationary:
  190. OVRPlugin.SetTrackingOriginType(OVRPlugin.TrackingOrigin.EyeLevel);
  191. break;
  192. }
  193. }
  194. public override void Update()
  195. {
  196. // set physics update rate to vr render rate
  197. if (VRModule.lockPhysicsUpdateRateToRenderFrequency && Time.timeScale > 0.0f)
  198. {
  199. // FIXME: VRDevice.refreshRate returns zero in Unity 5.6.0 or older version
  200. #if !UNITY_5_6_0 && UNITY_5_6_OR_NEWER
  201. Time.fixedDeltaTime = 1f / XRDevice.refreshRate;
  202. #else
  203. Time.fixedDeltaTime = 1f / 90f;
  204. #endif
  205. }
  206. }
  207. public override uint GetLeftControllerDeviceIndex()
  208. {
  209. return s_node2index[(int)OVRPlugin.Node.HandLeft];
  210. }
  211. public override uint GetRightControllerDeviceIndex()
  212. {
  213. return s_node2index[(int)OVRPlugin.Node.HandRight];
  214. }
  215. private static RigidPose ToPose(OVRPlugin.Posef value)
  216. {
  217. var ovrPose = value.ToOVRPose();
  218. return new RigidPose(ovrPose.position, ovrPose.orientation);
  219. }
  220. public override void BeforeRenderUpdate()
  221. {
  222. FlushDeviceState();
  223. for (uint i = 0u, imax = GetDeviceStateLength(); i < imax; ++i)
  224. {
  225. var node = s_index2node[i];
  226. if (node == OVRPlugin.Node.None) { continue; }
  227. IVRModuleDeviceState prevState;
  228. IVRModuleDeviceStateRW currState;
  229. EnsureValidDeviceState(i, out prevState, out currState);
  230. if (!OVRPlugin.GetNodePresent(node))
  231. {
  232. if (prevState.isConnected)
  233. {
  234. currState.Reset();
  235. }
  236. continue;
  237. }
  238. // update device connected state
  239. if (!prevState.isConnected)
  240. {
  241. var platform = OVRPlugin.GetSystemHeadsetType();
  242. var ovrProductName = platform.ToString();
  243. var deviceClass = s_node2class[(int)node];
  244. currState.isConnected = true;
  245. currState.deviceClass = deviceClass;
  246. // FIXME: how to get device id from OVRPlugin?
  247. currState.modelNumber = ovrProductName + " " + deviceClass;
  248. currState.renderModelName = ovrProductName + " " + deviceClass;
  249. currState.serialNumber = ovrProductName + " " + node;
  250. switch (deviceClass)
  251. {
  252. case VRModuleDeviceClass.HMD:
  253. currState.deviceModel = VRModuleDeviceModel.OculusHMD;
  254. break;
  255. case VRModuleDeviceClass.TrackingReference:
  256. currState.deviceModel = VRModuleDeviceModel.OculusSensor;
  257. break;
  258. case VRModuleDeviceClass.Controller:
  259. switch (platform)
  260. {
  261. #if !VIU_OCULUSVR_19_0_OR_NEWER
  262. case OVRPlugin.SystemHeadset.Oculus_Go:
  263. currState.deviceModel = VRModuleDeviceModel.OculusGoController;
  264. currState.input2DType = VRModuleInput2DType.TouchpadOnly;
  265. break;
  266. case OVRPlugin.SystemHeadset.GearVR_R320:
  267. case OVRPlugin.SystemHeadset.GearVR_R321:
  268. case OVRPlugin.SystemHeadset.GearVR_R322:
  269. case OVRPlugin.SystemHeadset.GearVR_R323:
  270. case OVRPlugin.SystemHeadset.GearVR_R324:
  271. case OVRPlugin.SystemHeadset.GearVR_R325:
  272. currState.deviceModel = VRModuleDeviceModel.OculusGearVrController;
  273. currState.input2DType = VRModuleInput2DType.TouchpadOnly;
  274. break;
  275. #endif
  276. case OVRPlugin.SystemHeadset.Rift_DK1:
  277. case OVRPlugin.SystemHeadset.Rift_DK2:
  278. case OVRPlugin.SystemHeadset.Rift_CV1:
  279. switch (node)
  280. {
  281. case OVRPlugin.Node.HandLeft:
  282. currState.deviceModel = VRModuleDeviceModel.OculusTouchLeft;
  283. break;
  284. case OVRPlugin.Node.HandRight:
  285. default:
  286. currState.deviceModel = VRModuleDeviceModel.OculusTouchRight;
  287. break;
  288. }
  289. currState.input2DType = VRModuleInput2DType.JoystickOnly;
  290. break;
  291. #if VIU_OCULUSVR_16_0_OR_NEWER
  292. case OVRPlugin.SystemHeadset.Oculus_Link_Quest:
  293. #endif
  294. #if VIU_OCULUSVR_1_37_0_OR_NEWER
  295. case OVRPlugin.SystemHeadset.Oculus_Quest:
  296. case OVRPlugin.SystemHeadset.Rift_S:
  297. switch (node)
  298. {
  299. case OVRPlugin.Node.HandLeft:
  300. currState.deviceModel = VRModuleDeviceModel.OculusQuestControllerLeft;
  301. break;
  302. case OVRPlugin.Node.HandRight:
  303. default:
  304. currState.deviceModel = VRModuleDeviceModel.OculusQuestControllerRight;
  305. break;
  306. }
  307. currState.input2DType = VRModuleInput2DType.JoystickOnly;
  308. break;
  309. #endif
  310. }
  311. break;
  312. }
  313. }
  314. // update device pose
  315. currState.pose = ToPose(OVRPlugin.GetNodePose(node, OVRPlugin.Step.Render));
  316. currState.velocity = OVRPlugin.GetNodeVelocity(node, OVRPlugin.Step.Render).FromFlippedZVector3f();
  317. currState.angularVelocity = OVRPlugin.GetNodeAngularVelocity(node, OVRPlugin.Step.Render).FromFlippedZVector3f();
  318. currState.isPoseValid = currState.pose != RigidPose.identity;
  319. currState.isConnected = OVRPlugin.GetNodePresent(node);
  320. // update device input
  321. switch (currState.deviceModel)
  322. {
  323. case VRModuleDeviceModel.OculusTouchLeft:
  324. case VRModuleDeviceModel.OculusQuestControllerLeft:
  325. {
  326. var ctrlState = OVRPlugin.GetControllerState((uint)OVRPlugin.Controller.LTouch);
  327. currState.SetButtonPress(VRModuleRawButton.ApplicationMenu, (ctrlState.Buttons & (uint)OVRInput.RawButton.Y) != 0u);
  328. currState.SetButtonPress(VRModuleRawButton.A, (ctrlState.Buttons & (uint)OVRInput.RawButton.X) != 0u);
  329. currState.SetButtonPress(VRModuleRawButton.Touchpad, (ctrlState.Buttons & (uint)OVRInput.RawButton.LThumbstick) != 0u);
  330. currState.SetButtonPress(VRModuleRawButton.Trigger, AxisToPress(currState.GetButtonPress(VRModuleRawButton.Trigger), ctrlState.LIndexTrigger, 0.55f, 0.45f));
  331. currState.SetButtonPress(VRModuleRawButton.Grip, AxisToPress(currState.GetButtonPress(VRModuleRawButton.Grip), ctrlState.LHandTrigger, 0.55f, 0.45f));
  332. currState.SetButtonPress(VRModuleRawButton.CapSenseGrip, AxisToPress(currState.GetButtonPress(VRModuleRawButton.CapSenseGrip), ctrlState.LHandTrigger, 0.55f, 0.45f));
  333. currState.SetButtonPress(VRModuleRawButton.System, (ctrlState.Buttons & (uint)OVRInput.RawButton.Start) != 0u);
  334. currState.SetButtonTouch(VRModuleRawButton.ApplicationMenu, (ctrlState.Touches & (uint)OVRInput.RawTouch.Y) != 0u);
  335. currState.SetButtonTouch(VRModuleRawButton.A, (ctrlState.Touches & (uint)OVRInput.RawTouch.X) != 0u);
  336. currState.SetButtonTouch(VRModuleRawButton.Touchpad, (ctrlState.Touches & (uint)OVRInput.RawTouch.LThumbstick) != 0u);
  337. currState.SetButtonTouch(VRModuleRawButton.Trigger, (ctrlState.Touches & (uint)OVRInput.RawTouch.LIndexTrigger) != 0u);
  338. currState.SetButtonTouch(VRModuleRawButton.Grip, AxisToPress(currState.GetButtonTouch(VRModuleRawButton.Grip), ctrlState.LHandTrigger, 0.25f, 0.20f));
  339. currState.SetButtonTouch(VRModuleRawButton.CapSenseGrip, AxisToPress(currState.GetButtonTouch(VRModuleRawButton.CapSenseGrip), ctrlState.LHandTrigger, 0.25f, 0.20f));
  340. currState.SetAxisValue(VRModuleRawAxis.TouchpadX, ctrlState.LThumbstick.x);
  341. currState.SetAxisValue(VRModuleRawAxis.TouchpadY, ctrlState.LThumbstick.y);
  342. currState.SetAxisValue(VRModuleRawAxis.Trigger, ctrlState.LIndexTrigger);
  343. currState.SetAxisValue(VRModuleRawAxis.CapSenseGrip, ctrlState.LHandTrigger);
  344. break;
  345. }
  346. case VRModuleDeviceModel.OculusTouchRight:
  347. case VRModuleDeviceModel.OculusQuestControllerRight:
  348. {
  349. var ctrlState = OVRPlugin.GetControllerState((uint)OVRPlugin.Controller.RTouch);
  350. currState.SetButtonPress(VRModuleRawButton.ApplicationMenu, (ctrlState.Buttons & (uint)OVRInput.RawButton.B) != 0u);
  351. currState.SetButtonPress(VRModuleRawButton.A, (ctrlState.Buttons & (uint)OVRInput.RawButton.A) != 0u);
  352. currState.SetButtonPress(VRModuleRawButton.Touchpad, (ctrlState.Buttons & (uint)OVRInput.RawButton.RThumbstick) != 0u);
  353. currState.SetButtonPress(VRModuleRawButton.Trigger, AxisToPress(currState.GetButtonPress(VRModuleRawButton.Trigger), ctrlState.RIndexTrigger, 0.55f, 0.45f));
  354. currState.SetButtonPress(VRModuleRawButton.Grip, AxisToPress(currState.GetButtonPress(VRModuleRawButton.Grip), ctrlState.RHandTrigger, 0.55f, 0.45f));
  355. currState.SetButtonPress(VRModuleRawButton.CapSenseGrip, AxisToPress(currState.GetButtonPress(VRModuleRawButton.CapSenseGrip), ctrlState.RHandTrigger, 0.55f, 0.45f));
  356. currState.SetButtonTouch(VRModuleRawButton.ApplicationMenu, (ctrlState.Touches & (uint)OVRInput.RawTouch.B) != 0u);
  357. currState.SetButtonTouch(VRModuleRawButton.A, (ctrlState.Touches & (uint)OVRInput.RawTouch.A) != 0u);
  358. currState.SetButtonTouch(VRModuleRawButton.Touchpad, (ctrlState.Touches & (uint)OVRInput.RawTouch.RThumbstick) != 0u);
  359. currState.SetButtonTouch(VRModuleRawButton.Trigger, (ctrlState.Touches & (uint)OVRInput.RawTouch.RIndexTrigger) != 0u);
  360. currState.SetButtonTouch(VRModuleRawButton.Grip, AxisToPress(currState.GetButtonTouch(VRModuleRawButton.Grip), ctrlState.RHandTrigger, 0.25f, 0.20f));
  361. currState.SetButtonTouch(VRModuleRawButton.CapSenseGrip, AxisToPress(currState.GetButtonTouch(VRModuleRawButton.CapSenseGrip), ctrlState.RHandTrigger, 0.25f, 0.20f));
  362. currState.SetAxisValue(VRModuleRawAxis.TouchpadX, ctrlState.RThumbstick.x);
  363. currState.SetAxisValue(VRModuleRawAxis.TouchpadY, ctrlState.RThumbstick.y);
  364. currState.SetAxisValue(VRModuleRawAxis.Trigger, ctrlState.RIndexTrigger);
  365. currState.SetAxisValue(VRModuleRawAxis.CapSenseGrip, ctrlState.RHandTrigger);
  366. break;
  367. }
  368. #if !VIU_OCULUSVR_19_0_OR_NEWER
  369. case VRModuleDeviceModel.OculusGoController:
  370. case VRModuleDeviceModel.OculusGearVrController:
  371. switch (node)
  372. {
  373. case OVRPlugin.Node.HandLeft:
  374. {
  375. var ctrlState = OVRPlugin.GetControllerState4((uint)OVRPlugin.Controller.LTrackedRemote);
  376. currState.SetButtonPress(VRModuleRawButton.Touchpad, (ctrlState.Buttons & (uint)OVRInput.RawButton.LTouchpad) != 0u);
  377. currState.SetButtonPress(VRModuleRawButton.ApplicationMenu, (ctrlState.Buttons & (uint)OVRInput.RawButton.Back) != 0u);
  378. currState.SetButtonPress(VRModuleRawButton.Trigger, (ctrlState.Buttons & (uint)(OVRInput.RawButton.A | OVRInput.RawButton.LIndexTrigger)) != 0u);
  379. currState.SetButtonPress(VRModuleRawButton.DPadLeft, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadLeft) != 0u);
  380. currState.SetButtonPress(VRModuleRawButton.DPadUp, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadUp) != 0u);
  381. currState.SetButtonPress(VRModuleRawButton.DPadRight, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadRight) != 0u);
  382. currState.SetButtonPress(VRModuleRawButton.DPadDown, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadDown) != 0u);
  383. currState.SetButtonTouch(VRModuleRawButton.Touchpad, (ctrlState.Touches & (uint)OVRInput.RawTouch.LTouchpad) != 0u);
  384. currState.SetAxisValue(VRModuleRawAxis.TouchpadX, ctrlState.LTouchpad.x);
  385. currState.SetAxisValue(VRModuleRawAxis.TouchpadY, ctrlState.LTouchpad.y);
  386. }
  387. break;
  388. case OVRPlugin.Node.HandRight:
  389. default:
  390. {
  391. var ctrlState = OVRPlugin.GetControllerState4((uint)OVRPlugin.Controller.RTrackedRemote);
  392. currState.SetButtonPress(VRModuleRawButton.Touchpad, (ctrlState.Buttons & unchecked((uint)OVRInput.RawButton.RTouchpad)) != 0u);
  393. currState.SetButtonPress(VRModuleRawButton.ApplicationMenu, (ctrlState.Buttons & (uint)OVRInput.RawButton.Back) != 0u);
  394. currState.SetButtonPress(VRModuleRawButton.Trigger, (ctrlState.Buttons & (uint)(OVRInput.RawButton.A | OVRInput.RawButton.RIndexTrigger)) != 0u);
  395. currState.SetButtonPress(VRModuleRawButton.DPadLeft, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadLeft) != 0u);
  396. currState.SetButtonPress(VRModuleRawButton.DPadUp, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadUp) != 0u);
  397. currState.SetButtonPress(VRModuleRawButton.DPadRight, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadRight) != 0u);
  398. currState.SetButtonPress(VRModuleRawButton.DPadDown, (ctrlState.Buttons & (uint)OVRInput.RawButton.DpadDown) != 0u);
  399. currState.SetButtonTouch(VRModuleRawButton.Touchpad, (ctrlState.Touches & unchecked((uint)OVRInput.RawTouch.RTouchpad)) != 0u);
  400. currState.SetAxisValue(VRModuleRawAxis.TouchpadX, ctrlState.RTouchpad.x);
  401. currState.SetAxisValue(VRModuleRawAxis.TouchpadY, ctrlState.RTouchpad.y);
  402. }
  403. break;
  404. }
  405. break;
  406. #endif
  407. }
  408. }
  409. ProcessConnectedDeviceChanged();
  410. ProcessDevicePoseChanged();
  411. ProcessDeviceInputChanged();
  412. }
  413. #endif
  414. }
  415. }