Esempio n. 1
0
 public void UpdatePosition(Board board)
 {
     for (var rank = 0; rank < 16; rank++)
     {
         for (var file = 0; file < 16; file++)
         {
             var coord = new Coord(file, rank);
             var piece = board.Square[BoardRepresentation.IndexFromCoord(coord.fileIndex, coord.rankIndex)];
             squarePieceRenderers[file, rank].sprite             = pieceTheme.GetPieceSprite(piece);
             squarePieceRenderers[file, rank].transform.position = PositionFromCoord(file, rank, pieceDepth);
         }
     }
 }
Esempio n. 2
0
        private void TryMakeMove(Coord startSquare, Coord targetSquare)
        {
            var startIndex  = BoardRepresentation.IndexFromCoord(startSquare);
            var targetIndex = BoardRepresentation.IndexFromCoord(targetSquare);
            var moveIsLegal = false;
            var chosenMove  = new Move();

            var moveGenerator        = new MoveGenerator();
            var wantsKnightPromotion = Input.GetKey(KeyCode.LeftAlt);

            var legalMoves = moveGenerator.GenerateMoves(board);

            for (var i = 0; i < legalMoves.Count; i++)
            {
                var legalMove = legalMoves[i];

                if (legalMove.StartSquare == startIndex && legalMove.TargetSquare == targetIndex)
                {
                    if (legalMove.IsPromotion)
                    {
                        if (legalMove.MoveFlag == Move.Flag.PromoteToQueen && wantsKnightPromotion)
                        {
                            continue;
                        }
                        if (legalMove.MoveFlag != Move.Flag.PromoteToQueen && !wantsKnightPromotion)
                        {
                            continue;
                        }
                    }

                    moveIsLegal = true;
                    chosenMove  = legalMove;
                    //	Debug.Log (legalMove.PromotionPieceType);
                    break;
                }
            }

            if (moveIsLegal)
            {
                ChoseMove(chosenMove);
                currentState = InputState.None;
            }
            else
            {
                CancelPieceSelection();
            }
        }
Esempio n. 3
0
        public void HighlightLegalMoves(Board board, Coord fromSquare)
        {
            if (showLegalMoves)
            {
                var moves = moveGenerator.GenerateMoves(board);

                for (var i = 0; i < moves.Count; i++)
                {
                    var move = moves[i];
                    if (move.StartSquare == BoardRepresentation.IndexFromCoord(fromSquare))
                    {
                        var coord = BoardRepresentation.CoordFromIndex(move.TargetSquare);
                        SetSquareColour(coord, boardTheme.lightSquares.legal, boardTheme.darkSquares.legal);
                    }
                }
            }
        }
Esempio n. 4
0
 private void HandlePieceSelection(Vector2 mousePos)
 {
     if (Input.GetMouseButtonDown(0))
     {
         if (boardUI.TryGetSquareUnderMouse(mousePos, out selectedPieceSquare))
         {
             var index = BoardRepresentation.IndexFromCoord(selectedPieceSquare);
             // If square contains a piece, select that piece for dragging
             if (Piece.IsColour(board.Square[index], board.ColourToMove))
             {
                 boardUI.HighlightLegalMoves(board, selectedPieceSquare);
                 boardUI.SelectSquare(selectedPieceSquare);
                 currentState = InputState.DraggingPiece;
             }
         }
     }
 }
Esempio n. 5
0
 void HandlePieceSelection(Vector2 mousePos)
 {
     if (Input.GetMouseButtonDown(0))
     {
         if (boardUI.TryGetSquareUnderMouse(mousePos, out selectedPieceSquare))
         {
             int index = BoardRepresentation.IndexFromCoord(selectedPieceSquare);
             // Podniesienie figury jeśli jest w danym kwadracie
             if (Piece.IsColour(board.Square[index], board.ColourToMove))
             {
                 boardUI.HighlightLegalMoves(board, selectedPieceSquare);
                 boardUI.SelectSquare(selectedPieceSquare);
                 currentState = InputState.DraggingPiece;
             }
         }
     }
 }
Esempio n. 6
0
        private void HandlePiecePlacement(Vector2 mousePos)
        {
            Coord targetSquare;

            if (boardUI.TryGetSquareUnderMouse(mousePos, out targetSquare))
            {
                if (targetSquare.Equals(selectedPieceSquare))
                {
                    boardUI.ResetPiecePosition(selectedPieceSquare);
                    if (currentState == InputState.DraggingPiece)
                    {
                        currentState = InputState.PieceSelected;
                    }
                    else
                    {
                        currentState = InputState.None;
                        boardUI.DeselectSquare(selectedPieceSquare);
                    }
                }
                else
                {
                    var targetIndex =
                        BoardRepresentation.IndexFromCoord(targetSquare.fileIndex, targetSquare.rankIndex);
                    if (Piece.IsColour(board.Square[targetIndex], board.ColourToMove) && board.Square[targetIndex] != 0)
                    {
                        CancelPieceSelection();
                        HandlePieceSelection(mousePos);
                    }
                    else
                    {
                        TryMakeMove(selectedPieceSquare, targetSquare);
                    }
                }
            }
            else
            {
                CancelPieceSelection();
            }
        }