using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
namespace UIWidgets {
///
/// Tooltip.
/// http://ilih.ru/images/unity-assets/UIWidgets/Tooltip.png
///
[AddComponentMenu("UI/UIWidgets/Tooltip")]
[RequireComponent(typeof(RectTransform))]
public class Tooltip : MonoBehaviour,
IPointerEnterHandler,
IPointerExitHandler,
ISelectHandler,
IDeselectHandler
{
[SerializeField]
GameObject tooltipObject;
///
/// Seconds before tooltip shown after pointer enter.
///
[SerializeField]
public float ShowDelay = 0.3f;
///
/// The tooltip object.
///
public GameObject TooltipObject {
get {
return tooltipObject;
}
set {
tooltipObject = value;
if (tooltipObject!=null)
{
tooltipObjectParent = tooltipObject.transform.parent;
}
}
}
Vector2 anchoredPosition;
Transform canvasTransform;
Transform tooltipObjectParent;
void Start()
{
TooltipObject = tooltipObject;
if (TooltipObject!=null)
{
canvasTransform = Utilites.FindTopmostCanvas(tooltipObjectParent);
TooltipObject.SetActive(false);
}
}
IEnumerator currentCorutine;
IEnumerator ShowCorutine()
{
yield return new WaitForSeconds(ShowDelay);
if (canvasTransform!=null)
{
anchoredPosition = (TooltipObject.transform as RectTransform).anchoredPosition;
tooltipObjectParent = tooltipObject.transform.parent;
TooltipObject.transform.SetParent(canvasTransform);
}
TooltipObject.SetActive(true);
}
///
/// Show this tooltip.
///
public void Show()
{
if (TooltipObject==null)
{
return ;
}
currentCorutine = ShowCorutine();
StartCoroutine(currentCorutine);
}
IEnumerator HideCoroutine()
{
if (currentCorutine!=null)
{
StopCoroutine(currentCorutine);
}
if (TooltipObject!=null)
{
TooltipObject.SetActive(false);
yield return null;
if (canvasTransform!=null)
{
TooltipObject.transform.SetParent(tooltipObjectParent);
(TooltipObject.transform as RectTransform).anchoredPosition = anchoredPosition;
}
}
}
///
/// Hide this tooltip.
///
public void Hide()
{
StartCoroutine(HideCoroutine());
}
///
/// Raises the pointer enter event.
///
/// Current event data.
public void OnPointerEnter(PointerEventData eventData)
{
Show();
}
///
/// Raises the pointer exit event.
///
/// Current event data.
public void OnPointerExit(PointerEventData eventData)
{
Hide();
}
///
/// Raises the select event.
///
/// Current event data.
public void OnSelect(BaseEventData eventData)
{
Show();
}
///
/// Raises the deselect event.
///
/// Current event data.
public void OnDeselect(BaseEventData eventData)
{
Hide();
}
#if UNITY_EDITOR
void CreateTooltipObject()
{
TooltipObject = Utilites.CreateWidgetFromAsset("Tooltip");
TooltipObject.transform.SetParent(transform);
var tooltipRectTransform = TooltipObject.transform as RectTransform;
tooltipRectTransform.anchorMin = new Vector2(1, 1);
tooltipRectTransform.anchorMax = new Vector2(1, 1);
tooltipRectTransform.pivot = new Vector2(1, 0);
tooltipRectTransform.anchoredPosition = new Vector2(0, 0);
}
///
/// Reset this instance.
///
protected void Reset()
{
if (TooltipObject==null)
{
CreateTooltipObject();
}
}
#endif
}
}