| //-------------------------------------------------------- | 
| //    [Author]:           玩个游戏 | 
| //    [  Date ]:           Saturday, October 07, 2017 | 
| //-------------------------------------------------------- | 
|   | 
| using System; | 
| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
|   | 
| public class ScrollTipWin : UIBase | 
| { | 
|     [SerializeField] RectTransform content; | 
|     [SerializeField] RectTransform mask; | 
|   | 
|     [SerializeField, Header("显示条数")] | 
|     int tipDisplayCnt = 3; | 
|     [SerializeField, Header("每次滚动的距离")] | 
|     float m_TipDistance = 50.0f; | 
|     [SerializeField, Header("提示预制体高度")] | 
|     float m_TipHeight = 40.0f; | 
|     [SerializeField, Header("显示时间")] | 
|     float m_TipShowTime = 1.0f; | 
|     [SerializeField, Header("移动时间")] | 
|     float m_TipMoveTime = 0.2f; | 
|     [SerializeField, Header("隐藏时间")] | 
|     float m_TipHideTime = 0.5f; | 
|   | 
|     protected override void InitComponent() | 
|     { | 
|   | 
|     } | 
|   | 
|     protected override void OnClose() | 
|     { | 
|   | 
|     } | 
|   | 
|     protected override void OnOpen() | 
|     { | 
|   | 
|     } | 
|   | 
|     protected override void OnPreClose() | 
|     { | 
|         ScrollTip.OnTipReceiveEvent -= OnTipReceiveEvent; | 
|         ScrollTip.ReleaseAll(); | 
|     } | 
|   | 
|     protected override void OnPreOpen() | 
|     { | 
|         ScrollTip.tipMoveTime = m_TipMoveTime; | 
|         ScrollTip.OnTipReceiveEvent += OnTipReceiveEvent; | 
|         mask.sizeDelta = mask.sizeDelta.SetY(tipDisplayCnt * m_TipHeight + (tipDisplayCnt - 1) * (m_TipDistance - m_TipHeight) + 10); | 
|         for (int i = 0; i < ScrollTip.m_Hints.Count; i++) | 
|         { | 
|             OnTipReceiveEvent(); | 
|         } | 
|     } | 
|   | 
|     private void OnTipReceiveEvent() | 
|     { | 
|         if (ScrollTip.m_Hints.Count > 0 && IsCanAdd()) | 
|         { | 
|             if (ScrollTip.m_ActiveTips.Count >= tipDisplayCnt) | 
|             { | 
|                 ScrollTip.Release(ScrollTip.m_ActiveTips[0], false); | 
|             } | 
|             if (ScrollTip.m_ActiveTips.Count >= tipDisplayCnt) | 
|             { | 
|                 ScrollTip.tipMoveTime = Time.deltaTime; | 
|             } | 
|             else | 
|             { | 
|                 ScrollTip.tipMoveTime = m_TipMoveTime; | 
|             } | 
|             for (int i = 0; i < ScrollTip.m_ActiveTips.Count; i++) | 
|             { | 
|                 ScrollTip.m_ActiveTips[i].Play(ScrollTip.ScrollTipState.Move); | 
|             } | 
|             ScrollTipDetail tipDetail = ScrollTip.Request(); | 
|             if (tipDetail != null) | 
|             { | 
|                 tipDetail.SetTipConfig(m_TipShowTime, m_TipHideTime, m_TipDistance); | 
|                 ScrollTip.m_ActiveTips.Add(tipDetail); | 
|                 var rt = tipDetail.transform; | 
|                 rt.SetParent(content.parent); | 
|                 rt.localScale = Vector3.one; | 
|                 rt.localPosition = content.localPosition; | 
|                 var _hint = ScrollTip.m_Hints[0]; | 
|                 ScrollTip.m_Hints.RemoveAt(0); | 
|                 tipDetail.ShowTip(_hint); | 
|                 tipDetail.Play(ScrollTip.ScrollTipState.Idle); | 
|             } | 
|         } | 
|     } | 
|   | 
|     private bool IsCanAdd() | 
|     { | 
|         for (int i = 0; i < ScrollTip.m_ActiveTips.Count; i++) | 
|         { | 
|             if (ScrollTip.m_ActiveTips[i].presentState == ScrollTip.ScrollTipState.Move) | 
|             { | 
|                 return false; | 
|             } | 
|         } | 
|         return true; | 
|     } | 
| } |