UNPKG

chlss

Version:

Open-Source Chess Engine in TypeScript.

97 lines (96 loc) 4.54 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CastlingMoveGenerator = void 0; const boardPosition_1 = require("./boardPosition"); const colour_1 = require("./colour"); const moveGenerator_1 = require("./moveGenerator"); const pieces_1 = __importDefault(require("./pieces")); exports.CastlingMoveGenerator = { generateCastlingMoves(board, colour, moveList) { const castlingColour = this.getCastlingColourForColour(board.castling, colour); this.tryAddQueenSideCastling(board, colour, castlingColour, moveList); this.tryAddKingSideCastling(board, colour, castlingColour, moveList); }, getCastlingColourForColour(castling, colour) { return colour == colour_1.Colours.white ? castling.white : castling.black; }, tryAddKingSideCastling(board, colour, castlingColour, moveList) { if (!castlingColour.kingSide) return; if (colour == colour_1.Colours.white) { if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 62, 61))) return; const enemyMoves = []; moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null); if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 60, 62, 61))) return; moveList.push({ from: 60, to: 63, piece: pieces_1.default.WhiteKing, targetPiece: pieces_1.default.WhiteRook, setEnPassant: null, promotion: undefined, isPromo: false }); } else if (colour == colour_1.Colours.black) { if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 5, 6))) return; const enemyMoves = []; moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null); if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 5, 6, 4))) return; moveList.push({ from: 4, to: 7, piece: pieces_1.default.BlackKing, targetPiece: pieces_1.default.BlackRook, setEnPassant: null, promotion: undefined, isPromo: false }); } }, tryAddQueenSideCastling(board, colour, castlingColour, moveList) { if (!castlingColour.queenSide) return; if (colour == colour_1.Colours.white) { if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 59, 58, 57))) return; const enemyMoves = []; moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null); if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 59, 58, 60))) return; moveList.push({ from: 60, to: 56, piece: pieces_1.default.WhiteKing, targetPiece: pieces_1.default.WhiteRook, setEnPassant: null, promotion: undefined, isPromo: false }); } else if (colour == colour_1.Colours.black) { if (!(boardPosition_1.BoardPosition.isSquaresEmpty(board.position, 1, 2, 3))) return; const enemyMoves = []; moveGenerator_1.MoveGenerator.generatePseudoLegalMoves(board.position, colour_1.Colours.inverseColour(colour), enemyMoves, null); if (!(boardPosition_1.BoardPosition.isSquaresNotUnderAttack(colour_1.Colours.inverseColour(colour), enemyMoves, board.position, 1, 2, 3))) return; moveList.push({ from: 4, to: 0, piece: pieces_1.default.BlackKing, targetPiece: pieces_1.default.BlackRook, setEnPassant: null, promotion: undefined, isPromo: false }); } } };