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