| using System; | 
| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| public class ScrollTip | 
| { | 
|     public static List<SystemHintData> m_Hints = new List<SystemHintData>(); | 
|     public static List<ScrollTipDetail> m_ActiveTips = new List<ScrollTipDetail>(); | 
|   | 
|     private static GameObjectPoolManager.GameObjectPool pool = null; | 
|   | 
|     private static bool inited = false; | 
|   | 
|     public static float tipMoveTime = 0.2f; | 
|   | 
|     public static event Action OnTipReceiveEvent; | 
|   | 
|      | 
|     public static void ShowTip(string tip, ArrayList infoList = null, int _order = 0) | 
|     { | 
|         int range = Math.Min(m_Hints.Count, 10); | 
|         int findCnt = 0; | 
|         for (int i = 1; i <= range; i++) | 
|         { | 
|             if (m_Hints[m_Hints.Count - i].message == tip) | 
|             { | 
|                 findCnt++; | 
|                 if (findCnt == 3) | 
|                 { | 
|                     //列表内重复提示最多3次 | 
|                     return; | 
|                 } | 
|             } | 
|         } | 
|   | 
|         m_Hints.Add(new SystemHintData() | 
|         { | 
|             message = tip, | 
|             extentionData = infoList == null ? infoList : new ArrayList(infoList), | 
|             appendTime = DateTime.Now, | 
|             order = _order | 
|         }); | 
|   | 
|         //m_Hints.Sort(SysNotifyMgr.Instance.Compare); | 
|   | 
|         if (OnTipReceiveEvent != null) | 
|         { | 
|             OnTipReceiveEvent(); | 
|         } | 
|         //过滤不播放的情况 | 
|         if (!CanOpen()) | 
|         { | 
|             m_Hints.Clear(); | 
|             return; | 
|         } | 
|   | 
|         if (!UIManager.Instance.IsOpened<ScrollTipWin>()) | 
|         { | 
|             UIManager.Instance.OpenWindow<ScrollTipWin>(); | 
|         } | 
|     } | 
|   | 
|     static bool CanOpen() | 
|     { | 
|   | 
|         // if (HappyXBModel.Instance.isXBCoolTime) | 
|         //     return false; | 
|         return true; | 
|     } | 
|   | 
|     public static ScrollTipDetail Request() | 
|     { | 
|         ScrollTipDetail tip = null; | 
|         if (pool == null) | 
|         { | 
|             var _prefab = UILoader.LoadPrefab("Tip"); | 
|             pool = GameObjectPoolManager.Instance.RequestPool(_prefab); | 
|         } | 
|         if (pool != null) | 
|         { | 
|             tip = pool.Request().AddMissingComponent<ScrollTipDetail>(); | 
|         } | 
|         return tip; | 
|     } | 
|   | 
|     public static void Release(ScrollTipDetail tip, bool next = true) | 
|     { | 
|         if (m_ActiveTips.Contains(tip)) | 
|         { | 
|             tip.presentState = ScrollTipState.None; | 
|             m_ActiveTips.Remove(tip); | 
|         } | 
|         if (tip.gameObject != null && pool != null) | 
|         { | 
|             pool.Release(tip.gameObject); | 
|         } | 
|         if (m_ActiveTips.Count > 0 && next) | 
|         { | 
|             m_ActiveTips[0].Play(ScrollTipState.Hide); | 
|         } | 
|     } | 
|   | 
|     public static void ReleaseAll() | 
|     { | 
|         for (int i = 0; i < m_ActiveTips.Count; i++) | 
|         { | 
|             Release(m_ActiveTips[i]); | 
|             i--; | 
|         } | 
|     } | 
|   | 
|     public static void OnTipComplete() | 
|     { | 
|         if (OnTipReceiveEvent != null) OnTipReceiveEvent(); | 
|     } | 
|   | 
|     public static void Close() | 
|     { | 
|         m_Hints.Clear(); | 
|     } | 
|   | 
|     //暂时保留 改用dotween | 
|     public enum ScrollTipState | 
|     { | 
|         None, | 
|         Idle, | 
|         Move, | 
|         Hide | 
|     } | 
| } |