protected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); if (e.ChangedButton != MouseButton.Left) { return; } _mouseDown = true; _mouseDownPoint = e.GetPosition(Grid); _clickedSquare = SquareAt(e.GetPosition(Grid)); if (_clickedSquare == null) { return; } if (_selected && _possibleMoves.Contains(_clickedSquare)) { return; } ResetBoardColor(); _selectedPiece = _clickedSquare.PieceView; //--Verified--// //Concerned controllers to get the possible moves List <BoardViewPlayerController> concernedControllers = BoardViewPlayerControllers.FindAll( x => (x.Player.Color == (_selectedPiece?.Piece.Color) && x.IsPlayable)); if (concernedControllers.Count == 0) { return; } _initDragAndDropOnMouseMove = true; //Possible move drawing foreach (Square square in concernedControllers.First().PossibleMoves(_selectedPiece.Piece)) { SquareView squareView = Grid.Children.Cast <SquareView>() .First(x => Grid.GetRow(x) == square.Y && Grid.GetColumn(x) == square.X); squareView.SetResourceReference(BackgroundProperty, (square.X + square.Y) % 2 == 0 ? "CleanWindowCloseButtonBackgroundBrush" : "CleanWindowCloseButtonPressedBackgroundBrush"); _possibleMoves.Add(squareView); } }
public void GameStateChanged(BoardState state) { SquareView squareView = null; ResetBoardColor(); switch (state) { case BoardState.Normal: if (_lastChangedSquareView != null) { ResetSquareViewColor(_lastChangedSquareView); } break; case BoardState.WhiteCheck: squareView = SquareViews.First( x => (x.Square?.Piece?.Type == Type.King) && (x.Square?.Piece?.Color == Color.White)); squareView.SetResourceReference(BackgroundProperty, "ValidationBrush5"); break; case BoardState.BlackCheck: squareView = SquareViews.First( x => (x.Square?.Piece?.Type == Type.King) && (x.Square?.Piece?.Color == Color.Black)); squareView.SetResourceReference(BackgroundProperty, "ValidationBrush5"); break; case BoardState.BlackCheckMate: squareView = SquareViews.First( x => (x.Square?.Piece?.Type == Type.King) && (x.Square?.Piece?.Color == Color.Black)); squareView.SetResourceReference(BackgroundProperty, "TextBrush"); break; case BoardState.WhiteCheckMate: squareView = SquareViews.First( x => (x.Square?.Piece?.Type == Type.King) && (x.Square?.Piece?.Color == Color.White)); squareView.SetResourceReference(BackgroundProperty, "TextBrush"); break; case BoardState.BlackPat: squareView = SquareViews.First( x => (x.Square?.Piece?.Type == Type.King) && (x.Square?.Piece?.Color == Color.Black)); squareView.SetResourceReference(BackgroundProperty, "WhiteColorBrush"); break; case BoardState.WhitePat: squareView = SquareViews.First( x => (x.Square?.Piece?.Type == Type.King) && (x.Square?.Piece?.Color == Color.White)); squareView.SetResourceReference(BackgroundProperty, "WhiteColorBrush"); break; default: throw new ArgumentOutOfRangeException(nameof(state), state, null); } _lastChangedSquareView = squareView; }
private static void ResetSquareViewColor(SquareView squareView) { squareView.SetResourceReference(BackgroundProperty, (squareView.Square.X + squareView.Square.Y) % 2 == 0 ? "AccentColorBrush" : "AccentColorBrush4"); }