using System.Collections.Generic; using DG.Tweening; using TMPro; using UnityEngine; namespace DDD { public class GlobalMessageUi : BaseUi, IEventHandler { private CanvasGroup _canvasGroup; private TextMeshProUGUI _messageText; private Tween _fadeTween; private readonly Queue _messageQueue = new(); private bool _isDisplayingMessage = false; protected override void Awake() { base.Awake(); _canvasGroup = GetComponent(); _messageText = GetComponentInChildren(); _canvasGroup.alpha = 0; _messageText.text = null; } protected override void TryRegister() { base.TryRegister(); EventBus.Register(this); } protected override void TryUnregister() { base.TryUnregister(); EventBus.Unregister(this); _fadeTween?.Kill(); } public void Invoke(ShowGlobalMessageEvent evt) { _messageQueue.Enqueue(evt); TryDisplayNext(); } private void TryDisplayNext() { if (_isDisplayingMessage || _messageQueue.Count == 0) return; var evt = _messageQueue.Dequeue(); _isDisplayingMessage = true; _messageText.text = LocalizationManager.GetString(TableName.Global_Message, evt.NewMessageKey); Open(); _fadeTween?.Kill(); _fadeTween = DOTween.Sequence() .Append(_canvasGroup.DOFade(1f, evt.FadeDuration)) .AppendInterval(evt.ShowDuration) .Append(_canvasGroup.DOFade(0f, evt.FadeDuration)) .OnComplete(() => { Close(); _fadeTween = null; _isDisplayingMessage = false; // 다음 메시지 처리 TryDisplayNext(); }); } } }