using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; namespace RimWorldAnimationStudio { public class Tooltip : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { public string message = "Undefined"; public string executedCommand; public float delay = 0f; public Vector2 offset = new Vector2(5f, -15f); public bool flipX = false; private GameObject tooltip; private Text tooltipText; private bool isActive; private bool isDisplayed; private float activeTime = -1f; public void Start() { tooltip = Workspace.Instance.transform.Find("TooltipMessage")?.gameObject; tooltipText = tooltip?.GetComponentInChildren(); } public void Update() { if (tooltip == null || isActive == false || (activeTime + delay) > Time.unscaledTime) return; if (isDisplayed == false) { tooltip.GetComponent().pivot = flipX ? new Vector2(1, 1) : new Vector2(0, 1); tooltipText.text = message; if (executedCommand != null && executedCommand != "") { tooltipText.text += " (" + KeybindConfig.GetKeybindLabel(executedCommand) + ")"; } tooltip.transform.position = (Vector2)transform.position + offset; tooltip.gameObject.SetActive(true); LayoutRebuilder.ForceRebuildLayoutImmediate(tooltip.GetComponent()); isDisplayed = true; } } public void OnDisable() { if (isActive) { OnPointerExit(new PointerEventData(EventSystem.current)); } } public void OnPointerEnter(PointerEventData pointerEventData) { isActive = true; activeTime = Time.unscaledTime; } public void OnPointerExit(PointerEventData pointerEventData) { isActive = false; isDisplayed = false; tooltip.gameObject.SetActive(false); } public void CalculateLayoutInputHorizontal() { throw new NotImplementedException(); } public void CalculateLayoutInputVertical() { throw new NotImplementedException(); } } }