using System.Collections; using UnityEngine; #if DOTWEEN using DG.Tweening; #endif namespace EndingSystem { public class EndingLightController : MonoBehaviour { [Header("Light Reference")] public Light targetLight; [Header("Animation Settings")] [Tooltip("The final intensity of the light when fully turned on")] public float targetIntensity = 5f; [Tooltip("How long it takes for the light to reach target intensity")] public float fadeDuration = 3f; #if DOTWEEN [Header("DOTween")] public Ease fadeEase = Ease.InOutSine; private Tween currentTween; #endif private void Awake() { if (targetLight != null) { targetLight.intensity = 0f; targetLight.enabled = true; } } public void TurnOnLight(bool useUnscaledTime = false) { if (targetLight != null) { #if DOTWEEN PlayFade(useUnscaledTime); #else StartCoroutine(FadeLightCoroutine()); #endif } } #if DOTWEEN private void OnDisable() { if (currentTween != null) { currentTween.Kill(false); currentTween = null; } } private void PlayFade(bool useUnscaledTime) { if (currentTween != null) { currentTween.Kill(false); currentTween = null; } float duration = Mathf.Max(0.0001f, fadeDuration); currentTween = DOTween.To(() => targetLight.intensity, v => targetLight.intensity = v, targetIntensity, duration) .SetEase(fadeEase) .SetTarget(targetLight) .SetUpdate(useUnscaledTime); } #endif private IEnumerator FadeLightCoroutine() { float t = 0f; float startIntensity = targetLight.intensity; while (t < 1f) { t += Time.deltaTime / fadeDuration; targetLight.intensity = Mathf.Lerp(startIntensity, targetIntensity, t); yield return null; } targetLight.intensity = targetIntensity; } } }