111 lines
2.7 KiB
C#
Raw Normal View History

2021-03-25 16:55:36 +08:00
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
2021-10-22 16:21:00 +08:00
using System;
2021-03-25 16:55:36 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Toast : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
if (toast!=null)
{
//toast.SetActive(false);
//txt = toast.transform.Find("Toast").GetComponent<Text>();
}
//if (txt != null)
//{
// txt.enabled = false;
//}
}
// Update is called once per frame
void Update()
{
}
[SerializeField] GameObject toast;
[SerializeField] Text txt;
2021-10-22 16:21:00 +08:00
public void showToast(Assets.Scripts.Utils.ToastParams json)
2021-03-25 16:55:36 +08:00
{
2021-04-23 15:36:18 +08:00
gameObject.SetActive(true);
2021-10-22 16:21:00 +08:00
if (json.func == null)
{
json.func = () => false;
}
StartCoroutine(showToastCOR(json.text, json.duration,json.func,json.showSeconds,json.endCallback));
2021-03-25 16:55:36 +08:00
}
private IEnumerator showToastCOR(string text,
int duration, Func<bool> action,bool showSeconds,Action endCallback)
2021-03-25 16:55:36 +08:00
{
2021-04-23 15:36:18 +08:00
gameObject.SetActive(true);
2021-10-25 16:13:04 +08:00
if (showSeconds)
{
txt.text = text + $"({duration}s)";
}
else
{
txt.text = text;
}
2021-03-25 16:55:36 +08:00
//Fade in
yield return fadeInAndOut(txt, true, 0.5f);
//Wait for the duration
2021-10-25 16:13:04 +08:00
float counter = 0,timer = 1f;
int seconds = 0;
2021-10-22 16:21:00 +08:00
while (counter < duration && !action.Invoke())
2021-03-25 16:55:36 +08:00
{
counter += Time.deltaTime;
2021-10-25 16:13:04 +08:00
if (showSeconds)
{
timer -= Time.deltaTime;
if (timer < 0)
{
txt.text = text + $"({duration - (++seconds)}s)";
timer += 1f;
}
}
2021-03-25 16:55:36 +08:00
yield return null;
}
if (endCallback != null)
{
endCallback.Invoke();
}
2021-03-25 16:55:36 +08:00
//Fade out
yield return fadeInAndOut(txt, false, 0.5f);
2021-04-23 15:36:18 +08:00
gameObject.SetActive(false);
2021-03-25 16:55:36 +08:00
}
IEnumerator fadeInAndOut(Text targetText, bool fadeIn, float duration)
{
//Set Values depending on if fadeIn or fadeOut
float a, b;
if (fadeIn)
{
a = 0f;
b = 1f;
}
else
{
a = 1f;
b = 0f;
}
float counter = 0f;
while (counter < duration)
{
counter += Time.deltaTime;
float alpha = Mathf.Lerp(a, b, counter / duration);
2021-04-23 15:36:18 +08:00
transform.GetComponent<CanvasGroup>().alpha = alpha;
2021-03-25 16:55:36 +08:00
yield return null;
}
}
}