using System.Linq;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace AibisDream.Framework
{
///
/// EventTrigger扩展
///
[RequireComponent(typeof(Collider2D))]
public class EventTriggerEx : EventTrigger
{
///
/// 注册事件
///
/// 事件类型
/// 函数
public void Register(EventTriggerType triggerType, UnityAction action)
{
if (TryGetTriggerEvent(triggerType, out var triggerEvent))
{
triggerEvent.AddListener(action);
}
else
{
Debug.LogWarning($"{triggerType.ToString()}未添加");
}
}
///
/// 卸载事件
///
/// 事件类型
/// 函数
public void UnRegister(EventTriggerType triggerType, UnityAction action)
{
if (TryGetTriggerEvent(triggerType, out var triggerEvent))
{
triggerEvent.RemoveListener(action);
}
else
{
Debug.LogWarning($"{triggerType.ToString()}未添加");
}
}
///
/// 获取触发事件
///
/// 事件类型
/// 事件
/// 是否存在
private bool TryGetTriggerEvent(EventTriggerType triggerType, out TriggerEvent triggerEvent)
{
var entry = triggers.FirstOrDefault(item => item.eventID == triggerType);
if (entry == null)
{
triggerEvent = null;
return false;
}
else
{
triggerEvent = entry.callback;
return true;
}
}
public override void OnPointerEnter(PointerEventData data)
{
EventSystemEx.Instance.OnPointerEnter(gameObject);
base.OnPointerEnter(data);
}
public override void OnPointerExit(PointerEventData data)
{
EventSystemEx.Instance.OnPointerExit(gameObject);
base.OnPointerExit(data);
}
public override void OnPointerDown(PointerEventData eventData)
{
}
}
}