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