using System.Threading.Tasks; using UnityEngine; namespace DDD { [CreateAssetMenu(fileName = "FadeSceneTransitionHandlerSo", menuName = "GameFramework/FadeSceneTransitionHandlerSo")] public class FadeSceneTransitionHandlerSo : SceneTransitionHandler { [SerializeField] private float _delayBeforeFadeIn = 1f; [SerializeField] private float _fadeOutDuration = 1f; [SerializeField] private float _fadeInDuration = 0.5f; public override async Task OnBeforeSceneActivate() { var evt = GameEvents.FadeOutEvent; evt.Duration = _fadeOutDuration; EventBus.Broadcast(evt); await evt.WaitAsync(); } public override async Task OnAfterSceneActivate() { float seconds = _delayBeforeFadeIn * 1000; await Task.Delay((int)(seconds)); var evt = GameEvents.FadeInEvent; evt.Duration = _fadeInDuration; EventBus.Broadcast(evt); await evt.WaitAsync(); } } }