revert pinned pieces computation
This commit is contained in:
parent
2d3ae075d9
commit
c28c40186e
1 changed files with 20 additions and 20 deletions
|
|
@ -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())
|
||||||
|
| (lookup::rook(king_square, blockers_x_ray) & theirs.rook()))
|
||||||
.map(|sq| lookup::segment(king_square, sq))
|
.map(|sq| lookup::segment(king_square, sq))
|
||||||
.reduce_or();
|
.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 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
|
||||||
|
& pinned
|
||||||
|
& lookup::line(king_square, from)
|
||||||
|
& lookup::targets(role, from, blockers))
|
||||||
|
.map(|to| RawMove {
|
||||||
kind: MoveType::PieceMove,
|
kind: MoveType::PieceMove,
|
||||||
from,
|
from,
|
||||||
to,
|
to,
|
||||||
role,
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue