2024-04-17 20:53:46 -07:00
|
|
|
using System;
|
|
|
|
using System.Threading;
|
2024-04-15 04:10:00 -07:00
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
using DG.Tweening;
|
|
|
|
using TMPro;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
namespace GadGame
|
|
|
|
{
|
|
|
|
public class Popup : MonoBehaviour
|
|
|
|
{
|
|
|
|
[SerializeField] private TextMeshProUGUI _message;
|
|
|
|
[SerializeField] private CanvasGroup _canvasGroup;
|
|
|
|
[SerializeField] private Transform _content;
|
2024-04-17 20:53:46 -07:00
|
|
|
|
|
|
|
private float _duration;
|
|
|
|
private Action _onComplete;
|
|
|
|
private Action<float> _onRun;
|
|
|
|
private bool _active = false;
|
|
|
|
private CancellationTokenSource _cancellationTokenSource;
|
|
|
|
private bool _stay;
|
2024-04-15 04:10:00 -07:00
|
|
|
|
2024-04-17 20:53:46 -07:00
|
|
|
private async void PopupUpdate()
|
2024-04-15 04:10:00 -07:00
|
|
|
{
|
2024-04-17 20:53:46 -07:00
|
|
|
while (_active)
|
|
|
|
{
|
|
|
|
await UniTask.Delay(100, cancellationToken:_cancellationTokenSource.Token, ignoreTimeScale: true);
|
|
|
|
if (!_stay)
|
|
|
|
{
|
|
|
|
_duration -= 100;
|
|
|
|
if (_duration <= 0)
|
|
|
|
{
|
2024-04-25 23:57:30 -07:00
|
|
|
Hide(true);
|
2024-04-17 20:53:46 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
_onRun?.Invoke(_duration);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void SetStay(bool value)
|
|
|
|
{
|
|
|
|
_stay = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public async void Show(string message, float duration)
|
|
|
|
{
|
|
|
|
_active = true;
|
|
|
|
_duration = duration;
|
|
|
|
_stay = false;
|
|
|
|
_cancellationTokenSource = new CancellationTokenSource();
|
2024-04-15 04:10:00 -07:00
|
|
|
_content.DOComplete();
|
|
|
|
_canvasGroup.DOComplete();
|
|
|
|
_message.text = message;
|
|
|
|
_canvasGroup.alpha = 0;
|
|
|
|
_content.localScale = Vector3.zero;
|
2024-04-17 20:53:46 -07:00
|
|
|
await _canvasGroup.DOFade(1, 0.3f).SetUpdate(true);
|
|
|
|
await _content.DOScale(Vector3.one, 0.5f).SetUpdate(true);
|
|
|
|
PopupUpdate();
|
2024-04-15 04:10:00 -07:00
|
|
|
}
|
|
|
|
|
2024-04-25 23:57:30 -07:00
|
|
|
public async void Hide(bool runComplete = false)
|
2024-04-15 04:10:00 -07:00
|
|
|
{
|
2024-04-17 20:53:46 -07:00
|
|
|
_active = false;
|
|
|
|
_duration = 0;
|
|
|
|
_cancellationTokenSource.Cancel();
|
2024-04-15 04:10:00 -07:00
|
|
|
_content.DOComplete();
|
|
|
|
_canvasGroup.DOComplete();
|
2024-04-17 20:53:46 -07:00
|
|
|
await _content.DOScale(Vector3.zero, 0.3f).SetUpdate(true);
|
|
|
|
await _canvasGroup.DOFade(0, 0.3f).SetUpdate(true);
|
2024-04-25 23:57:30 -07:00
|
|
|
if(runComplete) _onComplete?.Invoke();
|
2024-04-17 20:53:46 -07:00
|
|
|
_onComplete = null;
|
|
|
|
_onRun = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnComplete(Action action)
|
|
|
|
{
|
|
|
|
_onComplete = action;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnRun(Action<float> action)
|
|
|
|
{
|
|
|
|
_onRun = action;
|
2024-04-15 04:10:00 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|