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.

199 lines
6.8 KiB

5 years ago
  1. //========= Copyright 2016-2020, HTC Corporation. All rights reserved. ===========
  2. using HTC.UnityPlugin.Utility;
  3. namespace HTC.UnityPlugin.VRModuleManagement
  4. {
  5. public enum VRModuleTrackingSpaceType
  6. {
  7. Stationary,
  8. RoomScale,
  9. }
  10. public enum VRModuleSelectEnum
  11. {
  12. Auto = -1,
  13. None = 0,
  14. Simulator = 1,
  15. UnityNativeVR = 2,
  16. SteamVR = 3,
  17. OculusVR = 4,
  18. DayDream = 5,
  19. WaveVR = 6,
  20. UnityXR = 7,
  21. }
  22. public enum VRModuleActiveEnum
  23. {
  24. Uninitialized = -1,
  25. None = VRModuleSelectEnum.None,
  26. Simulator = VRModuleSelectEnum.Simulator,
  27. UnityNativeVR = VRModuleSelectEnum.UnityNativeVR,
  28. SteamVR = VRModuleSelectEnum.SteamVR,
  29. OculusVR = VRModuleSelectEnum.OculusVR,
  30. DayDream = VRModuleSelectEnum.DayDream,
  31. WaveVR = VRModuleSelectEnum.WaveVR,
  32. UnityXR = VRModuleSelectEnum.UnityXR,
  33. }
  34. public partial class VRModule : SingletonBehaviour<VRModule>
  35. {
  36. public const uint MAX_DEVICE_COUNT = 64u;
  37. public const uint INVALID_DEVICE_INDEX = 4294967295u;
  38. public const uint HMD_DEVICE_INDEX = 0u;
  39. public static bool lockPhysicsUpdateRateToRenderFrequency
  40. {
  41. get
  42. {
  43. return Instance == null ? true : Instance.m_lockPhysicsUpdateRateToRenderFrequency;
  44. }
  45. set
  46. {
  47. if (Instance != null)
  48. {
  49. Instance.m_lockPhysicsUpdateRateToRenderFrequency = value;
  50. }
  51. }
  52. }
  53. public static VRModuleSelectEnum selectModule
  54. {
  55. get
  56. {
  57. return Instance == null ? VRModuleSelectEnum.Auto : Instance.m_selectModule;
  58. }
  59. set
  60. {
  61. if (Instance != null)
  62. {
  63. Instance.m_selectModule = value;
  64. }
  65. }
  66. }
  67. public static VRModuleActiveEnum activeModule
  68. {
  69. get
  70. {
  71. return Instance == null ? VRModuleActiveEnum.Uninitialized : Instance.m_activatedModule;
  72. }
  73. }
  74. public static IVRModuleDeviceState defaultDeviceState
  75. {
  76. get
  77. {
  78. return s_defaultState;
  79. }
  80. }
  81. public static bool IsValidDeviceIndex(uint deviceIndex)
  82. {
  83. if (!Active) { return false; }
  84. return deviceIndex < Instance.GetDeviceStateLength();
  85. }
  86. public static bool HasInputFocus()
  87. {
  88. return Instance == null || Instance.m_activatedModuleBase == null ? true : Instance.m_activatedModuleBase.HasInputFocus();
  89. }
  90. public static bool IsDeviceConnected(string deviceSerialNumber)
  91. {
  92. return (string.IsNullOrEmpty(deviceSerialNumber) || s_deviceSerialNumberTable == null) ? false : s_deviceSerialNumberTable.ContainsKey(deviceSerialNumber);
  93. }
  94. public static uint GetConnectedDeviceIndex(string deviceSerialNumber)
  95. {
  96. uint deviceIndex;
  97. if (string.IsNullOrEmpty(deviceSerialNumber) || s_deviceSerialNumberTable == null || !s_deviceSerialNumberTable.TryGetValue(deviceSerialNumber, out deviceIndex))
  98. {
  99. return INVALID_DEVICE_INDEX;
  100. }
  101. else
  102. {
  103. return deviceIndex;
  104. }
  105. }
  106. public static bool TryGetConnectedDeviceIndex(string deviceSerialNumber, out uint deviceIndex)
  107. {
  108. if (string.IsNullOrEmpty(deviceSerialNumber) || s_deviceSerialNumberTable == null)
  109. {
  110. deviceIndex = INVALID_DEVICE_INDEX;
  111. return false;
  112. }
  113. else
  114. {
  115. return s_deviceSerialNumberTable.TryGetValue(deviceSerialNumber, out deviceIndex);
  116. }
  117. }
  118. public static uint GetDeviceStateCount() { return Instance == null ? 0u : Instance.GetDeviceStateLength(); }
  119. public static IVRModuleDeviceState GetCurrentDeviceState(uint deviceIndex)
  120. {
  121. if (!IsValidDeviceIndex(deviceIndex) || Instance == null || Instance.m_currStates == null) { return s_defaultState; }
  122. return Instance.m_currStates[deviceIndex] ?? s_defaultState;
  123. }
  124. public static IVRModuleDeviceState GetPreviousDeviceState(uint deviceIndex)
  125. {
  126. if (!IsValidDeviceIndex(deviceIndex) || Instance == null || Instance.m_prevStates == null) { return s_defaultState; }
  127. return Instance.m_prevStates[deviceIndex] ?? s_defaultState;
  128. }
  129. public static IVRModuleDeviceState GetDeviceState(uint deviceIndex, bool usePrevious = false)
  130. {
  131. return usePrevious ? GetPreviousDeviceState(deviceIndex) : GetCurrentDeviceState(deviceIndex);
  132. }
  133. public static uint GetLeftControllerDeviceIndex()
  134. {
  135. return Instance == null || Instance.m_activatedModuleBase == null ? INVALID_DEVICE_INDEX : Instance.m_activatedModuleBase.GetLeftControllerDeviceIndex();
  136. }
  137. public static uint GetRightControllerDeviceIndex()
  138. {
  139. return Instance == null || Instance.m_activatedModuleBase == null ? INVALID_DEVICE_INDEX : Instance.m_activatedModuleBase.GetRightControllerDeviceIndex();
  140. }
  141. public static VRModuleTrackingSpaceType trackingSpaceType
  142. {
  143. get
  144. {
  145. return Instance == null ? VRModuleTrackingSpaceType.RoomScale : Instance.m_trackingSpaceType;
  146. }
  147. set
  148. {
  149. if (Instance != null)
  150. {
  151. Instance.m_trackingSpaceType = value;
  152. if (Instance.m_activatedModuleBase != null)
  153. {
  154. Instance.m_activatedModuleBase.UpdateTrackingSpaceType();
  155. }
  156. }
  157. }
  158. }
  159. public static ISimulatorVRModule Simulator { get { return s_simulator; } }
  160. public static void TriggerViveControllerHaptic(uint deviceIndex, ushort durationMicroSec = 500)
  161. {
  162. if (Instance != null && Instance.m_activatedModuleBase != null && IsValidDeviceIndex(deviceIndex))
  163. {
  164. Instance.m_activatedModuleBase.TriggerViveControllerHaptic(deviceIndex, durationMicroSec);
  165. }
  166. }
  167. public static void TriggerHapticVibration(uint deviceIndex, float durationSeconds = 0.01f, float frequency = 85f, float amplitude = 0.125f, float startSecondsFromNow = 0f)
  168. {
  169. if (Instance != null && Instance.m_activatedModuleBase != null && IsValidDeviceIndex(deviceIndex))
  170. {
  171. Instance.m_activatedModuleBase.TriggerHapticVibration(deviceIndex, durationSeconds, frequency, amplitude, startSecondsFromNow);
  172. }
  173. }
  174. }
  175. }