VirtualMouse.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using InfraredManager;
  2. using ProjectBase.Event;
  3. using ShotSimulator.Event;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using UnityEngine;
  7. using UnityEngine.EventSystems;
  8. using UnityEngine.UI;
  9. public enum CursorType
  10. {
  11. UICursor,
  12. DefaultCursor,
  13. SnipeCursor
  14. }
  15. public class VirtualMouse : MonoSingleton<VirtualMouse>
  16. {
  17. public Vector2 screenPos = new Vector2();
  18. private bool m_TacticalMode;
  19. public bool TacticalMode
  20. {
  21. get
  22. {
  23. return m_TacticalMode;
  24. }
  25. set
  26. {
  27. m_TacticalMode = value;
  28. PlayerPrefs.SetInt("TacticalMode", m_TacticalMode ? 1 : 0);
  29. }
  30. }
  31. public Camera m_SnipeCamera;
  32. private EventSystem m_eventSystem;
  33. private PointerEventData m_pointerEvent;
  34. private Selectable m_excluded;
  35. private Selectable m_currentSelectable;
  36. private RaycastResult m_currentRaycastResult;
  37. private IPointerClickHandler m_clickHandler;
  38. private IDragHandler m_dragHandler;
  39. public override void InitManager()
  40. {
  41. base.InitManager();
  42. m_eventSystem = EventSystem.current;
  43. m_pointerEvent = new PointerEventData(m_eventSystem);
  44. m_pointerEvent.button = PointerEventData.InputButton.Left;
  45. InfraredCameraHelper.GetInstance().OnPositionUpdate += OnPositionUpdate;
  46. TacticalMode = PlayerPrefs.HasKey("TacticalMode") ? PlayerPrefs.GetInt("TacticalMode") == 1 : false;
  47. }
  48. private void OnDestroy()
  49. {
  50. InfraredCameraHelper.GetInstance().OnPositionUpdate -= OnPositionUpdate;
  51. }
  52. public bool IsSelectUIObject()
  53. {
  54. #if UNITY_EDITOR || UNITY_STANDALONE
  55. return EventSystem.current.IsPointerOverGameObject();
  56. #else
  57. return m_currentSelectable != null;
  58. #endif
  59. }
  60. private void OnPositionUpdate(Vector2 position, Vector2 cameraLocation)
  61. {
  62. screenPos = position;
  63. }
  64. private void UpdateSnipeCameraVisualAngle()
  65. {
  66. m_SnipeCamera.transform.LookAt(Camera.main.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, 50)));
  67. }
  68. void Update()
  69. {
  70. #if UNITY_EDITOR || UNITY_STANDALONE
  71. //screenPos = Input.mousePosition;
  72. #endif
  73. UpdateSnipeCameraVisualAngle();
  74. m_pointerEvent.position = screenPos;
  75. List<RaycastResult> raycastResults = new List<RaycastResult>();
  76. m_eventSystem.RaycastAll(m_pointerEvent, raycastResults);
  77. // Detect selectable
  78. if (raycastResults.Count > 0)
  79. {
  80. foreach (var result in raycastResults)
  81. {
  82. var newSelectable = result.gameObject.GetComponentInParent<Selectable>();
  83. if (newSelectable && newSelectable.interactable)
  84. {
  85. if (newSelectable != m_excluded && newSelectable != m_currentSelectable)
  86. {
  87. Select(newSelectable);
  88. m_currentRaycastResult = result;
  89. }
  90. break;
  91. }
  92. }
  93. }
  94. else
  95. {
  96. if (m_currentSelectable || m_excluded)
  97. {
  98. Select(null, null);
  99. }
  100. }
  101. if (Input.GetKeyDown(KeyCode.Space))
  102. {
  103. OnShooting(0);
  104. }
  105. }
  106. public void OnShooting(float speed)
  107. {
  108. if (m_currentSelectable)
  109. {
  110. if (m_clickHandler != null)
  111. {
  112. m_clickHandler.OnPointerClick(m_pointerEvent);
  113. Select(null, m_currentSelectable);
  114. }
  115. else if (m_dragHandler != null)
  116. {
  117. m_pointerEvent.pointerPressRaycast = m_currentRaycastResult;
  118. m_dragHandler.OnDrag(m_pointerEvent);
  119. }
  120. }
  121. }
  122. void Select(Selectable s, Selectable exclude = null)
  123. {
  124. m_excluded = exclude;
  125. if (m_currentSelectable)
  126. m_currentSelectable.OnPointerExit(m_pointerEvent);
  127. m_currentSelectable = s;
  128. if (m_currentSelectable)
  129. {
  130. m_currentSelectable.OnPointerEnter(m_pointerEvent);
  131. m_clickHandler = m_currentSelectable.GetComponent<IPointerClickHandler>();
  132. m_dragHandler = m_currentSelectable.GetComponent<IDragHandler>();
  133. }
  134. }
  135. }