using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace LeoLuz.Extensions
{
public static class UIExtensions
{
///
/// Compare if this layerNumber is in layermask
///
///
///
///
public static WaitForSecondsRealtime FadeIn(this Graphic obj, float duration)
{
obj.StopAllCoroutines();
// obj.cross
obj.StartCoroutine(FadeInCo(obj, duration));
return new WaitForSecondsRealtime(duration);
}
public static IEnumerator FadeInCo(Graphic obj, float duration)
{
float t = 0f;
Color bkColor = obj.color;
Color transColor = bkColor;
while (t < duration)
{
t += Time.unscaledDeltaTime;
transColor.a = t / duration;
obj.color = transColor;
yield return new WaitForEndOfFrame();
}
transColor.a = 1f;
obj.color = transColor;
}
public static WaitForSecondsRealtime FadeOut(this Graphic obj, float duration, bool disableOnExit = false)
{
obj.StartCoroutine(FadeOutCo(obj, duration, disableOnExit));
return new WaitForSecondsRealtime(duration);
}
public static IEnumerator FadeOutCo(Graphic obj, float duration, bool disableOnExit)
{
float t = duration;
Color bkColor = obj.color;
Color transColor = bkColor;
while (t > 0f)
{
t -= Time.unscaledDeltaTime;
transColor.a = t / duration;
obj.color = transColor;
yield return new WaitForEndOfFrame();
}
transColor.a = 0f;
if (disableOnExit)
obj.enabled = false;
obj.color = transColor;
}
public static void SetAlpha(this Graphic obj, float alpha)
{
Color color = obj.color;
color.a = alpha;
obj.color = color;
}
public static WaitForSecondsRealtime FadeIn(this CanvasGroup obj, float duration)
{
Debug.Log("FadeIn canvas");
obj.GetComponent().StartCoroutine(FadeInCo(obj, duration));
return new WaitForSecondsRealtime(duration);
}
public static IEnumerator FadeInCo(CanvasGroup obj, float duration)
{
float t = 0f;
obj.alpha = 0f;
while (t < duration)
{
t += Time.fixedUnscaledDeltaTime;
obj.alpha = t / duration;
yield return new WaitForEndOfFrame();
}
obj.alpha = 1f;
}
public static WaitForSecondsRealtime Pulse(this CanvasGroup obj, float size, float duration)
{
obj.GetComponent().StartCoroutine(PulseCo(obj.GetComponent(), obj.transform.localScale, size, duration));
return new WaitForSecondsRealtime(duration);
}
public static WaitForSecondsRealtime Pulse(this RectTransform obj, float PulseSize, float duration)
{
obj.GetComponent().StartCoroutine(PulseCo(obj.GetComponent(), obj.transform.localScale, PulseSize, duration));
return new WaitForSecondsRealtime(duration);
}
public static WaitForSecondsRealtime Pulse(this RectTransform obj, Vector3 startSize, float PulseSize, float duration)
{
obj.GetComponent().StartCoroutine(PulseCo(obj.GetComponent(), startSize, PulseSize, duration));
return new WaitForSecondsRealtime(duration);
}
private static IEnumerator PulseCo(Transform obj, Vector3 startSize, float size, float duration)
{
float t = 0f;
while (t < duration)
{
if (Time.timeScale == 0f)
t += Time.unscaledDeltaTime;
else
t += Time.deltaTime;
obj.transform.localScale = Vector3.Lerp(startSize, startSize * size, t / duration);
yield return new WaitForEndOfFrame();
}
t = duration;
while (t > 0f)
{
t -= Time.unscaledDeltaTime;
obj.transform.localScale = Vector3.Lerp(startSize, startSize * size, t / duration);
yield return new WaitForEndOfFrame();
}
obj.transform.localScale = startSize;
}
public static WaitForSecondsRealtime SlideFromTo(this RectTransform obj, Vector2 From, Vector2 to, float duration)
{
obj.GetComponentInChildren().StartCoroutine(SlideInCo(obj, From, to, duration));
return new WaitForSecondsRealtime(duration);
}
public static IEnumerator SlideInCo(RectTransform rectTransform, Vector2 From, Vector2 to, float duration)
{
rectTransform.anchoredPosition = From;
float t = 0f;
while (t < duration)
{
if (Time.timeScale == 0f)
t += Time.unscaledDeltaTime;
else
t += Time.deltaTime;
rectTransform.anchoredPosition = Vector2.Lerp(From, to, Mathf.Sin((t / duration) * Mathf.PI * 0.5f));
yield return new WaitForEndOfFrame();
}
rectTransform.anchoredPosition = to;
}
}
}