102 lines
2.7 KiB
C#
102 lines
2.7 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using DG.Tweening;
|
|
using System;
|
|
|
|
namespace Beyond
|
|
{
|
|
public class PopupMenuController : MonoBehaviour
|
|
{
|
|
private float fadeDuration = 0.6f, stayDuration = 2f;
|
|
|
|
public TMPro.TMP_Text textField;
|
|
private bool showing = false;
|
|
private List<string> waitingMessages = new();
|
|
|
|
public MenuScroll menuScroll;
|
|
|
|
public static PopupMenuController Instance { get; private set; }
|
|
|
|
private void Awake()
|
|
{
|
|
if (Instance != null && Instance != this)
|
|
{
|
|
Destroy(this);
|
|
}
|
|
else
|
|
{
|
|
Instance = this;
|
|
}
|
|
textField.alpha = 0;
|
|
menuScroll.OnOpened += ClearPopup;
|
|
menuScroll.OnClosed += ClearPopup;
|
|
menuScroll.OnNewCanvaBurnMiddle += ClearPopup;
|
|
}
|
|
|
|
public void TryToShowPopupMesssage(string message)
|
|
{
|
|
if (!isActiveAndEnabled)
|
|
{
|
|
return;
|
|
}
|
|
if (showing)
|
|
{
|
|
waitingMessages.Add(message);
|
|
return;
|
|
}
|
|
ShowPopupMessage(message);
|
|
}
|
|
|
|
private void ShowPopupMessage(string message)
|
|
{
|
|
showing = true;
|
|
textField.alpha = 0f;
|
|
textField.text = message;
|
|
StartCoroutine(FadeOutCoroutine());
|
|
}
|
|
|
|
private IEnumerator FadeOutCoroutine()
|
|
{
|
|
while (textField.alpha < 1)
|
|
{
|
|
textField.alpha += Time.unscaledDeltaTime / fadeDuration;
|
|
yield return new WaitForSecondsRealtime(Time.unscaledDeltaTime);
|
|
}
|
|
yield return new WaitForSecondsRealtime(stayDuration);
|
|
while (textField.alpha > 0)
|
|
{
|
|
textField.alpha -= Time.unscaledDeltaTime / fadeDuration;
|
|
yield return new WaitForSecondsRealtime(Time.unscaledDeltaTime * fadeDuration);
|
|
}
|
|
|
|
if (waitingMessages.Count > 0)
|
|
{
|
|
ShowPopupMessage(waitingMessages[0]);
|
|
waitingMessages.RemoveAt(0);
|
|
}
|
|
else
|
|
{
|
|
showing = false;
|
|
}
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (menuScroll)
|
|
{
|
|
menuScroll.OnOpened -= ClearPopup;
|
|
menuScroll.OnClosed -= ClearPopup;
|
|
menuScroll.OnNewCanvaBurnMiddle -= ClearPopup;
|
|
}
|
|
}
|
|
|
|
private void ClearPopup()
|
|
{
|
|
StopAllCoroutines();
|
|
textField.alpha = 0;
|
|
showing = false;
|
|
waitingMessages.Clear();
|
|
}
|
|
}
|
|
} |