using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; [RequireComponent(typeof(FactWrapper))] public class OpenFactExplorer : MonoBehaviour, IPointerClickHandler { #region Variables public GameObject factExplorerPrefab; private static Transform factExplorer; private float pressTime = 0f; private const float LONG_PRESS_DURATION = 0.5f; #endregion Variables #region UnityMethods public void OnPointerClick(PointerEventData eventData) { // open FactExplorer on right click on PC if (eventData.button == PointerEventData.InputButton.Right) { DoOpenFactExplorer(); } } private void Update() { // open FactExplorer on press on fact longer than LONG_PRESS_DURATION HandleTouches(); } #endregion UnityMethods #region Implementation private void HandleTouches() { if (Input.touchCount != 1 || transform.GetComponent<DragHandling>().dragged) { pressTime = 0; return; } var touch = Input.GetTouch(0); if (!RectTransformUtility.RectangleContainsScreenPoint(transform.GetComponent<RectTransform>(), touch.position)) { pressTime = 0; return; } switch (touch.phase) { case TouchPhase.Moved: case TouchPhase.Began: case TouchPhase.Ended: case TouchPhase.Canceled: pressTime = 0; break; case TouchPhase.Stationary: pressTime += Time.deltaTime; if (pressTime >= LONG_PRESS_DURATION) DoOpenFactExplorer(); break; } } private void DoOpenFactExplorer() { Destroy(factExplorer != null ? factExplorer.gameObject : null); var parent = transform.GetComponentInParent<Canvas>().transform; var fact = transform.GetComponent<FactWrapper>().fact; factExplorer = Instantiate(factExplorerPrefab.transform, Input.mousePosition, Quaternion.identity, parent); factExplorer.GetComponent<FactExplorer>().Initialize(fact, transform.position); } #endregion Implementation }