You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.0 KiB
C#

using System;
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using WalletConnectUnity.Core.Utils;
namespace WalletConnectUnity.UI
{
public class WCSnackbar : MonoBehaviour
{
[Header("Scene References"), SerializeField]
private Image _iconBackground;
[SerializeField] private Image _iconImage;
[SerializeField] private TMP_Text _text;
[SerializeField] private Canvas _canvas;
[SerializeField] private CanvasGroup _canvasGroup;
[Header("Settings"), SerializeField] private SerializableDictionary<Type, Config> _configs = new();
private readonly WaitForSeconds _wait = new(3f);
private Coroutine _coroutine;
public void Show(Type type, string text)
{
if (_coroutine != null)
{
StopCoroutine(_coroutine);
_coroutine = null;
_canvasGroup.alpha = 0;
}
_coroutine = StartCoroutine(ShowCoroutine(type, text));
}
private IEnumerator ShowCoroutine(Type type, string text)
{
var config = _configs[type];
_iconBackground.color = config.iconBackgroundColor;
_iconImage.color = config.iconImageColor;
_iconImage.sprite = config.icon;
_text.text = text;
_canvas.enabled = true;
// Increase alpha
var t = 0f;
while (t < 1f)
{
t += Time.deltaTime * 5f;
_canvasGroup.alpha = t;
yield return null;
}
yield return _wait;
_canvas.enabled = false;
_canvasGroup.alpha = 0;
_coroutine = null;
}
public enum Type
{
Success,
Info,
Error
}
[Serializable]
private struct Config
{
public Sprite icon;
public Color iconImageColor;
public Color iconBackgroundColor;
}
}
}