public override MoveType ApplyMove(Move move, bool alreadyValidated)
{
MoveType type = base.ApplyMove(move, alreadyValidated);
if (!type.HasFlag(MoveType.Capture))
return type;
int[][] surroundingSquares = new int[][] { new int[] { 1, 0 }, new int[] { 1, 1 }, new int[] { 0, 1 }, new int[] { -1, -1 },
new int[] { -1, 0 }, new int[] { 0, -1 }, new int[] { -1, 1 }, new int[] { 1, -1 } };
SetPieceAt(move.NewPosition.File, move.NewPosition.Rank, null);
foreach (int[] surroundingSquaresDistance in surroundingSquares)
{
File f = move.NewPosition.File + surroundingSquaresDistance[0];
int r = move.NewPosition.Rank + surroundingSquaresDistance[1];
if (f < 0 || (int)f >= BoardWidth || r < 1 || r > BoardHeight)
continue;
if (!(GetPieceAt(f, r) is Pawn))
{
SetPieceAt(f, r, null);
}
}
if (CanBlackCastleKingSide && GetPieceAt(File.H, 8) == null)
{
CanBlackCastleKingSide = false;
}
if (CanBlackCastleQueenSide && GetPieceAt(File.A, 8) == null)
{
CanBlackCastleQueenSide = false;
}
if (CanWhiteCastleKingSide && GetPieceAt(File.H, 1) == null)
{
CanWhiteCastleKingSide = false;
}
if (CanWhiteCastleQueenSide && GetPieceAt(File.A, 1) == null)
{
CanWhiteCastleQueenSide = false;
}
return type;
}