//--------------------------------------------------------
|
// [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();
|
}
|
}
|
}
|
|
}
|