| 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 (!UIManager.Instance.IsOpened<ScrollTipWin>()) | 
|             { | 
|                 UIManager.Instance.OpenWindow<ScrollTipWin>(); | 
|             } | 
|         } | 
|   | 
|         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(); | 
|         } | 
|   | 
|         public enum ScrollTipState | 
|         { | 
|             None, | 
|             Idle, | 
|             Move, | 
|             Hide | 
|         } | 
|     } |