Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class DamageFlash : MonoBehaviour
- {
- #region Exposed_Variables
- [ColorUsage(true, true)][SerializeField] private Color flashColor = Color.white;
- [SerializeField] private float flashTime = 0.25f;
- [SerializeField] private SpriteRenderer[] spriteRenderersToFlash;
- [SerializeField] private AnimationCurve flashCurve = null;
- [Header("Material References")]
- [SerializeField] private string colorRef = "_FlashColor";
- [SerializeField] private string flashAmountRef = "_FlashAmount";
- #endregion
- #region Private_Variables
- private Material[] _materialsToFlash;
- #endregion
- #region Public_Variables
- #endregion
- #region Unity_Calls
- private void Awake()
- {
- _materialsToFlash = new Material[spriteRenderersToFlash.Length];
- for (int i = 0; i < _materialsToFlash.Length; i++)
- {
- _materialsToFlash[i] = spriteRenderersToFlash[i].material;
- }
- }
- #endregion
- #region Private_Methods
- private IEnumerator FlashRoutine(Action callback = null)
- {
- SetFlashColor();
- var currentFlashAmount = 0f;
- var elapsedTime = 0f;
- while (elapsedTime < flashTime)
- {
- elapsedTime += Time.deltaTime;
- currentFlashAmount = Mathf.Lerp(1f, flashCurve.Evaluate(elapsedTime), (elapsedTime / flashTime));
- SetFlashAmount(currentFlashAmount);
- yield return null;
- }
- callback?.Invoke();
- }
- private void SetFlashColor()
- {
- foreach (var material in _materialsToFlash)
- {
- material.SetColor(colorRef, flashColor);
- }
- }
- private void SetFlashAmount(float currentFlashAmount)
- {
- foreach (var material in _materialsToFlash)
- {
- material.SetFloat(flashAmountRef, currentFlashAmount);
- }
- }
- #endregion
- #region Public_Methods
- public void Flash(Action callback = null)
- {
- StartCoroutine(FlashRoutine(callback));
- }
- #endregion
- }
Advertisement
Advertisement