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