internal static UInt64 GetAllTargets(UInt64 king, bool pieceColor, Board board) { UInt64 kingMoves = KingAttacks[(BitOps.bitScanForward(king))]; //Cannot castle if already castled or is in check UInt64 empty; if (pieceColor && !board.playerHasCastled && !board.isCheck) { empty = board.GetEmptySquares(); //Right castle if (BitOps.IsBitSet(empty, 61) && BitOps.IsBitSet(empty, 62) && BitOps.IsBitSet(board.WR, 63)) { kingMoves |= (1UL << 62); } //Left castle else if (BitOps.IsBitSet(empty, 59) && BitOps.IsBitSet(empty, 58) && BitOps.IsBitSet(empty, 57) && BitOps.IsBitSet(board.WR, 56)) { kingMoves |= (1UL << 58); } } else if (!pieceColor && !board.computerHasCastled && !board.isCheck) { empty = board.GetEmptySquares(); //Right castle if (BitOps.IsBitSet(empty, 5) && BitOps.IsBitSet(empty, 6) && BitOps.IsBitSet(board.BR, 7)) { kingMoves |= (1UL << 6); } //Left castle else if (BitOps.IsBitSet(empty, 3) && BitOps.IsBitSet(empty, 2) && BitOps.IsBitSet(empty, 1) && BitOps.IsBitSet(board.BR, 0)) { kingMoves |= (1UL << 2); } } return(kingMoves & ~board.GetColorPieces(pieceColor)); }