@@ -10,6 +10,7 @@ import { comparePositions } from './Utilities';
10
10
import { Coin } from './items/Coin' ;
11
11
import { Item } from './items/Items' ;
12
12
import { Trap } from './items/Trap' ;
13
+ import { King } from './pieces/King' ;
13
14
import { Pawn } from './pieces/Pawn' ;
14
15
import { Piece } from './pieces/Pieces' ;
15
16
import { Position , Square , getItemByPosition } from './pieces/PiecesUtilities' ;
@@ -74,7 +75,7 @@ function onActionPieceToSquare(
74
75
targetSquare : Square ,
75
76
) {
76
77
if ( game . getIsCaslting ( ) ) {
77
- const isValidCastling = castle ( draggedPiece , targetSquare ) ;
78
+ const isValidCastling = castle ( draggedPiece as King , targetSquare ) ;
78
79
79
80
if ( ! isValidCastling ) {
80
81
game . switchIsCastling ( ) ;
@@ -93,33 +94,15 @@ function onActionPieceToSquare(
93
94
}
94
95
95
96
function castle (
96
- kingPiece : Piece ,
97
+ kingPiece : King ,
97
98
targetSquare : Square ,
98
99
) {
99
- const possibleRooks = game . getPieces ( ) . filter ( ( piece ) => {
100
- return (
101
- piece . player === game . getCurrentPlayer ( ) &&
102
- ! piece . hasMoved &&
103
- piece . name === 'Rook'
104
- ) ;
105
- } ) ;
106
-
107
100
const targetXPosition = targetSquare . position . coordinates [ 0 ] ;
108
101
const kingXPosition = kingPiece . position . coordinates [ 0 ] ;
109
102
const deltaX = targetXPosition - kingXPosition ;
110
- // Depends on if it's Kingside or Queenside castling
111
103
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 ) ;
123
106
if ( ! rookPiece ) return false ;
124
107
125
108
const rookPieceTargetPosition : Position = {
0 commit comments