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.

142 lines
6.3 KiB

5 years ago
  1. //========= Copyright 2016-2020, HTC Corporation. All rights reserved. ===========
  2. using HTC.UnityPlugin.Utility;
  3. using System;
  4. namespace HTC.UnityPlugin.Vive
  5. {
  6. [Serializable]
  7. public struct ControllerButtonMask
  8. {
  9. public ulong raw;
  10. public ControllerButtonMask(ControllerButton button, params ControllerButton[] buttons)
  11. {
  12. raw = GetRawMask(button, buttons);
  13. }
  14. public bool IsSet(ControllerButton button) { return button >= 0 ? (raw & (1ul << (int)button)) > 0ul : false; }
  15. public bool IsAnySet(ControllerButton button, params ControllerButton[] buttons) { var m = GetRawMask(button, buttons); return (raw & m) > 0ul; }
  16. public bool IsAllSet(ControllerButton button, params ControllerButton[] buttons) { var m = GetRawMask(button, buttons); return (raw & m) == m; }
  17. public void Set(ControllerButton button, params ControllerButton[] buttons) { raw |= GetRawMask(button, buttons); }
  18. public void Unset(ControllerButton button, params ControllerButton[] buttons) { raw &= ~GetRawMask(button, buttons); }
  19. public bool GetAnyPress(ulong pressed) { return (pressed & raw) > 0ul; }
  20. public bool GetAllPress(ulong pressed) { return (pressed & raw) == raw; }
  21. public static ulong GetRawMask(ControllerButton button, params ControllerButton[] buttons)
  22. {
  23. var value = button >= 0 ? 1ul << (int)button : 0ul;
  24. if (buttons != null && buttons.Length > 0) { foreach (var b in buttons) { if (b >= 0) { value |= 1ul << (int)b; } } }
  25. return value;
  26. }
  27. public static ControllerButtonMask All { get { return new ControllerButtonMask() { raw = ~0ul }; } }
  28. }
  29. public partial class ViveInput : SingletonBehaviour<ViveInput>
  30. {
  31. public static bool GetAnyPress<TRole>(TRole role, ControllerButtonMask mask, bool usePrevState = false)
  32. {
  33. return mask.GetAnyPress(usePrevState ? GetState(role).PreviousButtonPressed : GetState(role).CurrentButtonPressed);
  34. }
  35. //public static bool GetAnyPressDown<TRole>(TRole role, ControllerButtonMask mask)
  36. //{
  37. // var state = GetState(role);
  38. // return !mask.GetAnyPress(state.PreviousButtonPressed) && mask.GetAnyPress(state.CurrentButtonPressed);
  39. //}
  40. //public static bool GetAnyPressUp<TRole>(TRole role, ControllerButtonMask mask)
  41. //{
  42. // var state = GetState(role);
  43. // return mask.GetAllPress(state.PreviousButtonPressed) && !mask.GetAllPress(state.CurrentButtonPressed);
  44. //}
  45. public static bool GetAllPress<TRole>(TRole role, ControllerButtonMask mask, bool usePrevState = false)
  46. {
  47. return mask.GetAllPress(usePrevState ? GetState(role).PreviousButtonPressed : GetState(role).CurrentButtonPressed);
  48. }
  49. //public static bool GetAllPressDown<TRole>(TRole role, ControllerButtonMask mask)
  50. //{
  51. // var state = GetState(role);
  52. // return !mask.GetAllPress(state.PreviousButtonPressed) && mask.GetAllPress(state.CurrentButtonPressed);
  53. //}
  54. //public static bool GetAllPressUp<TRole>(TRole role, ControllerButtonMask mask)
  55. //{
  56. // var state = GetState(role);
  57. // return mask.GetAnyPress(state.PreviousButtonPressed) && !mask.GetAnyPress(state.CurrentButtonPressed);
  58. //}
  59. public static bool GetAnyPress(ViveRoleProperty role, ControllerButtonMask mask, bool usePrevState = false)
  60. {
  61. return GetAnyPress(role.roleType, role.roleValue, mask, usePrevState);
  62. }
  63. //public static bool GetAnyPressDown(ViveRoleProperty role, ControllerButtonMask mask)
  64. //{
  65. // return GetAnyPressDown(role.roleType, role.roleValue, mask);
  66. //}
  67. //public static bool GetAnyPressUp(ViveRoleProperty role, ControllerButtonMask mask)
  68. //{
  69. // return GetAnyPressUp(role.roleType, role.roleValue, mask);
  70. //}
  71. public static bool GetAllPress(ViveRoleProperty role, ControllerButtonMask mask, bool usePrevState = false)
  72. {
  73. return GetAllPress(role.roleType, role.roleValue, mask, usePrevState);
  74. }
  75. //public static bool GetAllPressDown(ViveRoleProperty role, ControllerButtonMask mask)
  76. //{
  77. // return GetAllPressDown(role.roleType, role.roleValue, mask);
  78. //}
  79. //public static bool GetAllPressUp(ViveRoleProperty role, ControllerButtonMask mask)
  80. //{
  81. // return GetAllPressUp(role.roleType, role.roleValue, mask);
  82. //}
  83. public static bool GetAnyPress(Type roleType, int roleValue, ControllerButtonMask mask, bool usePrevState = false)
  84. {
  85. return mask.GetAnyPress(usePrevState ? GetState(roleType, roleValue).PreviousButtonPressed : GetState(roleType, roleValue).CurrentButtonPressed);
  86. }
  87. //public static bool GetAnyPressDown(Type roleType, int roleValue, ControllerButtonMask mask)
  88. //{
  89. // var state = GetState(roleType, roleValue);
  90. // return !mask.GetAnyPress(state.PreviousButtonPressed) && mask.GetAnyPress(state.CurrentButtonPressed);
  91. //}
  92. //public static bool GetAnyPressUp(Type roleType, int roleValue, ControllerButtonMask mask)
  93. //{
  94. // var state = GetState(roleType, roleValue);
  95. // return mask.GetAllPress(state.PreviousButtonPressed) && !mask.GetAllPress(state.CurrentButtonPressed);
  96. //}
  97. public static bool GetAllPress(Type roleType, int roleValue, ControllerButtonMask mask, bool usePrevState = false)
  98. {
  99. return mask.GetAllPress(usePrevState ? GetState(roleType, roleValue).PreviousButtonPressed : GetState(roleType, roleValue).CurrentButtonPressed);
  100. }
  101. //public static bool GetAllPressDown(Type roleType, int roleValue, ControllerButtonMask mask)
  102. //{
  103. // var state = GetState(roleType, roleValue);
  104. // return !mask.GetAllPress(state.PreviousButtonPressed) && mask.GetAllPress(state.CurrentButtonPressed);
  105. //}
  106. //public static bool GetAllPressUp(Type roleType, int roleValue, ControllerButtonMask mask)
  107. //{
  108. // var state = GetState(roleType, roleValue);
  109. // return mask.GetAnyPress(state.PreviousButtonPressed) && !mask.GetAnyPress(state.CurrentButtonPressed);
  110. //}
  111. }
  112. }