pinned pieces
This commit is contained in:
parent
0547b9eafd
commit
71d0d5e0d8
1 changed files with 19 additions and 18 deletions
|
|
@ -1052,10 +1052,13 @@ impl Position {
|
|||
}
|
||||
|
||||
let blockers_x_ray = blockers & !(x | y);
|
||||
let pinned = (d.bishop(king_square, blockers_x_ray) & theirs.bishop()
|
||||
| d.rook(king_square, blockers_x_ray) & theirs.rook())
|
||||
let pinned_diagonally = (d.bishop(king_square, blockers_x_ray) & theirs.bishop())
|
||||
.map(|sq| d.segment(king_square, sq))
|
||||
.reduce_or();
|
||||
let pinned_horizontally = (d.rook(king_square, blockers_x_ray) & theirs.rook())
|
||||
.map(|sq| d.segment(king_square, sq))
|
||||
.reduce_or();
|
||||
let pinned = pinned_diagonally | pinned_horizontally;
|
||||
|
||||
let checker = checkers.first();
|
||||
let block_check = checker
|
||||
|
|
@ -1221,30 +1224,28 @@ impl Position {
|
|||
|
||||
// pinned pieces
|
||||
{
|
||||
let aux = |visitor: &mut T, role| {
|
||||
for from in global_mask_from & *ours.get(role) & pinned {
|
||||
let aux = |visitor: &mut T, role, pinned_mask| {
|
||||
for from in global_mask_from & *ours.get(role) & pinned_mask {
|
||||
visitor.moves(
|
||||
(global_mask_to
|
||||
& d.targets(role, from, blockers)
|
||||
& !us
|
||||
& d.line(king_square, from))
|
||||
.map(|to| RawMove {
|
||||
(global_mask_to & pinned & !us & d.line(king_square, from)).map(|to| {
|
||||
RawMove {
|
||||
kind: MoveType::PieceMove,
|
||||
from,
|
||||
to,
|
||||
role,
|
||||
}
|
||||
}),
|
||||
)
|
||||
}
|
||||
};
|
||||
if visitor.roles(Role::Bishop) {
|
||||
aux(visitor, Role::Bishop)
|
||||
aux(visitor, Role::Bishop, pinned_diagonally);
|
||||
}
|
||||
if visitor.roles(Role::Rook) {
|
||||
aux(visitor, Role::Rook)
|
||||
aux(visitor, Role::Rook, pinned_horizontally);
|
||||
}
|
||||
if visitor.roles(Role::Queen) {
|
||||
aux(visitor, Role::Queen)
|
||||
aux(visitor, Role::Queen, pinned);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue