| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- using InfraredManager;
- using ProjectBase.Event;
- using ShotSimulator.Event;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.EventSystems;
- using UnityEngine.UI;
- public enum CursorType
- {
- UICursor,
- DefaultCursor,
- SnipeCursor
- }
- public class VirtualMouse : MonoSingleton<VirtualMouse>
- {
- public Vector2 screenPos = new Vector2();
- private bool m_TacticalMode;
- public bool TacticalMode
- {
- get
- {
- return m_TacticalMode;
- }
- set
- {
- m_TacticalMode = value;
- PlayerPrefs.SetInt("TacticalMode", m_TacticalMode ? 1 : 0);
- }
- }
- public Camera m_SnipeCamera;
- private EventSystem m_eventSystem;
- private PointerEventData m_pointerEvent;
- private Selectable m_excluded;
- private Selectable m_currentSelectable;
- private RaycastResult m_currentRaycastResult;
- private IPointerClickHandler m_clickHandler;
- private IDragHandler m_dragHandler;
- public override void InitManager()
- {
- base.InitManager();
- m_eventSystem = EventSystem.current;
- m_pointerEvent = new PointerEventData(m_eventSystem);
- m_pointerEvent.button = PointerEventData.InputButton.Left;
- #if UNITY_ANDROID
- InfraredCameraHelper.GetInstance().OnPositionUpdate += OnPositionUpdate;
- #endif
- TacticalMode = PlayerPrefs.HasKey("TacticalMode") ? PlayerPrefs.GetInt("TacticalMode") == 1 : false;
- }
- private void OnDestroy()
- {
- InfraredCameraHelper.GetInstance().OnPositionUpdate -= OnPositionUpdate;
- }
- public bool IsSelectUIObject()
- {
- #if UNITY_EDITOR || UNITY_STANDALONE
- return EventSystem.current.IsPointerOverGameObject();
- #else
- return m_currentSelectable != null;
- #endif
- }
- private void OnPositionUpdate(Vector2 position, Vector2 cameraLocation)
- {
- screenPos = position;
- }
- private void UpdateSnipeCameraVisualAngle()
- {
- m_SnipeCamera.transform.LookAt(Camera.main.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, 50)));
- }
- void Update()
- {
- #if UNITY_EDITOR || UNITY_STANDALONE
- //screenPos = Input.mousePosition;
- #endif
- UpdateSnipeCameraVisualAngle();
- m_pointerEvent.position = screenPos;
- List<RaycastResult> raycastResults = new List<RaycastResult>();
- m_eventSystem.RaycastAll(m_pointerEvent, raycastResults);
- // Detect selectable
- if (raycastResults.Count > 0)
- {
- foreach (var result in raycastResults)
- {
- var newSelectable = result.gameObject.GetComponentInParent<Selectable>();
- if (newSelectable && newSelectable.interactable)
- {
- if (newSelectable != m_excluded && newSelectable != m_currentSelectable)
- {
- Select(newSelectable);
- m_currentRaycastResult = result;
- }
- break;
- }
- }
- }
- else
- {
- if (m_currentSelectable || m_excluded)
- {
- Select(null, null);
- }
- }
- if (Input.GetKeyDown(KeyCode.Space))
- {
- OnShooting(0);
- }
- }
- public void OnShooting(float speed)
- {
- if (m_currentSelectable)
- {
- if (m_clickHandler != null)
- {
- m_clickHandler.OnPointerClick(m_pointerEvent);
- Select(null, m_currentSelectable);
- }
- else if (m_dragHandler != null)
- {
- m_pointerEvent.pointerPressRaycast = m_currentRaycastResult;
- m_dragHandler.OnDrag(m_pointerEvent);
- }
- }
- }
- void Select(Selectable s, Selectable exclude = null)
- {
- m_excluded = exclude;
- if (m_currentSelectable)
- m_currentSelectable.OnPointerExit(m_pointerEvent);
- m_currentSelectable = s;
- if (m_currentSelectable)
- {
- m_currentSelectable.OnPointerEnter(m_pointerEvent);
- m_clickHandler = m_currentSelectable.GetComponent<IPointerClickHandler>();
- m_dragHandler = m_currentSelectable.GetComponent<IDragHandler>();
- }
- }
- }
|