Files
JJBB/Assets/Project/Script/GUI/Chat/PopNoticeLogic.cs

117 lines
2.6 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System.Linq;
public class PopNoticeLogic : MonoBehaviour {
public static PopNoticeLogic Instance;
public GameObject panel;
public Animator panelAnim;
public List<Animator> textAnim;
public List<Text> textDesc;
public float showTime;
public float switchInternal;
public float closeTime;
private float hasColdTime;
private int curIndex = 0;
private string textIdle = "None";
private string textShow = "Show";
private string textHide = "Hide";
private string panelShow = "Show";
private string panelHide = "Hide";
private static int count = 0;
private AnimatorStateInfo animatorInfo;
private Coroutine coldTimeCtr;
private Queue<string> msgQueue = new Queue<string>();
void Awake()
{
Instance = this;
}
private void OnDestroy()
{
Instance = null;
}
// 入口
public void PopStringInfo(string msg)
{
msgQueue.Enqueue(msg);
animatorInfo = panelAnim.GetCurrentAnimatorStateInfo(0);
if (!panel.activeInHierarchy || animatorInfo.IsName(panelHide))
{
StopAllCoroutines();
panel.SetActive(true);
panelAnim.Play(panelShow);
textDesc[curIndex].text = msgQueue.Peek();
StartCoroutine(CountShowTime());
}
}
private IEnumerator CountShowTime()
{
if(coldTimeCtr != null)
{
StopCoroutine(coldTimeCtr);
coldTimeCtr = null;
}
yield return new WaitForSeconds(showTime + switchInternal);
DeQueue();
}
private IEnumerator CountColdTime()
{
hasColdTime = 0.0f;
while (true)
{
hasColdTime += Time.deltaTime;
if(hasColdTime > closeTime)
{
panelAnim.Play(panelHide);
yield break;
}
yield return 0;
}
}
private void DeQueue()
{
msgQueue.Dequeue();
if(msgQueue.Count > 0)
{
textAnim[curIndex].Play(textHide);
curIndex = (curIndex + 1) % 2;
textAnim[curIndex].Play(textShow);
textDesc[curIndex].text = msgQueue.Peek();
StartCoroutine(CountShowTime());
}
else
{
coldTimeCtr = StartCoroutine(CountColdTime());
}
}
private void OnEnable()
{
panel.SetActive(false);
for(int i = 0; i < textAnim.Count; ++i)
{
textAnim[i].Play(textIdle);
}
}
}