Global Game Jam 2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.8 KiB

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using NaughtyAttributes;
  5. using Variables;
  6. public class DarknessController : MonoBehaviour
  7. {
  8. [SerializeField, Header("References")]
  9. private Material m_darknessMat;
  10. [SerializeField]
  11. private Reference<bool> m_isInputDown;
  12. [SerializeField, BoxGroup("Settings")]
  13. private float m_darknessSpeed = 0.25f;
  14. [SerializeField, BoxGroup("Settings")]
  15. private float m_lightSpeed = 1.0f;
  16. [ShowNonSerializedField]
  17. private float m_currentDarknessLevel;
  18. private bool m_isDarknessChanging;
  19. private void OnEnable()
  20. {
  21. m_isInputDown.OnValueChanged += OnInputChange;
  22. }
  23. private void OnDisable()
  24. {
  25. m_isInputDown.OnValueChanged -= OnInputChange;
  26. }
  27. private void OnInputChange(bool value)
  28. {
  29. StopAllCoroutines();
  30. if (value)
  31. StartCoroutine(ChangeDarkness(0, m_darknessSpeed));
  32. else
  33. StartCoroutine(ChangeDarkness(1, m_lightSpeed));
  34. }
  35. private IEnumerator ChangeDarkness(float end, float time)
  36. {
  37. yield return StartCoroutine(ChangeDarkness(end, time, AnimationCurve.Linear(0, 0, 1, 1)));
  38. }
  39. private IEnumerator ChangeDarkness(float end, float time, AnimationCurve curve)
  40. {
  41. float start = m_currentDarknessLevel;
  42. float elapsedTime = 0;
  43. time = Mathf.InverseLerp(start, end, m_currentDarknessLevel);
  44. m_isDarknessChanging = true;
  45. while(elapsedTime < time)
  46. {
  47. m_currentDarknessLevel = Mathf.Lerp(start, end, curve.Evaluate(elapsedTime / time));
  48. m_darknessMat.SetFloat("_Apply", m_currentDarknessLevel);
  49. yield return new WaitForEndOfFrame();
  50. elapsedTime += Time.deltaTime;
  51. }
  52. m_isDarknessChanging = false;
  53. m_currentDarknessLevel = end;
  54. }
  55. }