Skip to content

Commit 4c39aad

Browse files
committed
[trivial] Improved castling logic
1 parent cfb3238 commit 4c39aad

File tree

1 file changed

+5
-22
lines changed

1 file changed

+5
-22
lines changed

development/code/logic/PieceLogic.ts

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { comparePositions } from './Utilities';
1010
import { Coin } from './items/Coin';
1111
import { Item } from './items/Items';
1212
import { Trap } from './items/Trap';
13+
import { King } from './pieces/King';
1314
import { Pawn } from './pieces/Pawn';
1415
import { Piece } from './pieces/Pieces';
1516
import { Position, Square, getItemByPosition } from './pieces/PiecesUtilities';
@@ -74,7 +75,7 @@ function onActionPieceToSquare(
7475
targetSquare: Square,
7576
) {
7677
if (game.getIsCaslting()) {
77-
const isValidCastling = castle(draggedPiece, targetSquare);
78+
const isValidCastling = castle(draggedPiece as King, targetSquare);
7879

7980
if (!isValidCastling) {
8081
game.switchIsCastling();
@@ -93,33 +94,15 @@ function onActionPieceToSquare(
9394
}
9495

9596
function castle(
96-
kingPiece: Piece,
97+
kingPiece: King,
9798
targetSquare: Square,
9899
) {
99-
const possibleRooks = game.getPieces().filter((piece) => {
100-
return (
101-
piece.player === game.getCurrentPlayer() &&
102-
!piece.hasMoved &&
103-
piece.name === 'Rook'
104-
);
105-
});
106-
107100
const targetXPosition = targetSquare.position.coordinates[0];
108101
const kingXPosition = kingPiece.position.coordinates[0];
109102
const deltaX = targetXPosition - kingXPosition;
110-
// Depends on if it's Kingside or Queenside castling
111103
const isKingsideCastling = deltaX > 0;
112-
const rookFilter = (piece: Piece) => {
113-
const isValidCastling = isKingsideCastling
114-
? piece.position.coordinates[0] > kingPiece.position.coordinates[0]
115-
: piece.position.coordinates[0] < kingPiece.position.coordinates[0];
116-
117-
const pieceBoardId = piece.position.boardId;
118-
const kingBoardId = kingPiece.position.boardId;
119-
const areOnTheSameBoard = pieceBoardId === kingBoardId;
120-
return isValidCastling && areOnTheSameBoard;
121-
};
122-
const rookPiece = possibleRooks.find(rookFilter);
104+
105+
const rookPiece = kingPiece.getRookForCastling(kingPiece.player, isKingsideCastling);
123106
if (!rookPiece) return false;
124107

125108
const rookPieceTargetPosition: Position = {

0 commit comments

Comments
 (0)