예제 #1
0
    public Task PerformFade(ref FadeArgs fadeArgs)
    {
        _activeTask?.TrySetCanceled();
        _activeTask = new TaskCompletionSource <bool>();

        _currentFade = fadeArgs;

        _timeOverflow  = 0;
        _fadeStepsDone = -1;
        if (!fadeArgs.flags.HasFlag(FadeFlag.FadeIn))
        {
            Logger.Info("gfade fade out");
        }
        else
        {
            Logger.Info("gfade fade in");
        }

        _lastFadeTime = TimePoint.Now;
        AdvanceTime(_lastFadeTime);
        // If transition time is 0, this might actually complete _immediately_!
        if (_activeTask == null)
        {
            return(Task.CompletedTask);
        }
        return(_activeTask.Task);
    }
예제 #2
0
    private IEnumerator FadeSourceOut(FadeArgs args)
    {
        while (isFading && args.Source == ShepardTone)
        {
            yield return(new WaitForSeconds(0.01f));
        }

        if (args.Source == ShepardTone)
        {
            isFading = true;
        }

        for (float i = args.Source.volume; i > args.MinVolume; i -= args.Speed)
        {
            if (interrupt && args.Source == ShepardTone)
            {
                interrupt = false;
                break;
            }

            args.Source.volume = i;
            yield return(new WaitForSeconds(0.05f));
        }

        if (args.Source == ShepardTone)
        {
            isFading = false;
        }
    }
예제 #3
0
    public void ScheduleFade(ref FadeArgs fadeArgs, TimeSpan delay)
    {
        var evt = new TimeEvent(TimeEventType.Fade);

        evt.arg1.int32   = (int)fadeArgs.flags;
        evt.arg2.int32   = unchecked ((int)fadeArgs.color.Pack());
        evt.arg3.float32 = 2.0f;
        evt.arg4.int32   = 48;
        GameSystems.TimeEvent.Schedule(evt, delay, out _);
    }
예제 #4
0
    public void OnEnterLight()
    {
        interrupt |= isFading;

        var args = new FadeArgs
        {
            Source    = ShepardTone,
            MaxVolume = shepardToneMaxVolume,
            Speed     = 0.025f
        };

        StartCoroutine("FadeSourceOut", args);
    }
예제 #5
0
    public void OnFirstLightTurnedOn()
    {
        BackgroundMusic.volume = 0;
        //BackgroundMusic.Play();

        var args = new FadeArgs
        {
            Source    = BackgroundMusic,
            MaxVolume = backgroundMusicMaxVolume,
            Speed     = 0.01f
        };

        StartCoroutine("FadeSourceIn", args);
    }