[position] Apply capture and push masks to move generator results
This commit is contained in:
parent
98c8ef6e24
commit
8cdb9f13b4
5 changed files with 14 additions and 15 deletions
|
@ -1,7 +1,7 @@
|
|||
// Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
use super::{move_generator_declaration, MoveGeneratorInternal, MoveSet};
|
||||
use crate::{MoveBuilder, Position};
|
||||
use crate::Position;
|
||||
use chessfriend_bitboard::BitBoard;
|
||||
use chessfriend_core::{Color, Direction, Piece, PlacedPiece};
|
||||
|
||||
|
@ -14,12 +14,11 @@ impl MoveGeneratorInternal for ClassicalMoveGenerator {
|
|||
|
||||
fn move_set_for_piece(
|
||||
position: &Position,
|
||||
placed_piece: PlacedPiece,
|
||||
piece: PlacedPiece,
|
||||
capture_mask: BitBoard,
|
||||
push_mask: BitBoard,
|
||||
) -> MoveSet {
|
||||
let piece = placed_piece.piece();
|
||||
let square = placed_piece.square();
|
||||
let square = piece.square();
|
||||
|
||||
let blockers = position.occupied_squares();
|
||||
let empty_squares = !blockers;
|
||||
|
@ -47,10 +46,10 @@ impl MoveGeneratorInternal for ClassicalMoveGenerator {
|
|||
update_moves_with_ray!(SouthEast, occupied_squares);
|
||||
update_moves_with_ray!(SouthWest, occupied_squares);
|
||||
|
||||
let quiet_moves = all_moves & (empty_squares | !friendly_pieces);
|
||||
let capture_moves = all_moves & opposing_pieces;
|
||||
let quiet_moves = all_moves & (empty_squares | !friendly_pieces) & push_mask;
|
||||
let capture_moves = all_moves & opposing_pieces & capture_mask;
|
||||
|
||||
MoveSet::new(placed_piece)
|
||||
MoveSet::new(piece)
|
||||
.quiet_moves(quiet_moves)
|
||||
.capture_moves(capture_moves)
|
||||
}
|
||||
|
|
|
@ -22,8 +22,8 @@ impl MoveGeneratorInternal for KnightMoveGenerator {
|
|||
let empty_squares = position.empty_squares();
|
||||
let knight_moves = BitBoard::knight_moves(placed_piece.square());
|
||||
|
||||
let quiet_moves = knight_moves & empty_squares;
|
||||
let capture_moves = knight_moves & opposing_pieces;
|
||||
let quiet_moves = knight_moves & empty_squares & push_mask;
|
||||
let capture_moves = knight_moves & opposing_pieces & capture_mask;
|
||||
|
||||
MoveSet::new(placed_piece)
|
||||
.quiet_moves(quiet_moves)
|
||||
|
|
|
@ -21,8 +21,8 @@ impl MoveGeneratorInternal for PawnMoveGenerator {
|
|||
capture_mask: BitBoard,
|
||||
push_mask: BitBoard,
|
||||
) -> MoveSet {
|
||||
let capture_moves = Self::attacks(position, placed_piece);
|
||||
let quiet_moves = Self::pushes(position, placed_piece);
|
||||
let capture_moves = Self::attacks(position, placed_piece) & capture_mask;
|
||||
let quiet_moves = Self::pushes(position, placed_piece) & push_mask;
|
||||
|
||||
MoveSet::new(placed_piece)
|
||||
.quiet_moves(quiet_moves)
|
||||
|
|
|
@ -53,8 +53,8 @@ impl MoveGeneratorInternal for ClassicalMoveGenerator {
|
|||
update_moves_with_ray!(SouthWest, occupied_squares);
|
||||
update_moves_with_ray!(West, occupied_squares);
|
||||
|
||||
let quiet_moves = all_moves & (empty_squares | !friendly_pieces);
|
||||
let capture_moves = all_moves & opposing_pieces;
|
||||
let quiet_moves = all_moves & (empty_squares | !friendly_pieces) & push_mask;
|
||||
let capture_moves = all_moves & opposing_pieces & capture_mask;
|
||||
|
||||
MoveSet::new(placed_piece)
|
||||
.quiet_moves(quiet_moves)
|
||||
|
|
|
@ -49,8 +49,8 @@ impl MoveGeneratorInternal for ClassicalMoveGenerator {
|
|||
update_moves_with_ray!(South, occupied_squares);
|
||||
update_moves_with_ray!(West, occupied_squares);
|
||||
|
||||
let quiet_moves = all_moves & (empty_squares | !friendly_pieces);
|
||||
let capture_moves = all_moves & opposing_pieces;
|
||||
let quiet_moves = all_moves & (empty_squares | !friendly_pieces) & capture_mask;
|
||||
let capture_moves = all_moves & opposing_pieces & push_mask;
|
||||
|
||||
MoveSet::new(placed_piece)
|
||||
.quiet_moves(quiet_moves)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue