public void MoveChessman(int x, int y) { if (allowedMoves[x, y]) { Chessman opponent = Chessmans[x, y]; if (opponent != null) { // Capture an opponent piece ActiveChessmans.Remove(opponent.gameObject); Destroy(opponent.gameObject); } // -------EnPassant Move Manager------------ // If it is an EnPassant move than Destroy the opponent if (EnPassant[0] == x && EnPassant[1] == y && SelectedChessman.GetType() == typeof(Pawn)) { if (isWhiteTurn) { opponent = Chessmans[x, y + 1]; } else { opponent = Chessmans[x, y - 1]; } ActiveChessmans.Remove(opponent.gameObject); Destroy(opponent.gameObject); } // Reset the EnPassant move EnPassant[0] = EnPassant[1] = -1; // Set EnPassant available for opponent if (SelectedChessman.GetType() == typeof(Pawn)) { //-------Promotion Move Manager------------ if (y == 7) { ActiveChessmans.Remove(SelectedChessman.gameObject); Destroy(SelectedChessman.gameObject); SpawnChessman(10, new Vector3(x, 0, y)); SelectedChessman = Chessmans[x, y]; } if (y == 0) { ActiveChessmans.Remove(SelectedChessman.gameObject); Destroy(SelectedChessman.gameObject); SpawnChessman(4, new Vector3(x, 0, y)); SelectedChessman = Chessmans[x, y]; } //-------Promotion Move Manager Over------- if (SelectedChessman.currentY == 1 && y == 3) { EnPassant[0] = x; EnPassant[1] = y - 1; } if (SelectedChessman.currentY == 6 && y == 4) { EnPassant[0] = x; EnPassant[1] = y + 1; } } // -------EnPassant Move Manager Over------- // -------Castling Move Manager------------ // If the selectef chessman is King and is trying Castling move which needs two steps if (SelectedChessman.GetType() == typeof(King) && System.Math.Abs(x - SelectedChessman.currentX) == 2) { // King Side (towards (0, 0)) if (x - SelectedChessman.currentX < 0) { // Moving Rook1 Chessmans[x + 1, y] = Chessmans[x - 1, y]; Chessmans[x - 1, y] = null; Chessmans[x + 1, y].SetPosition(x + 1, y); Chessmans[x + 1, y].transform.position = new Vector3(x + 1, 0, y); Chessmans[x + 1, y].isMoved = true; } // Queen side (away from (0, 0)) else { // Moving Rook2 Chessmans[x - 1, y] = Chessmans[x + 2, y]; Chessmans[x + 2, y] = null; Chessmans[x - 1, y].SetPosition(x - 1, y); Chessmans[x - 1, y].transform.position = new Vector3(x - 1, 0, y); Chessmans[x - 1, y].isMoved = true; } // Note : King will move as a SelectedChessman by this function later } // -------Castling Move Manager Over------- Chessmans[SelectedChessman.currentX, SelectedChessman.currentY] = null; Chessmans[x, y] = SelectedChessman; SelectedChessman.SetPosition(x, y); SelectedChessman.transform.position = new Vector3(x, 0, y); SelectedChessman.isMoved = true; isWhiteTurn = !isWhiteTurn; // to be deleted // printBoard(); } // De-select the selected chessman SelectedChessman = null; // Disabling all highlights BoardHighlights.Instance.DisableAllHighlights(); // ------- King Check Alert Manager ----------- // Is it Check to the King // If now White King is in Check if (isWhiteTurn) { if (WhiteKing.InDanger()) { BoardHighlights.Instance.SetTileCheck(WhiteKing.currentX, WhiteKing.currentY); } } // If now Black King is in Check else { if (BlackKing.InDanger()) { BoardHighlights.Instance.SetTileCheck(BlackKing.currentX, BlackKing.currentY); } } // ------- King Check Alert Manager Over ---- // Check if it is Checkmate isCheckmate(); }