public bool IsLegalEpMove(int fromIndex) { if (EpIndex == 0) { // required for tt-moves return(false); } // do-move and hit Pieces[ColorToMoveInverse][Pawn] ^= Util.PowerLookup[EpIndex + ColorFactor8[ColorToMoveInverse]]; // check if is in check var isInCheck = CheckUtil.IsInCheck(KingIndex[ColorToMove], ColorToMove, Pieces[ColorToMoveInverse], (Pieces[ColorToMove][All] ^ Util.PowerLookup[fromIndex] ^ Util.PowerLookup[EpIndex]) | (Pieces[ColorToMoveInverse][All] ^ Util.PowerLookup[EpIndex + ColorFactor8[ColorToMoveInverse]])); // undo-move and hit Pieces[ColorToMoveInverse][Pawn] |= Util.PowerLookup[EpIndex + ColorFactor8[ColorToMoveInverse]]; return(!isInCheck); }
private bool IsLegalNonKingMove(int move) { return(!CheckUtil.IsInCheck(KingIndex[ColorToMove], ColorToMove, Pieces[ColorToMoveInverse], AllPieces ^ Util.PowerLookup[MoveUtil.GetFromIndex(move)] ^ Util.PowerLookup[MoveUtil.GetToIndex(move)])); }