예제 #1
0
 public void OnUIActionDone()
 {
     if (_nextWindowFadeData != null)
     {
         _nextWindowFadeData.IsFadeOut = !_nextWindowFadeData.IsFadeOut;
         _nextWindowFadeData.Settings.PlayInvertedOnNextWindow = false;
         _nextWindowFadeData.Settings.Callback = null;
         _nextWindowFadeData.OnComplete        = null;
         RunFade(_nextWindowFadeData);
         _nextWindowFadeData = null;
     }
 }
예제 #2
0
        private void OnCurrentFadeCompleted()
        {
            _curentFadeData.Effect.Destroy();
            _curentFadeData.Effect = null;

            OnFadeCompleted(new FadeEventArgs(_curentFadeData.Settings, !_curentFadeData.IsFadeOut));

            if (_curentFadeData.Settings.PlayInvertedOnNextWindow)
            {
                _nextWindowFadeData = _curentFadeData;
            }

            _curentFadeData.Settings.Callback?.Invoke();
            _curentFadeData.OnComplete?.Invoke();

            _curentFadeData = null;
            if (_fadeDatas.Count == 0)
            {
                return;
            }
            RunFade(_fadeDatas.Dequeue());
        }
예제 #3
0
        private void RunFade(IFadeData data)
        {
            if (_curentFadeData != null)
            {
                _fadeDatas.Enqueue(data);
                return;
            }

            if (data.Settings.Type == WindowFadeType.None)
            {
                data.OnComplete?.Invoke();
                return;
            }

            WindowFadeData.MaskData mask;

            if (data.Settings.Type == WindowFadeType.Random)
            {
                mask = _data.Masks.ElementAt(Random.Range(0, _data.Masks.Length));
            }
            else
            {
                mask = _data.Masks.FirstOrDefault(x => x.Type == data.Settings.Type);
                if (mask == null)
                {
                    throw new Exception($"Mask for {data.Settings.Type} not found");
                }
            }

            var effectData = new FadeEffectData
            {
                Mask       = mask.Mask,
                Color      = _data.Color,
                Duration   = _data.Duration,
                MaskSpread = _data.MaskSpread,
                MaskStep   = _data.MaskStep,
                Invert     = mask.Invert,
                From       = 0.0f,
                To         = 1.0f,
                Callback   = OnCurrentFadeCompleted,
                Destroy    = true,
            };

            if (data.Settings.OverrideInvert)
            {
                effectData.Invert = data.Settings.Invert;
            }

            if (data.Settings.OverrideColor)
            {
                effectData.Color = data.Settings.Color;
            }

            if (data.Settings.OverrideDuration)
            {
                effectData.Duration = data.Settings.Duration;
            }

            if (data.IsFadeOut)
            {
                effectData.From = 1.0f;
                effectData.To   = 0.0f;
            }

            effectData.MaskScale  = Vector2.one;
            effectData.MaskOffset = Vector2.zero;

            var aspect = Screen.height / (float)Screen.width;

            effectData.MaskScale.y *= aspect;
            effectData.MaskOffset.y = (1 - effectData.MaskScale.y) * .5f;

            _curentFadeData   = data;
            effectData.Shader = _fadeEffectBuilder.GetShader();
            data.Effect       = _fadeEffectBuilder.Build();
            OnFadeStarted(new FadeEventArgs(data.Settings, !data.IsFadeOut));
            data.Effect.Run(effectData);
        }