179 lines
3.7 KiB
C#
179 lines
3.7 KiB
C#
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<Text>().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();
|
|
}
|
|
}
|
|
}
|