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.

106 lines
2.0 KiB
C#

using UnityEasing;
using UnityEngine;
namespace Projectiles.UI
{
[RequireComponent(typeof(CanvasGroup))]
public class UIFader : UIBehaviour
{
// PUBLIC MEMBERS
public bool IsFinished => _isFinished;
public float StartDelay;
public EFadeDirection Direction = EFadeDirection.FadeIn;
public float Duration = 0.5f;
public Ease Ease = Ease.OutQuad;
public EPlayBehavior Behaviour = EPlayBehavior.Once;
public bool ResetOnDisable = true;
public float FadeOutValue = 0f;
// PRIVATE MEMBERS
private float _resetValue;
private float _startValue;
private float _targetValue;
private float _time;
private bool _isFinished;
// MONOBEHAVIOR
protected void OnEnable()
{
if (_isFinished == false)
{
_resetValue = CanvasGroup.alpha;
_startValue = Direction == EFadeDirection.FadeIn ? FadeOutValue : _resetValue;
_targetValue = Direction == EFadeDirection.FadeIn ? _resetValue : FadeOutValue;
_time = -StartDelay;
CanvasGroup.alpha = _startValue;
}
}
protected void Update()
{
if (_isFinished == true)
{
if (Behaviour == EPlayBehavior.PingPong)
{
float previousStart = _startValue;
_startValue = _targetValue;
_targetValue = previousStart;
_time = 0f;
_isFinished = false;
}
else if (Behaviour == EPlayBehavior.Restart)
{
_time = 0f;
_isFinished = false;
}
else
{
return;
}
}
_time += Time.deltaTime;
if (_time >= Duration)
{
_time = Duration;
_isFinished = true;
}
float progress = _time > 0f ? Ease.Get(_time / Duration) : 0f;
CanvasGroup.alpha = Mathf.Lerp(_startValue, _targetValue, progress);
}
protected void OnDisable()
{
if (ResetOnDisable == true)
{
CanvasGroup.alpha = _resetValue;
_isFinished = false;
}
}
// HELPERS
public enum EFadeDirection
{
FadeIn,
FadeOut,
}
public enum EPlayBehavior
{
//None,
Once = 1,
Restart = 2,
PingPong = 3,
}
}
}