Firelight.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System.Collections;
  2. using UnityEngine;
  3. namespace HQFPSWeapons
  4. {
  5. [RequireComponent(typeof(Light))]
  6. public class Firelight : MonoBehaviour
  7. {
  8. [SerializeField]
  9. [Range(0.1f, 3f)]
  10. private float m_ToggleDuration = 0.5f;
  11. [SerializeField]
  12. [Range(0.1f, 3f)]
  13. private float m_LightIntensity = 1f;
  14. [SerializeField]
  15. [Range(0.5f, 3f)]
  16. private float m_LightRange = 2f;
  17. [SerializeField]
  18. [Range(0f, 3f)]
  19. [Tooltip("How much the light intensity changes over time.")]
  20. private float m_IntensityNoise = 1f;
  21. private Light m_Light;
  22. private bool m_IsInTransition;
  23. private bool m_TargetState;
  24. public void Toggle(bool toggle)
  25. {
  26. m_TargetState = toggle;
  27. StopAllCoroutines();
  28. StartCoroutine(C_Toggle(toggle));
  29. }
  30. private void Awake()
  31. {
  32. m_Light = GetComponent<Light>();
  33. }
  34. private void Update()
  35. {
  36. if(!m_IsInTransition && m_TargetState)
  37. m_Light.intensity = m_LightIntensity + Mathf.PerlinNoise(Time.time, Time.time + 3f) * m_IntensityNoise;
  38. }
  39. private IEnumerator C_Toggle(bool toggle)
  40. {
  41. m_IsInTransition = true;
  42. float endTime = Time.time + m_ToggleDuration;
  43. while(Time.time < endTime)
  44. {
  45. // Intensity.
  46. m_Light.intensity = Mathf.MoveTowards(
  47. m_Light.intensity,
  48. toggle ? m_LightIntensity : 0f,
  49. Time.deltaTime * m_LightIntensity / m_ToggleDuration);
  50. // Range.
  51. m_Light.range = Mathf.MoveTowards(
  52. m_Light.range,
  53. toggle ? m_LightRange : 0f,
  54. Time.deltaTime * m_LightIntensity / m_ToggleDuration);
  55. yield return null;
  56. }
  57. m_IsInTransition = false;
  58. }
  59. }
  60. }