ProjectDDD/Assets/_DDD/_Scripts/GameUi/GlobalMessageUi.cs
2025-07-22 16:46:37 +09:00

75 lines
2.1 KiB
C#

using System.Collections.Generic;
using DG.Tweening;
using TMPro;
using UnityEngine;
namespace DDD
{
public class GlobalMessageUi : BaseUi, IEventHandler<ShowGlobalMessageEvent>
{
private CanvasGroup _canvasGroup;
private TextMeshProUGUI _messageText;
private Tween _fadeTween;
private readonly Queue<ShowGlobalMessageEvent> _messageQueue = new();
private bool _isDisplayingMessage = false;
protected override void Awake()
{
base.Awake();
_canvasGroup = GetComponent<CanvasGroup>();
_messageText = GetComponentInChildren<TextMeshProUGUI>();
_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();
});
}
}
}