[position] Apply capture and push masks to move generator results

This commit is contained in:
Eryn Wells 2024-01-30 08:34:29 -08:00
parent 98c8ef6e24
commit 8cdb9f13b4
5 changed files with 14 additions and 15 deletions

View file

@ -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)
}

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)