Exemplo n.º 1
0
        public ScreenInputProcessResult ProcessInput(ConsoleKey key)
        {
            var result = new ScreenInputProcessResult
            {
                RerenderFlag = true
            };

            var prevChar = _activeCharacter;

            _activeCharacter = Fight.Queue.First().Character;

            if (prevChar != _activeCharacter)
            {
                _gameLog.WriteLine($"{_activeCharacter.Name}'s turn.");

                Fight.BeginTurn(_activeCharacter);

                return(result);
            }

            var fightResult = _activeCharacter.FightComponent.Process(key);

            var fightUpdateResult = Fight.UpdateFight();

            fightUpdateResult.DeadChars.ForEach(c =>
            {
                _gameLog.WriteLine($"{c.Character.Name} ({c.Faction}) died.");
            });

            switch (fightUpdateResult.FightOutcome)
            {
            case FightOutcome.PlayerWin:
                _gameLog.WriteLine("");
                _gameLog.WriteLine(LexicalHelper.GetVictoryString());
                _gameLog.WriteLine("");

                result.SwitchState = GameState.World;
                Fight.PostFight();
                break;

            case FightOutcome.PlayerLose:
                _gameLog.WriteLine("");
                _gameLog.WriteLine(LexicalHelper.GetDefeatString());
                _gameLog.WriteLine("");

                result.SwitchState = GameState.GameOver;
                break;
            }

            if (fightResult.TurnEnd || _activeCharacter?.Stats.ActionPoints == 0)
            {
                Fight.EndCurrentTurn();
                _activeCharacter    = null;
                result.RerenderFlag = true;
                return(result);
            }

            return(result);
        }