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.

87 lines
3.9 KiB

5 years ago
  1. //========= Copyright 2016-2020, HTC Corporation. All rights reserved. ===========
  2. using HTC.UnityPlugin.Pointer3D;
  3. using HTC.UnityPlugin.Utility;
  4. using UnityEngine;
  5. using UnityEngine.EventSystems;
  6. using UnityEngine.Serialization;
  7. namespace HTC.UnityPlugin.Vive
  8. {
  9. [AddComponentMenu("VIU/UI Pointer/Vive Raycaster (VR Controller Input)", 4)]
  10. // Customized Pointer3DRaycaster for Vive controllers.
  11. public class ViveRaycaster : Pointer3DRaycaster, IViveRoleComponent
  12. {
  13. [SerializeField]
  14. private ViveRoleProperty m_viveRole = ViveRoleProperty.New(HandRole.RightHand);
  15. [SerializeField]
  16. [FormerlySerializedAs("m_mouseBtnLeft")]
  17. [CustomOrderedEnum]
  18. private ControllerButton m_mouseButtonLeft = ControllerButton.Trigger;
  19. [SerializeField]
  20. [FormerlySerializedAs("m_mouseBtnMiddle")]
  21. [CustomOrderedEnum]
  22. private ControllerButton m_mouseButtonMiddle = ControllerButton.Grip;
  23. [SerializeField]
  24. [FormerlySerializedAs("m_mouseBtnRight")]
  25. [CustomOrderedEnum]
  26. private ControllerButton m_mouseButtonRight = ControllerButton.Pad;
  27. [SerializeField]
  28. [FormerlySerializedAs("m_buttonEvents")]
  29. [FlagsFromEnum(typeof(ControllerButton))]
  30. private ulong m_additionalButtons = 0ul;
  31. [SerializeField]
  32. private ScrollType m_scrollType = ScrollType.Auto;
  33. [SerializeField]
  34. private Vector2 m_scrollDeltaScale = new Vector2(1f, -1f);
  35. public ViveRoleProperty viveRole { get { return m_viveRole; } }
  36. public ControllerButton mouseButtonLeft { get { return m_mouseButtonLeft; } }
  37. public ControllerButton mouseButtonMiddle { get { return m_mouseButtonMiddle; } }
  38. public ControllerButton mouseButtonRight { get { return m_mouseButtonRight; } }
  39. public ulong additionalButtonMask { get { return m_additionalButtons; } }
  40. public ScrollType scrollType { get { return m_scrollType; } set { m_scrollType = value; } }
  41. public Vector2 scrollDeltaScale { get { return m_scrollDeltaScale; } set { m_scrollDeltaScale = value; } }
  42. public bool IsAdditionalButtonOn(ControllerButton btn) { return EnumUtils.GetFlag(m_additionalButtons, (int)btn); }
  43. #if UNITY_EDITOR
  44. protected override void OnValidate()
  45. {
  46. base.OnValidate();
  47. FilterOutAssignedButton();
  48. }
  49. #endif
  50. protected void FilterOutAssignedButton()
  51. {
  52. EnumUtils.SetFlag(ref m_additionalButtons, (int)m_mouseButtonLeft, false);
  53. EnumUtils.SetFlag(ref m_additionalButtons, (int)m_mouseButtonMiddle, false);
  54. EnumUtils.SetFlag(ref m_additionalButtons, (int)m_mouseButtonRight, false);
  55. }
  56. protected override void Start()
  57. {
  58. base.Start();
  59. // ensure HoverEventData (buttonEventDataList[0]) exist
  60. buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, m_mouseButtonLeft, PointerEventData.InputButton.Left));
  61. if (m_mouseButtonRight != ControllerButton.None) { buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, m_mouseButtonRight, PointerEventData.InputButton.Right)); }
  62. if (m_mouseButtonMiddle != ControllerButton.None) { buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, m_mouseButtonMiddle, PointerEventData.InputButton.Middle)); }
  63. FilterOutAssignedButton();
  64. var mouseBtn = PointerEventData.InputButton.Middle + 1;
  65. var addBtns = m_additionalButtons;
  66. for (ControllerButton btn = 0; addBtns > 0u; ++btn, addBtns >>= 1)
  67. {
  68. if ((addBtns & 1u) == 0u) { continue; }
  69. buttonEventDataList.Add(new VivePointerEventData(this, EventSystem.current, btn, mouseBtn++));
  70. }
  71. }
  72. public override Vector2 GetScrollDelta()
  73. {
  74. return ViveInput.GetScrollDelta(m_viveRole, m_scrollType, m_scrollDeltaScale);
  75. }
  76. }
  77. }