1
0
Fork 0

revert pinned pieces computation

This commit is contained in:
Paul-Nicolas Madelaine 2025-11-03 16:07:38 +01:00
parent 2d3ae075d9
commit c28c40186e

View file

@ -1050,13 +1050,10 @@ impl Position {
} }
let blockers_x_ray = blockers & !(x | y); let blockers_x_ray = blockers & !(x | y);
let pinned_diagonally = (lookup::bishop(king_square, blockers_x_ray) & theirs.bishop()) let pinned = ((lookup::bishop(king_square, blockers_x_ray) & theirs.bishop())
.map(|sq| lookup::segment(king_square, sq)) | (lookup::rook(king_square, blockers_x_ray) & theirs.rook()))
.reduce_or(); .map(|sq| lookup::segment(king_square, sq))
let pinned_horizontally = (lookup::rook(king_square, blockers_x_ray) & theirs.rook()) .reduce_or();
.map(|sq| lookup::segment(king_square, sq))
.reduce_or();
let pinned = pinned_diagonally | pinned_horizontally;
let checker = checkers.first(); let checker = checkers.first();
let block_check = checker let block_check = checker
@ -1228,28 +1225,31 @@ impl Position {
// pinned pieces // pinned pieces
{ {
let aux = |visitor: &mut T, role, mask| { let aux = |visitor: &mut T, role| {
for from in global_mask_from & *ours.get(role) & mask { for from in global_mask_from & *ours.get(role) & pinned {
visitor.moves( visitor.moves(
(global_mask_to & !us & pinned & lookup::line(king_square, from)).map( (global_mask_to
|to| RawMove { & !us
kind: MoveType::PieceMove, & pinned
from, & lookup::line(king_square, from)
to, & lookup::targets(role, from, blockers))
role, .map(|to| RawMove {
}, kind: MoveType::PieceMove,
), from,
to,
role,
}),
) )
} }
}; };
if visitor.roles(Role::Bishop) { if visitor.roles(Role::Bishop) {
aux(visitor, Role::Bishop, pinned_diagonally); aux(visitor, Role::Bishop);
} }
if visitor.roles(Role::Rook) { if visitor.roles(Role::Rook) {
aux(visitor, Role::Rook, pinned_horizontally); aux(visitor, Role::Rook);
} }
if visitor.roles(Role::Queen) { if visitor.roles(Role::Queen) {
aux(visitor, Role::Queen, pinned); aux(visitor, Role::Queen);
} }
} }
} }