Пример #1
0
    /// <summary>
    /// Fade music only if we have the "pas du tout" ending
    /// </summary>
    void FadeToBadEndingMusic()
    {
        // Manage music changement on BadEnding
        if (_textPetal.CurrentIndex == 4)
        {
            StartCoroutine(MusicFade());
            IEnumerator MusicFade()
            {
                var destVolume  = _endingMusic.volume;
                var startVolume = _music.volume;

                _endingMusic.volume = 0;
                _endingMusic.Play();
                SpecialCountDown scd = new SpecialCountDown(1);

                while (!scd.isDone)
                {
                    _music.volume       = Mathf.Lerp(startVolume, 0, scd.Progress);
                    _endingMusic.volume = Mathf.Lerp(0, destVolume, scd.Progress);
                    yield return(null);
                }

                yield break;
            }
        }
    }
Пример #2
0
    /// <summary>
    /// The FallPetal Routine containing : "Il m'aime" animation and click to fall petal
    /// </summary>
    /// <returns></returns>
    internal IEnumerator Run()
    {
        gameObject.SetActive(true);
        bool finished = false;

        // Animation "Il m'aime ..."
        _introductionText.gameObject.SetActive(true);
        yield return(new WaitForSeconds(1f));

        SpecialCountDown scd = new SpecialCountDown(2f);

        while (!scd.isDone)
        {
            _introductionText.alpha = 1 - scd.Progress;
            yield return(null);
        }
        _introductionText.gameObject.SetActive(false);

        // Prepare button Listener
        _buttonPedal.onClick.AddListener(PickPetal);
        OnAllPedalPicked += () => finished = true;

        // Wait for the petal to be empty
        yield return(new WaitWhile(() => !finished));

        // Cleanup
        _buttonPedal.onClick.RemoveListener(PickPetal);
        _buttonPedal.gameObject.SetActive(false);
        yield break;
    }
Пример #3
0
    public void StartTimer(float duration)
    {
        _timerRoutine = StartCoroutine(TimerRoutine());
        IEnumerator TimerRoutine()
        {
            _scd = new SpecialCountDown(duration);
            while (!_scd.isDone)
            {
                int seconds = (int)_scd.RemainingTime;
                if (seconds >= 60)
                {
                    _text.text = $"{(seconds/60<0?"0": string.Empty)}{seconds/60} : {(seconds % 60 < 10 ? "0" : string.Empty)}{seconds % 60}";
                }
                else if (seconds >= 10)
                {
                    _text.text = $"{seconds % 60}";
                }
                else
                {
                    _text.text = $"0{seconds % 60}";
                }
                yield return(null);
            }

            OnTimeOut?.Invoke();
            yield break;
        }
    }
Пример #4
0
    /// <summary>
    /// Text animation
    /// </summary>
    public void NextText()
    {
        // We must have only one Coroutine running at the same time
        if (_textAnimation != null)
        {
            StopCoroutine(_textAnimation);
        }

        _textAnimation = StartCoroutine(ShowTextRoutine());
        IEnumerator ShowTextRoutine()
        {
            CurrentIndex++;
            if (CurrentIndex >= _textLoop.Length)
            {
                CurrentIndex = 0;
            }

            _textToChange.text = _textLoop[CurrentIndex].Get();

            SpecialCountDown scd = new SpecialCountDown(_opacityAnimation.keys.Last().time);

            while (!scd.isDone)
            {
                _textCanvasGroup.alpha = _opacityAnimation.Evaluate(scd.Progress);
                yield return(null);
            }

            _textAnimation = null;
            yield break;
        }
    }
Пример #5
0
    public IEnumerator EndRoutine(float score)
    {
        gameObject.SetActive(true);
        _score.text = ((int)(score * 1000)).ToString();

        // Fade to black
        float            fadeDuration = 1f;
        SpecialCountDown scd          = new SpecialCountDown(fadeDuration);

        while (!scd.isDone)
        {
            _background.alpha = scd.Progress;
            yield return(null);
        }

        // Fade right image
        var              endPicked      = _ends.Where(i => i.Value == _currentPetal.CurrentIndex).FirstOrDefault() ?? _ends.First();
        float            endingDuration = 3f;
        SpecialCountDown scd2           = new SpecialCountDown(endingDuration);

        while (!scd2.isDone)
        {
            endPicked.CanvasGroup.alpha = scd2.Progress;
            yield return(null);
        }
        // Show dialogue message
        _dialogueManager.gameObject.SetActive(true);
        _dialogueManager.PlayDialogue(endPicked.Dialogue);

        // Wait click
        var nextEnding = false;

        _endingButton.onClick.AddListener(() => nextEnding = true);
        yield return(new WaitWhile(() => !nextEnding));

        _endingButton.onClick.RemoveAllListeners();

        // Show Credi Animation
        _dialogueManager.gameObject.SetActive(false);
        float creditDuration = 1f;

        _credit.blocksRaycasts = true;
        SpecialCountDown scd3 = new SpecialCountDown(creditDuration);

        while (!scd3.isDone)
        {
            _credit.alpha = scd3.Progress;
            yield return(null);
        }

        // Wait click
        bool next = false;

        _finishButton.onClick.AddListener(() => next = true);
        yield return(new WaitWhile(() => !next));

        yield break;
    }
