|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|