Tanoda
TooltipTrigger.cs
Go to the documentation of this file.
1using System.Collections;
5
7{
8 [RequireComponent(typeof(RectTransform))]
9 [AddComponentMenu("UI/Extensions/Tooltip/Tooltip Trigger")]
10 public class TooltipTrigger : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, ISelectHandler, IDeselectHandler
11 {
12 [TextAreaAttribute]
13 public string text;
14
16 mousePosition,
17 mousePositionAndFollow,
18 transformPosition
19 }
20
21 [Tooltip("Defines where the tooltip will be placed and how that placement will occur. Transform position will always be used if this element wasn't selected via mouse")]
23
27 private bool isChildOfOverlayCanvas = false;
28
29 private bool hovered = false;
30
31 public Vector3 offset;
32
33
34 void Start() {
35 //attempt to check if our canvas is overlay or not and check our "is overlay" accordingly
36 Canvas ourCanvas = GetComponentInParent<Canvas>();
37 if (ourCanvas && ourCanvas.renderMode == RenderMode.ScreenSpaceOverlay) {
38 isChildOfOverlayCanvas = true;
39 }
40 }
41
46 {
47 get
48 {
49 return (isChildOfOverlayCanvas && ToolTip.Instance.guiMode == RenderMode.ScreenSpaceCamera) ||
50 (!isChildOfOverlayCanvas && ToolTip.Instance.guiMode == RenderMode.ScreenSpaceOverlay);
51 }
52 }
53
54 public void OnPointerEnter(PointerEventData eventData)
55 {
56 switch (tooltipPositioningType) {
57 case TooltipPositioningType.mousePosition:
58 StartHover(Input.mousePosition + offset, true);
59 break;
60 case TooltipPositioningType.mousePositionAndFollow:
61 StartHover(Input.mousePosition + offset, true);
62 hovered = true;
63 StartCoroutine(HoveredMouseFollowingLoop());
64 break;
65 case TooltipPositioningType.transformPosition:
66 StartHover((WorldToScreenIsRequired ?
67 ToolTip.Instance.GuiCamera.WorldToScreenPoint(transform.position) :
68 transform.position) + offset, true);
69 break;
70 }
71 }
72
73 IEnumerator HoveredMouseFollowingLoop() {
74 while (hovered) {
75 StartHover(Input.mousePosition + offset);
76 yield return null;
77 }
78 }
79
80 public void OnSelect(BaseEventData eventData)
81 {
82 StartHover((WorldToScreenIsRequired ?
83 ToolTip.Instance.GuiCamera.WorldToScreenPoint(transform.position) :
84 transform.position) + offset, true);
85 }
86
87 public void OnPointerExit(PointerEventData eventData)
88 {
89 StopHover();
90 }
91
92 public void OnDeselect(BaseEventData eventData)
93 {
94 StopHover();
95 }
96
97 void StartHover(Vector3 position, bool shouldCanvasUpdate = false)
98 {
99 ToolTip.Instance.SetTooltip(text, position, shouldCanvasUpdate);
100 }
101
102 void StopHover()
103 {
104 hovered = false;
105 ToolTip.Instance.HideTooltip();
106 }
107 }
108}
void SetTooltip(string ttext, Vector3 basePos, bool refreshCanvasesBeforeGetSize=false)
Definition: ToolTip.cs:125
void OnPointerEnter(PointerEventData eventData)
void OnDeselect(BaseEventData eventData)
TooltipPositioningType tooltipPositioningType
bool WorldToScreenIsRequired
Checks if the tooltip and the transform this trigger is attached to are children of differently-space...
void OnSelect(BaseEventData eventData)
void OnPointerExit(PointerEventData eventData)
Credit Erdener Gonenc - @PixelEnvision.