Пример #6
0
    internal InGameNote Initialize(MusicBoard musicBoard)
    {
        _masterMusicBoard  = musicBoard;
        Activated          = true;
        CurrentRank        = ValidationRank.Null;
        _spriteComp.sprite = _brokenState;

        _startPosition       = transform.position;
        _timer               = new SpecialCountDown(_masterMusicBoard.MovementDuration);
        _destinationPosition = new Vector3(_masterMusicBoard.ValidationXPosition, _startPosition.y, _startPosition.z);
        return(this);
    }
Пример #7
0
    public static IEnumerator MoveTo(this Transform @this, Vector3 destination, float duration)
    {
        var startPosition = @this.position;
        var timer         = new SpecialCountDown(duration);

        while (!timer.isDone)
        {
            @this.position = Vector3.Lerp(startPosition, destination, timer.Progress);
            yield return(null);
        }
        @this.position = destination;

        yield break;
    }
Пример #8
0
    public static IEnumerator SpeedMoveAgent(this NavMeshAgent @this, Vector3 raycastPoint, float speedFactor = 0.6f, Func <bool> additionnalEndCondition = null)
    {
        var startPosition      = @this.transform.position;
        SpecialCountDown timer = new SpecialCountDown(speedFactor);

        while (!timer.isDone)
        {
            @this.transform.Translate(Vector3.Lerp(startPosition, raycastPoint, timer.Progress) - @this.transform.position);

            yield return(null);

            //if (additionnalEndCondition != null && additionnalEndCondition.Invoke()) break;
        }
        @this.transform.position = raycastPoint;

        yield break;
    }
Пример #9
0
    /// <summary>
    /// The Game Over routine
    /// </summary>
    internal void LaunchGameOver()
    {
        StartCoroutine(GameOverRoutine());
        IEnumerator GameOverRoutine()
        {
            // Fade to black & Music
            _fade.gameObject.SetActive(true);
            var initialVolume    = _musicSource.volume;
            SpecialCountDown scd = new SpecialCountDown(1);

            while (!scd.isDone)
            {
                _musicSource.volume = initialVolume - scd.Progress;
                _fade.alpha         = scd.Progress;
                yield return(null);
            }

            SceneManager.LoadScene(0);

            yield break;
        }
    }
Пример #10
0
    /// <summary>
    /// The fall petal animation
    /// </summary>
    /// <param name="petal">Which petal must me animated</param>
    public void Fall(Transform petal)
    {
        StartCoroutine(FallAnimation());
        IEnumerator FallAnimation()
        {
            Vector3          fallDirection     = (petal.position - _flowerHeart.position).normalized;
            Vector3          initialPosition   = petal.position;
            CanvasGroup      opacityController = petal.GetComponent <CanvasGroup>();
            SpecialCountDown scd = new SpecialCountDown(TimeOfPetalFall);

            // Control movement and opacity through code
            while (!scd.isDone)
            {
                petal.position          = initialPosition + fallDirection * (_transformAnimation.Evaluate(scd.Progress));
                opacityController.alpha = _opacityAnimation.Evaluate(scd.Progress);

                yield return(null);
            }

            petal.gameObject.SetActive(false);
            yield break;
        }
    }
Пример #11
0
    IEnumerator GameMasterRoutine()
    {
        _endCanvas.gameObject.SetActive(false);
        _startMenu.gameObject.SetActive(false);

        while (true)
        {
            // Show Menu
            _startMenu.gameObject.SetActive(true);
            yield return(null);

            // Trigg Go To Song
            Partition musicToLaunch = null;
            void TriggPartition(Partition p) => musicToLaunch = p;

            _startMenu.OnLaunchPartition += TriggPartition;
            yield return(new WaitWhile(() => musicToLaunch == null));

            _startMenu.OnLaunchPartition -= TriggPartition;

            // DisableMenu
            _startMenu.gameObject.SetActive(false);
            yield return(new WaitForSeconds(0.5f));

            // Start Music
            _musicProvider.LaunchMusic(musicToLaunch);
            OnSongStart?.Invoke();

            // Prepare Ending
            bool endGame = false;
            void TriggEndGame() => endGame = true;

            _musicProvider.OnFinishMusic += TriggEndGame;

            // GameProcess
            while (!endGame)
            {
#if UNITY_EDITOR
                if (Input.GetKeyDown(KeyCode.Space))
                {
                    break;
                }
#endif

                var direction = _musicProvider.NextNote();
                if (direction != Partition.VirtualNote.None)
                {
                    _musicBoard.CreateNote(_musicInput.MusicLines.First(i => i.Note == direction).Line);
                }

                _musicBoard.NextUpdate();
                _musicInput.InputPass();

                yield return(null);
            }

            // Finish the song
            SpecialCountDown scd = new SpecialCountDown(4);
            while (!scd.isDone)
            {
                _musicBoard.NextUpdate();
                _musicInput.InputPass();
                yield return(null);
            }

            OnSongEnd?.Invoke();

            // Show EndGame Menu & wait button
            _endCanvas.gameObject.SetActive(true);
            bool closeEndMenu = false;
            void TriggEndMenuButton() => closeEndMenu = true;

            _endButton.onClick.AddListener(TriggEndMenuButton);
            yield return(new WaitWhile(() => !closeEndMenu && !Input.GetButtonDown("Fire_A")));

            _endButton.onClick.RemoveListener(TriggEndMenuButton);
            _endCanvas.gameObject.SetActive(false);
        }
    }