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