TH1/Unity/Assets/Scripts/TH1_UI/HintUI/HintTrigger.cs
2025-08-26 19:29:25 +08:00

74 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using TH1_Core.Events;
using TH1_Core.Managers;
using UI.HintUI;
using UnityEngine;
using UnityEngine.EventSystems;
namespace TH1_UI.HintUI
{
/// <summary>
/// 悬浮提示的触发器。
/// 此组件内部包含一个可配置的数据提供者(DataProvider),用于生成提示内容。
/// </summary>
[RequireComponent(typeof(RectTransform))]
public class HintTrigger : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
[Tooltip("提示窗口相对于鼠标位置的偏移量。")]
[SerializeField]
private Vector2 positionOffset = new Vector2(15f, -15f);
[SerializeField]
[Tooltip("hinttext数据来源")]
public HintDataProvider DataProvider;
#region --- Unity UI Event System Callbacks ---
public void OnPointerEnter(PointerEventData eventData)
{
// 检查数据提供者是否已配置
if (DataProvider == null)
{
return;
}
// 如果提供者有效,但它生成了空内容,也不显示
// (这一步也可以移到HintUI里做但在这里提前判断可以避免无效的事件发布)
if (string.IsNullOrEmpty(DataProvider.GetHintText()))
{
return;
}
// 创建并填充请求显示提示的事件
ShowHintEvent showHintEvent = new ShowHintEvent
{
DataProvider = this.DataProvider,
Position = (Vector2)eventData.position + this.positionOffset
};
// 通过事件管理器发布事件,通知系统显示提示
EventManager.Publish(showHintEvent);
}
public void OnPointerExit(PointerEventData eventData)
{
// 发布隐藏提示的事件
EventManager.Publish(new HideHintEvent());
}
private void OnDisable()
{
// 检查DataProvider是否存在以避免在编辑器中或销毁过程中产生不必要的事件或错误。
if (DataProvider == null)
{
return;
}
// 发布一个事件,通知系统“我被禁用了”
// 并把自己的身份信息DataProvider一起发出去
EventManager.Publish(new HintTriggerDisabledEvent { DataProvider = this.DataProvider });
}
#endregion
}
}