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.
RizzeProjectile/Assets/Scripts/UI/Widgets/UIScreenEffects.cs

75 lines
1.4 KiB
C#

using DG.Tweening;
using UnityEngine;
namespace Projectiles.UI
{
public class UIScreenEffects : UIBehaviour
{
// PRIVATE METHODS
[SerializeField]
private CanvasGroup _hitGroup;
[SerializeField]
private UIBehaviour _deathGroup;
[Header("Animation")]
[SerializeField]
private float _hitFadeInDuration = 0.1f;
[SerializeField]
private float _hitFadeOutDuration = 0.7f;
[Header("Audio")]
[SerializeField]
private AudioSetup _hitSound;
[SerializeField]
private AudioSetup _deathSound;
// PUBLIC METHODS
public void OnHitTaken(HitData hit)
{
if (hit.Amount <= 0)
return;
if (hit.Action == EHitAction.Damage)
{
float alpha = Mathf.Lerp(0, 1f, hit.Amount / 20f);
ShowHit(_hitGroup, alpha);
GameUI.PlaySound(_hitSound, EForceBehaviour.ForceAny);
if (hit.IsFatal == true)
{
_deathGroup.SetActive(true);
GameUI.PlaySound(_deathSound, EForceBehaviour.ForceAny);
}
}
}
public void UpdateEffects(PlayerAgent agent)
{
_deathGroup.SetActive(agent.Health.IsAlive == false);
}
// MONOBEHAVIOUR
protected void OnEnable()
{
_hitGroup.SetActive(true);
_hitGroup.alpha = 0f;
_deathGroup.SetActive(false);
}
// PRIVATE METHODS
private void ShowHit(CanvasGroup group, float targetAlpha)
{
DOTween.Kill(group);
group.DOFade(targetAlpha, _hitFadeInDuration);
group.DOFade(0f, _hitFadeOutDuration).SetDelay(_hitFadeInDuration);
}
}
}