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.

194 lines
7.4 KiB

5 years ago
  1. //========= Copyright 2016-2020, HTC Corporation. All rights reserved. ===========
  2. using HTC.UnityPlugin.ColliderEvent;
  3. using UnityEngine;
  4. namespace HTC.UnityPlugin.Vive
  5. {
  6. public static class ViveColliderEventDataExtension
  7. {
  8. public static bool IsViveButton(this ColliderButtonEventData eventData, HandRole hand)
  9. {
  10. if (eventData == null) { return false; }
  11. if (!(eventData is ViveColliderButtonEventData)) { return false; }
  12. return (eventData as ViveColliderButtonEventData).viveRole.IsRole(hand);
  13. }
  14. public static bool IsViveButtonEx<TRole>(this ColliderButtonEventData eventData, TRole role)
  15. {
  16. if (eventData == null) { return false; }
  17. if (!(eventData is ViveColliderButtonEventData)) { return false; }
  18. return (eventData as ViveColliderButtonEventData).viveRole.IsRole(role);
  19. }
  20. public static bool IsViveButton(this ColliderButtonEventData eventData, ControllerButton button)
  21. {
  22. if (eventData == null) { return false; }
  23. if (!(eventData is ViveColliderButtonEventData)) { return false; }
  24. return (eventData as ViveColliderButtonEventData).viveButton == button;
  25. }
  26. public static bool IsViveButton(this ColliderButtonEventData eventData, HandRole hand, ControllerButton button)
  27. {
  28. if (eventData == null) { return false; }
  29. if (!(eventData is ViveColliderButtonEventData)) { return false; }
  30. var viveEvent = eventData as ViveColliderButtonEventData;
  31. return viveEvent.viveRole.IsRole(hand) && viveEvent.viveButton == button;
  32. }
  33. public static bool IsViveButtonEx<TRole>(this ColliderButtonEventData eventData, TRole role, ControllerButton button)
  34. {
  35. if (eventData == null) { return false; }
  36. if (!(eventData is ViveColliderButtonEventData)) { return false; }
  37. var viveEvent = eventData as ViveColliderButtonEventData;
  38. return viveEvent.viveRole.IsRole(role) && viveEvent.viveButton == button;
  39. }
  40. public static bool TryGetViveButtonEventData(this ColliderButtonEventData eventData, out ViveColliderButtonEventData viveEventData)
  41. {
  42. viveEventData = null;
  43. if (eventData == null) { return false; }
  44. if (!(eventData is ViveColliderButtonEventData)) { return false; }
  45. viveEventData = eventData as ViveColliderButtonEventData;
  46. return true;
  47. }
  48. public static bool IsViveTriggerAxis(this ColliderAxisEventData eventData)
  49. {
  50. if (eventData == null) { return false; }
  51. return eventData is ViveColliderTriggerAxisEventData;
  52. }
  53. public static bool IsViveTriggerAxis(this ColliderAxisEventData eventData, HandRole hand)
  54. {
  55. if (eventData == null) { return false; }
  56. if (!(eventData is ViveColliderTriggerAxisEventData)) { return false; }
  57. return (eventData as ViveColliderTriggerAxisEventData).viveRole.IsRole(hand);
  58. }
  59. public static bool IsViveTriggerAxisEx<TRole>(this ColliderAxisEventData eventData, TRole role)
  60. {
  61. if (eventData == null) { return false; }
  62. if (!(eventData is ViveColliderTriggerAxisEventData)) { return false; }
  63. return (eventData as ViveColliderTriggerAxisEventData).viveRole.IsRole(role);
  64. }
  65. public static bool TryGetViveTriggerAxisEventData(this ColliderAxisEventData eventData, out ViveColliderTriggerAxisEventData viveEventData)
  66. {
  67. viveEventData = null;
  68. if (eventData == null) { return false; }
  69. if (!(eventData is ViveColliderTriggerAxisEventData)) { return false; }
  70. viveEventData = eventData as ViveColliderTriggerAxisEventData;
  71. return true;
  72. }
  73. public static bool IsVivePadAxis(this ColliderAxisEventData eventData)
  74. {
  75. if (eventData == null) { return false; }
  76. return eventData is ViveColliderPadAxisEventData;
  77. }
  78. public static bool IsVivePadAxis(this ColliderAxisEventData eventData, HandRole hand)
  79. {
  80. if (eventData == null) { return false; }
  81. if (!(eventData is ViveColliderPadAxisEventData)) { return false; }
  82. return (eventData as ViveColliderTriggerAxisEventData).viveRole.IsRole(hand);
  83. }
  84. public static bool IsVivePadAxisEx<TRole>(this ColliderAxisEventData eventData, TRole role)
  85. {
  86. if (eventData == null) { return false; }
  87. if (!(eventData is ViveColliderPadAxisEventData)) { return false; }
  88. return (eventData as ViveColliderTriggerAxisEventData).viveRole.IsRole(role);
  89. }
  90. public static bool TryGetVivePadAxisEventData(this ColliderAxisEventData eventData, out ViveColliderPadAxisEventData viveEventData)
  91. {
  92. viveEventData = null;
  93. if (eventData == null) { return false; }
  94. if (!(eventData is ViveColliderPadAxisEventData)) { return false; }
  95. viveEventData = eventData as ViveColliderPadAxisEventData;
  96. return true;
  97. }
  98. }
  99. public class ViveColliderButtonEventData : ColliderButtonEventData
  100. {
  101. public ViveColliderEventCaster viveEventCaster { get; private set; }
  102. public ControllerButton viveButton { get; private set; }
  103. public ViveRoleProperty viveRole { get { return viveEventCaster.viveRole; } }
  104. public ViveColliderButtonEventData(ViveColliderEventCaster eventCaster, ControllerButton viveButton, InputButton button) : base(eventCaster, button)
  105. {
  106. this.viveEventCaster = eventCaster;
  107. this.viveButton = viveButton;
  108. }
  109. public override bool GetPress() { return ViveInput.GetPressEx(viveRole.roleType, viveRole.roleValue, viveButton); }
  110. public override bool GetPressDown() { return ViveInput.GetPressDownEx(viveRole.roleType, viveRole.roleValue, viveButton); }
  111. public override bool GetPressUp() { return ViveInput.GetPressUpEx(viveRole.roleType, viveRole.roleValue, viveButton); }
  112. }
  113. public class ViveColliderTriggerAxisEventData : ColliderAxisEventData
  114. {
  115. public ViveColliderEventCaster viveEventCaster { get; private set; }
  116. public ViveRoleProperty viveRole { get { return viveEventCaster.viveRole; } }
  117. public ViveColliderTriggerAxisEventData(ViveColliderEventCaster eventCaster) : base(eventCaster, Dim.D1, InputAxis.Trigger1D)
  118. {
  119. viveEventCaster = eventCaster;
  120. }
  121. public override Vector4 GetDelta()
  122. {
  123. return new Vector4(ViveInput.GetTriggerValueEx(viveRole.roleType, viveRole.roleValue, false) - ViveInput.GetTriggerValueEx(viveRole.roleType, viveRole.roleValue, true), 0f);
  124. }
  125. }
  126. public class ViveColliderPadAxisEventData : ColliderAxisEventData
  127. {
  128. public ViveColliderEventCaster viveEventCaster { get; private set; }
  129. public ViveRoleProperty viveRole { get { return viveEventCaster.viveRole; } }
  130. public ViveColliderPadAxisEventData(ViveColliderEventCaster eventCaster) : base(eventCaster, Dim.D2, InputAxis.Scroll2D)
  131. {
  132. viveEventCaster = eventCaster;
  133. }
  134. public override Vector4 GetDelta()
  135. {
  136. return ViveInput.GetScrollDelta(viveRole, viveEventCaster.scrollType, viveEventCaster.scrollDeltaScale);
  137. }
  138. }
  139. }