using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScrollTip { public static List m_Hints = new List(); public static List m_ActiveTips = new List(); 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()) { UIManager.Instance.OpenWindow(); } } public static ScrollTipDetail Request() { ScrollTipDetail tip = null; if (pool == null) { var _prefab = ResManager.Instance.LoadAsset("UIComp", "Tip");// UILoader.LoadPrefab("Tip"); pool = GameObjectPoolManager.Instance.RequestPool(_prefab); } if (pool != null) { tip = pool.Request().AddMissingComponent(); } 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 } }