using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using CJ.Wait;
|
using System;
|
using TableConfig;
|
using System.Text.RegularExpressions;
|
using DG.Tweening;
|
namespace Snxxz.UI
|
{
|
public class MessageWin : Window
|
{
|
private static MessageWin _inst = null;
|
public static MessageWin Inst
|
{
|
get
|
{
|
if (_inst == null)
|
{
|
_inst = WindowCenter.Instance.Open<MessageWin>(true);
|
}
|
return _inst;
|
}
|
}
|
[SerializeField] RectTransform m_ContianerFixedTip0;
|
[SerializeField] RichText m_FixedTip0;
|
|
[SerializeField] List<RectTransform> m_ContianerFixedTips;
|
[SerializeField] List<RichText> m_FixedTips;
|
List<bool> m_FixedTipDisplays = new List<bool>();
|
|
#region GM
|
[SerializeField] GameObject gmPanel;
|
[SerializeField] ScrollerController gmCtrl;
|
[SerializeField] Toggle gmToggle;
|
[SerializeField] Toggle gmUpdateToggle;
|
[SerializeField] Button gmClose;
|
#endregion
|
|
public void ShowFixedTip(string tip, ArrayList infoList = null)
|
{
|
m_FixedTip0.SetExtenalData(infoList);
|
m_FixedTip0.text = tip;
|
if (!m_ContianerFixedTip0.gameObject.activeInHierarchy)
|
{
|
m_ContianerFixedTip0.gameObject.SetActive(true);
|
}
|
m_ContianerFixedTip0.DoWaitRestart();
|
}
|
|
public void ShowFixedTips(string tip, ArrayList infoList = null)
|
{
|
var _index = m_FixedTipDisplays.FindIndex((x) =>
|
{
|
return !x;
|
});
|
_index = _index == -1 ? 0 : _index;
|
m_FixedTips[_index].SetExtenalData(infoList);
|
m_FixedTips[_index].text = tip;
|
m_FixedTipDisplays[_index] = true;
|
if (!m_ContianerFixedTips[_index].gameObject.activeInHierarchy)
|
{
|
m_ContianerFixedTips[_index].gameObject.SetActive(true);
|
}
|
m_ContianerFixedTips[_index].DoWaitRestart();
|
}
|
|
private void OnHideFixedTip(Component com)
|
{
|
com.DoWaitStop();
|
com.gameObject.SetActive(false);
|
|
var _index = m_ContianerFixedTips.FindIndex((x) =>
|
{
|
return x.Equals(com);
|
});
|
if (_index != -1)
|
{
|
m_FixedTipDisplays[_index] = false;
|
}
|
}
|
|
[SerializeField] RectTransform m_ContainerServerTip;
|
[SerializeField] ScaleTween m_ServerTipScaleTween;
|
[SerializeField] PositionTween m_ServerTipPositionTween;
|
[SerializeField] RichText m_ServerTip;
|
[SerializeField, Header("全服广播停留时间")] float m_ServerTipKeepTime = 1.5f;
|
|
private bool serverTipPrepared = true;
|
public void ShowServerTip()
|
{
|
if (!serverTipPrepared)
|
{
|
return;
|
}
|
var _hint = ServerTipDetails.RequireServerTip();
|
if (_hint != null)
|
{
|
serverTipPrepared = false;
|
m_ServerTipScaleTween.SetStartState();
|
m_ServerTipPositionTween.SetStartState();
|
m_ContainerServerTip.gameObject.SetActive(true);
|
m_ServerTip.SetExtenalData(_hint.extentionData);
|
m_ServerTip.text = _hint.message;
|
m_ServerTipScaleTween.Play();
|
TimeMgr.Instance.Register(m_ServerTip, ServerTipStartHide, m_ServerTipKeepTime + m_ServerTipScaleTween.duration);
|
}
|
else
|
{
|
DisableServerTip();
|
}
|
}
|
private void ServerTipStartHide(Component comp)
|
{
|
m_ServerTipPositionTween.Play();
|
TimeMgr.Instance.Register(m_ServerTipPositionTween, ServerTipTweenComplete, m_ServerTipPositionTween.duration);
|
}
|
|
private void ServerTipTweenComplete(Component comp)
|
{
|
serverTipPrepared = true;
|
DisableServerTip();
|
ShowServerTip();
|
}
|
|
private void DisableServerTip()
|
{
|
m_ContainerServerTip.gameObject.SetActive(false);
|
m_ServerTipScaleTween.Stop();
|
m_ServerTipPositionTween.Stop();
|
m_ServerTipScaleTween.SetStartState();
|
m_ServerTipPositionTween.SetStartState();
|
}
|
|
|
#region GM
|
private const int MAX_GM = 300;
|
private List<string> gmList = new List<string>();
|
public readonly Regex autoPopRegex = new Regex("参数错误|执行GM命令错误|^###");
|
public void RevGMMsg(string msg)
|
{
|
if (gmList.Count >= MAX_GM)
|
{
|
gmList.RemoveAt(0);
|
}
|
msg.Replace("###", string.Empty);
|
gmList.Add(msg);
|
if (gmToggle.isOn && hasOnFrom)
|
{
|
RectTransform rt = gmPanel.transform as RectTransform;
|
Vector3 pos = new Vector3(hasOnFrom ? -rt.sizeDelta.x / 2 : rt.sizeDelta.x / 2, 0, 0);
|
rt.DOLocalMove(pos, 1.0f);
|
hasOnFrom = !hasOnFrom;
|
gmClose.gameObject.SetActive(!hasOnFrom);
|
}
|
if (gmCtrl.GetNumberOfCells(gmCtrl.m_Scorller) >= MAX_GM)
|
{
|
gmCtrl.m_Scorller.RefreshActiveCellViews();
|
return;
|
}
|
gmCtrl.Refresh();
|
for (int i = 0; i < gmList.Count; i++)
|
{
|
gmCtrl.AddCell(ScrollerDataType.Normal, i);
|
}
|
gmCtrl.Restart();
|
if (autoPopRegex.IsMatch(msg))
|
{
|
if (hasOnFrom)
|
{
|
OnGMOpen();
|
}
|
}
|
}
|
|
private void OnRefreshGmCell(ScrollerDataType type, CellView cell)
|
{
|
if (cell.index < gmList.Count)
|
{
|
Text text = cell.transform.Find("Text").GetComponent<Text>();
|
text.text = gmList[cell.index];
|
}
|
}
|
|
private void OnGMClose()
|
{
|
if (!hasOnFrom)
|
{
|
RectTransform rt = gmPanel.transform as RectTransform;
|
Vector3 pos = new Vector3(hasOnFrom ? -rt.sizeDelta.x / 2 : rt.sizeDelta.x / 2, 0, 0);
|
rt.DOLocalMove(pos, 1.0f);
|
hasOnFrom = !hasOnFrom;
|
gmClose.gameObject.SetActive(!hasOnFrom);
|
}
|
}
|
#endregion
|
|
private void OnDisable()
|
{
|
m_ContianerFixedTip0.gameObject.SetActive(false);
|
for (int i = 0; i < m_ContianerFixedTips.Count; i++)
|
{
|
m_ContianerFixedTips[i].gameObject.SetActive(false);
|
}
|
DisableServerTip();
|
StopAllCoroutines();
|
}
|
|
private Vector3 gmTo = new Vector3(442, 0, 0);
|
private Vector3 gmFrom = new Vector3(892, 0, 0);
|
private bool hasOnFrom = true;
|
public void OnGMOpen()
|
{
|
RectTransform rt = gmPanel.transform as RectTransform;
|
Vector3 pos = new Vector3(hasOnFrom ? -rt.sizeDelta.x / 2 : rt.sizeDelta.x / 2, 0, 0);
|
rt.DOLocalMove(pos, 1.0f);
|
hasOnFrom = !hasOnFrom;
|
gmClose.gameObject.SetActive(!hasOnFrom);
|
}
|
|
protected override void LateUpdate()
|
{
|
#if UNITY_EDITOR
|
if (Input.GetKeyDown(KeyCode.F3))
|
{
|
OnGMOpen();
|
}
|
#endif
|
}
|
|
protected override void BindController()
|
{
|
}
|
protected override void AddListeners()
|
{
|
m_ContianerFixedTip0.OnWaitCompelete(OnHideFixedTip);
|
for (int i = 0; i < m_ContianerFixedTips.Count; i++)
|
{
|
m_ContianerFixedTips[i].OnWaitCompelete(OnHideFixedTip);
|
m_FixedTipDisplays.Add(false);
|
}
|
gmCtrl.OnRefreshCell += OnRefreshGmCell;
|
gmCtrl.lockType = EnhanceLockType.LockVerticalBottom;
|
gmClose.onClick.AddListener(OnGMClose);
|
}
|
|
protected override void OnPreOpen()
|
{
|
#if UNITY_EDITOR
|
gmPanel.SetActive(VersionConfig.Get().debugVersion);
|
#else
|
gmPanel.SetActive(false);
|
#endif
|
serverTipPrepared = true;
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
}
|
|
protected override void OnAfterClose()
|
{
|
_inst = null;
|
}
|
}
|
}
|
|