VirtualMouse.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. #if UNITY_ANDROID
  46. InfraredCameraHelper.GetInstance().OnPositionUpdate += OnPositionUpdate;
  47. #endif
  48. TacticalMode = PlayerPrefs.HasKey("TacticalMode") ? PlayerPrefs.GetInt("TacticalMode") == 1 : false;
  49. }
  50. private void OnDestroy()
  51. {
  52. InfraredCameraHelper.GetInstance().OnPositionUpdate -= OnPositionUpdate;
  53. }
  54. public bool IsSelectUIObject()
  55. {
  56. #if UNITY_EDITOR || UNITY_STANDALONE
  57. return EventSystem.current.IsPointerOverGameObject();
  58. #else
  59. return m_currentSelectable != null;
  60. #endif
  61. }
  62. private void OnPositionUpdate(Vector2 position, Vector2 cameraLocation)
  63. {
  64. screenPos = position;
  65. }
  66. private void UpdateSnipeCameraVisualAngle()
  67. {
  68. m_SnipeCamera.transform.LookAt(Camera.main.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, 50)));
  69. }
  70. void Update()
  71. {
  72. #if UNITY_EDITOR || UNITY_STANDALONE
  73. //screenPos = Input.mousePosition;
  74. #endif
  75. UpdateSnipeCameraVisualAngle();
  76. m_pointerEvent.position = screenPos;
  77. List<RaycastResult> raycastResults = new List<RaycastResult>();
  78. m_eventSystem.RaycastAll(m_pointerEvent, raycastResults);
  79. // Detect selectable
  80. if (raycastResults.Count > 0)
  81. {
  82. foreach (var result in raycastResults)
  83. {
  84. var newSelectable = result.gameObject.GetComponentInParent<Selectable>();
  85. if (newSelectable && newSelectable.interactable)
  86. {
  87. if (newSelectable != m_excluded && newSelectable != m_currentSelectable)
  88. {
  89. Select(newSelectable);
  90. m_currentRaycastResult = result;
  91. }
  92. break;
  93. }
  94. }
  95. }
  96. else
  97. {
  98. if (m_currentSelectable || m_excluded)
  99. {
  100. Select(null, null);
  101. }
  102. }
  103. if (Input.GetKeyDown(KeyCode.Space))
  104. {
  105. OnShooting(0);
  106. }
  107. }
  108. public void OnShooting(float speed)
  109. {
  110. if (m_currentSelectable)
  111. {
  112. if (m_clickHandler != null)
  113. {
  114. m_clickHandler.OnPointerClick(m_pointerEvent);
  115. Select(null, m_currentSelectable);
  116. }
  117. else if (m_dragHandler != null)
  118. {
  119. m_pointerEvent.pointerPressRaycast = m_currentRaycastResult;
  120. m_dragHandler.OnDrag(m_pointerEvent);
  121. }
  122. }
  123. }
  124. void Select(Selectable s, Selectable exclude = null)
  125. {
  126. m_excluded = exclude;
  127. if (m_currentSelectable)
  128. m_currentSelectable.OnPointerExit(m_pointerEvent);
  129. m_currentSelectable = s;
  130. if (m_currentSelectable)
  131. {
  132. m_currentSelectable.OnPointerEnter(m_pointerEvent);
  133. m_clickHandler = m_currentSelectable.GetComponent<IPointerClickHandler>();
  134. m_dragHandler = m_currentSelectable.GetComponent<IDragHandler>();
  135. }
  136. }
  137. }