/// <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; } } }
/// <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; }
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; } }
/// <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; } }
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; }
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); }
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; }
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; }
/// <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; } }
/// <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; } }
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); } }