87 lines
1.4 KiB
C#
87 lines
1.4 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace RoR2.UI;
|
|
|
|
public class AnimateUIAlpha : MonoBehaviour
|
|
{
|
|
public AnimationCurve alphaCurve;
|
|
|
|
public Image image;
|
|
|
|
public RawImage rawImage;
|
|
|
|
public SpriteRenderer spriteRenderer;
|
|
|
|
public float timeMax = 5f;
|
|
|
|
public bool destroyOnEnd;
|
|
|
|
public bool loopOnEnd;
|
|
|
|
public bool disableGameObjectOnEnd;
|
|
|
|
[HideInInspector]
|
|
public float time;
|
|
|
|
private Color originalColor;
|
|
|
|
private void Start()
|
|
{
|
|
if ((bool)image)
|
|
{
|
|
originalColor = image.color;
|
|
}
|
|
if ((bool)rawImage)
|
|
{
|
|
originalColor = rawImage.color;
|
|
}
|
|
else if ((bool)spriteRenderer)
|
|
{
|
|
originalColor = spriteRenderer.color;
|
|
}
|
|
UpdateAlphas(0f);
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
time = 0f;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
UpdateAlphas(Time.unscaledDeltaTime);
|
|
}
|
|
|
|
private void UpdateAlphas(float deltaTime)
|
|
{
|
|
time = Mathf.Min(timeMax, time + deltaTime);
|
|
float num = alphaCurve.Evaluate(time / timeMax);
|
|
Color color = new Color(originalColor.r, originalColor.g, originalColor.b, originalColor.a * num);
|
|
if ((bool)image)
|
|
{
|
|
image.color = color;
|
|
}
|
|
if ((bool)rawImage)
|
|
{
|
|
rawImage.color = color;
|
|
}
|
|
else if ((bool)spriteRenderer)
|
|
{
|
|
spriteRenderer.color = color;
|
|
}
|
|
if (loopOnEnd && time >= timeMax)
|
|
{
|
|
time -= timeMax;
|
|
}
|
|
if (destroyOnEnd && time >= timeMax)
|
|
{
|
|
Object.Destroy(base.gameObject);
|
|
}
|
|
if (disableGameObjectOnEnd && time >= timeMax)
|
|
{
|
|
base.gameObject.SetActive(value: false);
|
|
}
|
|
}
|
|
}
|