Пример #1
0
        private void UndoCommandHandler()
        {
            IsAcceptOpen = false;

            // If no one has scored we are at the start
            if (!_currentGameService.HasAnyOneScored(ParticipatingPlayers.ToList()))
            {
                return;
            }

            if (ParticipatingPlayers[_currentPlayer].DartsToThrow < 3)
            {
                // Score has not yet been accepted so just cancel the dialog
                RejectScoreCommandHandler();
                return;
            }

            _currentPlayer--;

            if (_currentPlayer < 0)
            {
                _currentPlayer = ParticipatingPlayers.Count - 1;
            }

            if (!ParticipatingPlayers[_currentPlayer].UndoItems.Any())
            {
                return;
            }

            _currentGameService.Undo(GetGameParameters());

            ParticipatingPlayers[_currentPlayer].RemoveDartScores();

            var turnNumber =
                ParticipatingPlayers[_currentPlayer].Scores[ParticipatingPlayers[_currentPlayer].Scores.Count - 1]
                .TurnNumber;

            for (var index = ParticipatingPlayers[_currentPlayer].Scores.Count - 1; index >= 0; index--)
            {
                var score = ParticipatingPlayers[_currentPlayer].Scores[index];

                if (score.TurnNumber == turnNumber)
                {
                    ParticipatingPlayers[_currentPlayer].Scores.Remove(score);
                }
            }

            SetCurrentPlayer(_currentPlayer);

            AnalyseScoreForHints();
        }