ProjectDDD/Assets/_DDD/_Scripts/GameUi/BaseUi/CommonUis/GlobalMessageUi.cs

70 lines
2.0 KiB
C#
Raw Normal View History

2025-07-21 07:53:39 +00:00
using System.Collections.Generic;
using DG.Tweening;
using TMPro;
2025-08-16 23:57:23 +00:00
using UnityEngine;
2025-07-21 07:53:39 +00:00
namespace DDD
{
public class GlobalMessageUi : BaseUi, IEventHandler<ShowGlobalMessageEvent>
{
2025-08-16 23:57:23 +00:00
[SerializeField] private TextMeshProUGUI _messageText;
2025-07-21 07:53:39 +00:00
private Tween _fadeTween;
private readonly Queue<ShowGlobalMessageEvent> _messageQueue = new();
private bool _isDisplayingMessage = false;
2025-08-24 11:44:32 +00:00
protected override void OnDestroy()
2025-07-21 07:53:39 +00:00
{
2025-08-24 11:44:32 +00:00
base.OnDestroy();
2025-07-22 07:46:37 +00:00
2025-08-24 11:44:32 +00:00
EventBus.Unregister(this);
_fadeTween?.Kill();
2025-07-21 07:53:39 +00:00
}
2025-08-24 11:44:32 +00:00
protected override void OnCreatedInitialize()
2025-07-21 07:53:39 +00:00
{
2025-08-24 11:44:32 +00:00
base.OnCreatedInitialize();
2025-07-21 07:53:39 +00:00
2025-08-24 11:44:32 +00:00
_canvasGroup.alpha = 0;
_messageText.text = null;
EventBus.Register(this);
2025-07-21 07:53:39 +00:00
}
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;
2025-08-05 04:00:01 +00:00
OpenPanel();
2025-07-21 07:53:39 +00:00
_fadeTween?.Kill();
_fadeTween = DOTween.Sequence()
.Append(_canvasGroup.DOFade(1f, evt.FadeDuration))
.AppendInterval(evt.ShowDuration)
.Append(_canvasGroup.DOFade(0f, evt.FadeDuration))
.OnComplete(() =>
{
2025-08-05 04:00:01 +00:00
ClosePanel();
2025-07-21 07:53:39 +00:00
_fadeTween = null;
_isDisplayingMessage = false;
// 다음 메시지 처리
TryDisplayNext();
});
}
}
}