Beispiel #1
0
        private void QueryPawnPromotion(GameMove move)
        {
            PromotionContainerGrid.Width      = BoardGrid.ActualWidth;
            PromotionContainerGrid.Height     = BoardGrid.ActualHeight;
            PromotionContainerGrid.Visibility = Visibility.Visible;

            var promotionPopupClosed = new ValueContainer <EventHandler>();

            promotionPopupClosed.Value =
                (sender, args) =>
            {
                _promotionPopup.Closed -= promotionPopupClosed.Value;

                //// ReSharper disable once InvertIf
                if (_promotionPopup.Tag is PieceType promotion && promotion != PieceType.None)
                {
                    var promotionMove = move.MakePromotion(promotion);
                    MakeMoveInternal(promotionMove);
                }
            };

            _promotionPopup.Closed += promotionPopupClosed.Value;

            _promotionPopup.Tag    = PieceType.None;
            _promotionPopup.IsOpen = true;
        }
Beispiel #2
0
        private void MakeMove(GameMove move)
        {
            var currentGameBoard = ViewModel.CurrentGameBoard;

            if (currentGameBoard is null)
            {
                return;
            }

            var isPawnPromotion = currentGameBoard.IsPawnPromotionMove(move);

            if (isPawnPromotion)
            {
                move = move.MakePromotion(ChessHelper.DefaultPromotion);
            }

            if (!currentGameBoard.IsValidMove(move))
            {
                ViewModel.ResetSelectionMode();
                return;
            }

            if (isPawnPromotion)
            {
                QueryPawnPromotion(move);
                return;
            }

            MakeMoveInternal(move);
        }