using System.Collections.Generic; using AibisDream.Kit; using UnityEngine; namespace AibisDream.Framework { public class EventSystemEx : Singleton { #region 状态 public bool isLocked; #endregion private List pointerOverObjList; private List draggingObjList; private List holdingObjList; #region 事件触发中转 public void OnPointerEnter(IInteraction interaction) { if (!pointerOverObjList.Contains(interaction.GetGameObject())) { pointerOverObjList.Add(interaction.GetGameObject()); } } public void OnPointerExit(IInteraction interaction) { pointerOverObjList.Remove(interaction.GetGameObject()); } public void OnPointerDown(IInteraction interaction) { if (!holdingObjList.Contains(interaction.GetGameObject())) { holdingObjList.Add(interaction.GetGameObject()); } } public void OnPointerUp(IInteraction interaction) { holdingObjList.Remove(interaction.GetGameObject()); } public void OnDrag(IInteraction interaction) { if (!draggingObjList.Contains(interaction.GetGameObject())) { draggingObjList.Add(interaction.GetGameObject()); } } public void OnEndDrag(IInteraction interaction) { draggingObjList.Remove(interaction.GetGameObject()); } public void OnBeginDrag(IInteraction interaction) { if (!draggingObjList.Contains(interaction.GetGameObject())) { draggingObjList.Add(interaction.GetGameObject()); } } public TriggerEnum GetPointerState() { if (holdingObjList.Count > 0 || draggingObjList.Count > 0) { Debug.Log($"Dragging: {draggingObjList.Count}"); Debug.Log($"Holding: {holdingObjList.Count}"); return TriggerEnum.Dragging; } else if (pointerOverObjList.Count > 0) { Debug.Log($"PointerOver: {pointerOverObjList.Count}"); return TriggerEnum.PointerOver; } else { return TriggerEnum.None; } } #endregion #region 单例必须的代码 public override void OnSingletonInit() { pointerOverObjList = new List(); draggingObjList = new List(); holdingObjList = new List(); EnumEventSystem.Global.Register(GameLoopEnum.GameStart, ClearAll); EnumEventSystem.Global.Register(GameLoopEnum.GameQuit, ClearAll); } private void ClearAll() { pointerOverObjList.Clear(); draggingObjList.Clear(); holdingObjList.Clear(); } public override void OnSingletonDestroy() { EnumEventSystem.Global.UnRegister(GameLoopEnum.GameStart, ClearAll); EnumEventSystem.Global.UnRegister(GameLoopEnum.GameQuit, ClearAll); } #endregion } public enum TriggerEnum { None, Dragging, PointerOver } }