Files
beyond/Assets/Scripts/UI/PopupMenuController.cs
2024-11-20 15:21:28 +01:00

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