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 
 | 
    } 
 | 
} 
 |