Example #1
0
        protected virtual void OnMouseClick(object sender, MouseEventArgs e)
        {
            if (HoverPosition == null)
            {
                ThreatenedPositions = Enumerable.Empty <Position>();
                return;
            }

            if (!ThreatenedPositions.Contains(HoverPosition) && ChessRepresentation[HoverPosition] == null)
            {
                return;
            }

            var mechanism = new ChessMechanism();

            SelectedPosition = HoverPosition;
            var selectedPositionOwner = _chessRepresentation[SelectedPosition]?.Owner;

            if (selectedPositionOwner == null)
            {
                ThreatenedPositions = Enumerable.Empty <Position>();
                return;
            }

            ThreatenedPositions = mechanism.GenerateMoves(_chessRepresentation, selectedPositionOwner).OfType <BaseChessMove>()
                                  .Where(x => x.From == SelectedPosition).Select(x => x.To).ToList();
        }
Example #2
0
        protected override void OnMouseClick(MouseEventArgs e)
        {
            if (SelectedPosition == null)
            {
                base.OnMouseClick(e);
                return;
            }

            if (HoverPosition == SelectedPosition)
            {
                SelectedPosition    = null;
                ThreatenedPositions = Enumerable.Empty <Position>();
                return;
            }

            if (HoverPosition == TargetPosition)
            {
                TargetPosition = null;
                return;
            }

            if (ThreatenedPositions.Contains(HoverPosition))
            {
                TargetPosition = HoverPosition;
                var move = GetSelectedChessMove();
                if (move == null)
                {
                    return;
                }

                if (Enabled)
                {
                    ChessRepresentation = _mechanism.ApplyMove(ChessRepresentation, move);
                    OnValidMoveSelected?.Invoke(this, new ChessboardMoveSelectedEventArg(move, ChessRepresentation.CurrentPlayer));
                }
            }
        }