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.

96 lines
2.4 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. [SerializeField, BoxGroup("Settings")]
  17. private AnimationCurve m_lightCurve = AnimationCurve.Linear(0,0,1,1);
  18. [ShowNonSerializedField]
  19. private float m_currentDarknessLevel = 1;
  20. [ShowNonSerializedField]
  21. private bool m_isDarknessChanging;
  22. private void OnEnable()
  23. {
  24. m_isInputDown.OnValueChanged += OnInputChange;
  25. m_darknessMat.SetFloat("_Apply",1);
  26. }
  27. private void OnDisable()
  28. {
  29. m_isInputDown.OnValueChanged -= OnInputChange;
  30. m_darknessMat.SetFloat("_Apply", 1);
  31. }
  32. private void OnInputChange(bool value)
  33. {
  34. StopAllCoroutines();
  35. Debug.Log($"Here {m_isDarknessChanging}");
  36. if (value)
  37. { if (!m_isDarknessChanging)
  38. {
  39. StartCoroutine(ChangeDarkness(0, m_darknessSpeed));
  40. }
  41. else
  42. {
  43. StartCoroutine(ChangeDarkness(0, 0));
  44. }
  45. }
  46. else
  47. StartCoroutine(ChangeDarkness(1, m_lightSpeed, m_lightCurve));
  48. }
  49. private IEnumerator ChangeDarkness(float end, float time)
  50. {
  51. yield return StartCoroutine(ChangeDarkness(end, time, AnimationCurve.Linear(0, 0, 1, 1)));
  52. }
  53. private IEnumerator ChangeDarkness(float end, float time, AnimationCurve curve)
  54. {
  55. float start = m_currentDarknessLevel;
  56. float elapsedTime = 0;
  57. time = Mathf.InverseLerp(end, start, m_currentDarknessLevel) * time;
  58. m_isDarknessChanging = true;
  59. while(elapsedTime < time)
  60. {
  61. m_currentDarknessLevel = Mathf.Lerp(start, end, curve.Evaluate(elapsedTime / time));
  62. m_darknessMat.SetFloat("_Apply", m_currentDarknessLevel);
  63. yield return new WaitForEndOfFrame();
  64. elapsedTime += Time.deltaTime;
  65. }
  66. m_isDarknessChanging = false;
  67. m_currentDarknessLevel = end;
  68. m_darknessMat.SetFloat("_Apply", m_currentDarknessLevel);
  69. }
  70. }