diff --git a/Assets/FancyTextRendering/Scripts/Links/TextLinkHelper.cs b/Assets/FancyTextRendering/Scripts/Links/TextLinkHelper.cs index 63026cf..c1a53e6 100644 --- a/Assets/FancyTextRendering/Scripts/Links/TextLinkHelper.cs +++ b/Assets/FancyTextRendering/Scripts/Links/TextLinkHelper.cs @@ -1,4 +1,4 @@ -using JimmysUnityUtilities; +using JimmysUnityUtilities; using System; using TMPro; using UnityEngine; @@ -10,7 +10,7 @@ namespace LogicUI.FancyTextRendering /// Allows links in TextMeshPro text objects to be clicked on, and gives them custom colors when they are hovered or clicked. /// [RequireComponent(typeof(TMP_Text))] - public class TextLinkHelper : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler + public class TextLinkHelper : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler, IPointerMoveHandler { private TMP_Text _Text; public TMP_Text Text @@ -35,6 +35,7 @@ private void OnEnable() // I'm not sure why the frame delay is necessary, but it is. // I suspect that TMP changes the colors in LateUpdate or something + Dispatcher.EnsureInitialized(); CoroutineUtility.RunAfterOneFrame(SetAllLinksToNormalColor); } @@ -42,8 +43,7 @@ private void OnDisable() { HoverEnded(); } - - + [ColorUsage(showAlpha: false), SerializeField] Color32 LinkNormalColor = new Color32(29, 124, 234, 255); @@ -67,8 +67,7 @@ public void LinkDataUpdated() previouslyHoveredLinkIndex = -1; SetAllLinksToNormalColor(); } - - + public event Action OnLinkClicked; void IPointerClickHandler.OnPointerClick(PointerEventData eventData) @@ -80,9 +79,7 @@ void IPointerClickHandler.OnPointerClick(PointerEventData eventData) OnLinkClicked?.Invoke(link.GetLinkID()); } } - - - + void IPointerDownHandler.OnPointerDown(PointerEventData eventData) { PointerIsDown = true; @@ -93,7 +90,7 @@ void IPointerUpHandler.OnPointerUp(PointerEventData eventData) { PointerIsDown = false; SetLinkToColor(previouslyHoveredLinkIndex, LinkNormalColor); - previouslyHoveredLinkIndex = -1; // Reset the link hovered caching so that in Update() it's set back to the hovered color + previouslyHoveredLinkIndex = -1; // Reset the link hovered caching so that it's set back to the hovered color in the move event } void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) @@ -115,7 +112,8 @@ void IPointerExitHandler.OnPointerExit(PointerEventData eventData) bool CurrentlyHoveredOver; bool PointerIsDown; - void Update() + + public void OnPointerMove(PointerEventData eventData) { if (!CurrentlyHoveredOver) return; @@ -124,7 +122,7 @@ void Update() return; - int linkIndex = TMP_TextUtilities.FindIntersectingLink(Text, Input.mousePosition, cachedCamera); + int linkIndex = TMP_TextUtilities.FindIntersectingLink(Text, eventData.position, cachedCamera); if (linkIndex < 0) HoverEnded(); else @@ -204,4 +202,4 @@ private void SetLinkToColor(int linkIndex, Color32 color) Text.UpdateVertexData(TMP_VertexDataUpdateFlags.All); } } -} \ No newline at end of file +}