protected override bool IsValidMove(Move move, bool validateCheck, bool careAboutWhoseTurnItIs)
{
ChessUtilities.ThrowIfNull(move, "move");
if (move.OriginalPosition.Equals(move.NewPosition))
return false;
Piece piece = GetPieceAt(move.OriginalPosition.File, move.OriginalPosition.Rank);
if (careAboutWhoseTurnItIs && move.Player != WhoseTurn) return false;
if (piece.Owner != move.Player) return false;
Piece pieceAtDestination = GetPieceAt(move.NewPosition);
if (pieceAtDestination != null && (pieceAtDestination.Owner == move.Player || piece is King))
{
return false;
}
if (!piece.IsValidMove(move, this))
{
return false;
}
if (validateCheck && WouldBeSuicideOrInvalidSelfMoveInCheck(move, move.Player))
{
return false;
}
else if (WouldBeSuicide(move, move.Player))
{
return false;
}
return true;
}