68 lines
1.9 KiB
C#
68 lines
1.9 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;
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
_canvasGroup = GetComponent<CanvasGroup>();
|
||
|
_messageText = GetComponentInChildren<TextMeshProUGUI>();
|
||
|
|
||
|
_canvasGroup.alpha = 0;
|
||
|
_messageText.text = null;
|
||
|
|
||
|
EventBus.Register(this);
|
||
|
}
|
||
|
|
||
|
protected override void OnDestroy()
|
||
|
{
|
||
|
base.OnDestroy();
|
||
|
|
||
|
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();
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
}
|