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