private IEnumerator SwitchMonster(MonsterObj newMonster) { if (_playerMonster.Monster.CurrentHp > 0) { yield return(_dialogBox.TypeDialog($"{_playerMonster.Monster.Base.Name}, fall back!")); _playerMonster.PlayDownedAnimation(); //TODO - create animation for returning to party yield return(YieldHelper.TwoSeconds); } _playerMonster.Setup(newMonster); _dialogBox.SetMoveList(newMonster.Moves); yield return(_dialogBox.TypeDialog($"It's your turn now, {newMonster.Base.Name}!")); // Allow player to switch monsters after enemy replaces a downed monster. if (_prevState == null) { _state = BattleState.ExecutingTurn; } else if (_prevState == BattleState.ChoiceSelection) { _prevState = null; StartCoroutine(SwitchEnemyMonster()); } }
private IEnumerator HandleDownedMonster(BattleMonster downedMonster) { _isMonsterDown = true; if (downedMonster.IsPlayerMonster) { yield return(_dialogBox.TypeDialog($"{downedMonster.Monster.Base.Name} has been taken down!")); } else { yield return(_dialogBox.TypeDialog($"Enemy {downedMonster.Monster.Base.Name} has been taken down!")); } downedMonster.PlayDownedAnimation(); yield return(YieldHelper.TwoSeconds); if (!downedMonster.IsPlayerMonster) { // Setup exp gain variables. int expBase = downedMonster.Monster.Base.ExpGiven; int enemyLevel = downedMonster.Monster.Level; float battlerBonus = _isCharBattle ? 1.5f : 1f; // Handle exp gain. int expGain = Mathf.FloorToInt(expBase * enemyLevel * battlerBonus / 7); _playerMonster.Monster.Exp += expGain; yield return(_dialogBox.TypeDialog($"{_playerMonster.Monster.Base.Name} has gained {expGain.ToString()} experience!")); yield return(_playerMonster.Hud.SlideExp()); // While loop in case the monster gains more than 1 level. while (_playerMonster.Monster.CheckForLevelUp()) { _playerMonster.Hud.SetLevel(); yield return(_dialogBox.TypeDialog($"{_playerMonster.Monster.Base.Name} has leveled up, they are now level {_playerMonster.Monster.Level.ToString()}!")); yield return(_playerMonster.Hud.SlideExp(true)); // Learn a new move. LearnableMove newMove = _playerMonster.Monster.GetLearnableMove(); if (newMove == null) { continue; } if (_playerMonster.Monster.Moves.Count < MonsterBase.MaxNumberOfMoves) { _playerMonster.Monster.LearnMove(newMove); _dialogBox.SetMoveList(_playerMonster.Monster.Moves); yield return(_dialogBox.TypeDialog($"{_playerMonster.Monster.Base.Name} has learned {newMove.Base.Name}!")); } else { // Forget an existing move first. yield return(ForgetMoveSelection(_playerMonster.Monster, newMove)); } } yield return(YieldHelper.OneSecond); } // Wait until move learning is finished before calling CheckIfBattleIsOver. yield return(new WaitUntil(() => _state == BattleState.ExecutingTurn)); CheckIfBattleIsOver(downedMonster); }