//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, November 25, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class TrumpetWin : Window { [SerializeField] RichText m_VipTxt; [SerializeField] RichText m_PlayerNameTxt; [SerializeField] RichText m_TipTxt; [SerializeField] TweenCurve m_TweenCurve; [SerializeField] RectTransform m_TipShadeRect; [SerializeField] RectTransform m_Container; [SerializeField, Header("显示时间")] float m_ShowTime = 3.0f; [SerializeField, Header("最小显示时间")] float m_ShowTimeMin = 5.0f; [SerializeField, Header("当排队人数高于该值,用最小时间算")] int m_People = 1; [SerializeField, Header("移动速度")] float m_TweenSpeed = 1.0f; [SerializeField, Header("延迟时间")] float m_Delay = 1.0f; [SerializeField, Header("Vip到名字的距离")] float m_VipToName = 0.0f; [SerializeField, Header("名字到内容的距离")] float m_NameToTip = 0.0f; private float m_Time = 0; private float m_DelayTime = 0; private float m_TweenTime = 0; private float m_TweenTotalTime = 0; private float m_CurveLength = 0; private Vector3 m_TweenFrom = Vector3.zero; private Vector3 m_TweenTo = Vector3.zero; private bool m_TweenPrepare = false; #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { m_TweenSpeed = m_TweenSpeed <= 0 ? 1 : m_TweenSpeed; m_CurveLength = m_TweenCurve.keys[m_TweenCurve.keys.Length - 1].time - m_TweenCurve.keys[0].time; } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { m_Time = 0; } protected override void OnActived() { base.OnActived(); m_Time = 0; ShowTrumpet(); } protected override void LateUpdate() { base.LateUpdate(); m_Time += Time.deltaTime; if (m_Time > (ServerTipDetails.GetTrumpetSurplusCnt() >= m_People ? m_ShowTimeMin : m_ShowTime)) { ShowTrumpet(); } m_DelayTime += Time.deltaTime; if (m_DelayTime < m_Delay) { return; } if (!m_TweenPrepare) { return; } m_TweenTime += Time.deltaTime; if (m_TweenTime > m_TweenTotalTime) { m_DelayTime = 0; m_TweenTime = 0; m_TipTxt.rectTransform.localPosition = m_TweenFrom; return; } var t = Mathf.Repeat((m_TweenTime / m_TweenTotalTime) * m_CurveLength, 1); m_TipTxt.rectTransform.localPosition = Vector3.LerpUnclamped(m_TweenFrom, m_TweenTo, m_TweenCurve.Evaluate(t)); } #endregion void ShowTrumpet() { ChatTrumpetData data = ServerTipDetails.RequireTrumpetTip(); m_TweenPrepare = false; if (data != null) { var _delta = m_Container.rect.width / 2; m_Time = 0; m_VipTxt.text = data.vipLv > 0 ? StringUtility.Contact("V", data.vipLv) : string.Empty; m_VipTxt.rectTransform.localPosition = new Vector3(-_delta, 0, 0); m_PlayerNameTxt.text = StringUtility.Contact("[", data.name, "]"); m_PlayerNameTxt.rectTransform.localPosition = new Vector3(m_VipTxt.preferredWidth + m_VipToName-_delta, 0, 0); var _sizeDelta = m_TipShadeRect.sizeDelta; var _width= m_VipTxt.preferredWidth + m_VipToName + m_PlayerNameTxt.preferredWidth + m_NameToTip; _sizeDelta.x = m_Container.rect.width - _width; m_TipShadeRect.sizeDelta = _sizeDelta; m_TipShadeRect.localPosition = new Vector3(_width - _delta, 0, 0); m_TipTxt.SetExtenalData(data.infoList); m_TipTxt.text = data.content; m_TipTxt.rectTransform.localPosition = Vector3.zero; if (m_TipTxt.preferredWidth > m_TipShadeRect.rect.width) { m_TweenFrom = Vector3.zero; m_TweenTo = new Vector3(-m_TipTxt.preferredWidth - m_TipTxt.fontSize, 0, 0); m_TweenTime = 0; m_DelayTime = 0; m_TweenTotalTime = m_TipTxt.preferredWidth / (m_TweenSpeed * 100); m_TweenPrepare = true; } } else { CloseImmediately(); } } } }