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#
106 lines
2.0 KiB
C#
4 weeks ago
|
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,
|
||
|
}
|
||
|
}
|
||
|
}
|