using System.Collections; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace UIWidgets { [RequireComponent(typeof(RectTransform))] [AddComponentMenu("UI/Tooltip", 300)] public class Tooltip : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, ISelectHandler, IDeselectHandler, IEventSystemHandler { [SerializeField] private GameObject tooltipObject; [SerializeField] private GameObject tooltipObjectNonVR; [SerializeField] private GameObject tooltipObjectVR; [SerializeField] public float ShowDelay = 0.3f; public Vector2 anchoredPosition; public Transform canvasTransform; public Transform tooltipObjectParent; public int maxVRTextSize = 22; public bool fixWidthScale; private IEnumerator currentCorutine; public GameObject TooltipObject { get { return tooltipObject; } set { tooltipObject = value; } } private void Start() { tooltipObjectParent = tooltipObject.transform.parent; tooltipObjectNonVR = tooltipObject; if (tooltipObjectVR != null && VRManager.IsVROn()) { TooltipObject = tooltipObjectVR; } else { TooltipObject = tooltipObject; } if (TooltipObject != null) { anchoredPosition = (TooltipObject.transform as RectTransform).anchoredPosition; if (maxVRTextSize > 0) { TooltipObject.GetComponentInChildren().resizeTextMaxSize = maxVRTextSize; } canvasTransform = Utilites.FindCanvas(tooltipObjectParent); TooltipObject.SetActive(false); tooltipObjectNonVR.SetActive(false); if (tooltipObjectVR != null) { tooltipObjectVR.SetActive(false); } } } private IEnumerator ShowCorutine() { yield return new WaitForSecondsRealtime(ShowDelay); if (canvasTransform != null) { (TooltipObject.transform as RectTransform).anchoredPosition = anchoredPosition; TooltipObject.transform.SetParent(canvasTransform); } TooltipObject.SetActive(true); if (fixWidthScale) { TooltipObject.transform.localScale = new Vector3(TooltipObject.transform.localScale.y, TooltipObject.transform.localScale.y, TooltipObject.transform.localScale.z); } } public void Show() { if (!(TooltipObject == null) && currentCorutine == null) { currentCorutine = ShowCorutine(); StartCoroutine(currentCorutine); } } private IEnumerator HideCoroutine() { if (currentCorutine != null) { StopCoroutine(currentCorutine); currentCorutine = null; } if (TooltipObject != null) { TooltipObject.SetActive(false); if ((bool)tooltipObjectNonVR) { tooltipObjectNonVR.SetActive(false); } if ((bool)tooltipObjectVR) { tooltipObjectVR.SetActive(false); } yield return null; if (canvasTransform != null) { TooltipObject.transform.SetParent(tooltipObjectParent); (TooltipObject.transform as RectTransform).anchoredPosition = anchoredPosition; } } } public void Hide() { StartCoroutine(HideCoroutine()); } public void QuickHide() { if (currentCorutine != null) { StopCoroutine(currentCorutine); } if (TooltipObject != null) { TooltipObject.SetActive(false); if ((bool)tooltipObjectNonVR) { tooltipObjectNonVR.SetActive(false); } if ((bool)tooltipObjectVR) { tooltipObjectVR.SetActive(false); } } } public void OnPointerEnter(PointerEventData eventData) { Show(); } public void OnPointerExit(PointerEventData eventData) { Hide(); } public void OnSelect(BaseEventData eventData) { Show(); } public void OnDeselect(BaseEventData eventData) { Hide(); } public void OnDisable() { QuickHide(); } } }