using System.Collections.Generic; using DG.Tweening; using TMPro; using UnityEngine; namespace DDD { public class GlobalMessageUi : BaseUi, IEventHandler { [SerializeField] private TextMeshProUGUI _messageText; private Tween _fadeTween; private readonly Queue _messageQueue = new(); private bool _isDisplayingMessage = false; protected override void OnDestroy() { base.OnDestroy(); EventBus.Unregister(this); _fadeTween?.Kill(); } protected override void OnCreatedInitialize() { base.OnCreatedInitialize(); _canvasGroup.alpha = 0; _messageText.text = null; EventBus.Register(this); } 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.color = evt.TextColor; _messageText.fontSize = evt.FontSize; string localized = LocalizationManager.Instance.GetString(evt.NewMessageKey); _messageText.text = localized; OpenPanel(); _fadeTween?.Kill(); _fadeTween = DOTween.Sequence() .Append(_canvasGroup.DOFade(1f, evt.FadeDuration)) .AppendInterval(evt.ShowDuration) .Append(_canvasGroup.DOFade(0f, evt.FadeDuration)) .OnComplete(() => { ClosePanel(); _fadeTween = null; _isDisplayingMessage = false; // 다음 메시지 처리 TryDisplayNext(); }); } } }