Advertisement
NovusX

flashRoutine

Apr 7th, 2023
662
1
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.37 KB | Source Code | 1 0
  1. public class DamageFlash : MonoBehaviour
  2.     {
  3.         #region Exposed_Variables
  4.  
  5.         [ColorUsage(true, true)][SerializeField] private Color flashColor = Color.white;
  6.         [SerializeField] private float flashTime = 0.25f;
  7.         [SerializeField] private SpriteRenderer[] spriteRenderersToFlash;
  8.         [SerializeField] private AnimationCurve flashCurve = null;
  9.  
  10.         [Header("Material References")]
  11.         [SerializeField] private string colorRef = "_FlashColor";
  12.         [SerializeField] private string flashAmountRef = "_FlashAmount";
  13.  
  14.         #endregion
  15.  
  16.         #region Private_Variables
  17.        
  18.         private Material[] _materialsToFlash;
  19.        
  20.         #endregion
  21.  
  22.         #region Public_Variables
  23.  
  24.         #endregion
  25.  
  26.         #region Unity_Calls
  27.  
  28.         private void Awake()
  29.         {
  30.             _materialsToFlash = new Material[spriteRenderersToFlash.Length];
  31.             for (int i = 0; i < _materialsToFlash.Length; i++)
  32.             {
  33.                 _materialsToFlash[i] = spriteRenderersToFlash[i].material;
  34.             }
  35.         }
  36.  
  37.         #endregion
  38.  
  39.         #region Private_Methods
  40.  
  41.         private IEnumerator FlashRoutine(Action callback = null)
  42.         {
  43.             SetFlashColor();
  44.  
  45.             var currentFlashAmount = 0f;
  46.             var elapsedTime = 0f;
  47.  
  48.             while (elapsedTime < flashTime)
  49.             {
  50.                 elapsedTime += Time.deltaTime;
  51.  
  52.                 currentFlashAmount = Mathf.Lerp(1f, flashCurve.Evaluate(elapsedTime), (elapsedTime / flashTime));
  53.                 SetFlashAmount(currentFlashAmount);
  54.  
  55.                 yield return null;
  56.             }
  57.  
  58.             callback?.Invoke();
  59.         }
  60.        
  61.         private void SetFlashColor()
  62.         {
  63.             foreach (var material in _materialsToFlash)
  64.             {
  65.                 material.SetColor(colorRef, flashColor);
  66.             }
  67.         }
  68.        
  69.         private void SetFlashAmount(float currentFlashAmount)
  70.         {
  71.             foreach (var material in _materialsToFlash)
  72.             {
  73.                 material.SetFloat(flashAmountRef, currentFlashAmount);
  74.             }
  75.         }
  76.  
  77.         #endregion
  78.  
  79.         #region Public_Methods
  80.  
  81.         public void Flash(Action callback = null)
  82.         {
  83.             StartCoroutine(FlashRoutine(callback));
  84.         }
  85.        
  86.         #endregion
  87.        
  88.     }
Tags: Unity
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement