diff --git a/engine/src/bitboard/movegen.rs b/engine/src/bitboard/movegen.rs index 8f5a34a..76bc395 100644 --- a/engine/src/bitboard/movegen.rs +++ b/engine/src/bitboard/movegen.rs @@ -12,17 +12,34 @@ use super::utils::*; impl Board { + const NO_FILTER: u64 = 0xFFFF_FFFF_FFFF_FFFF; + pub fn collect_moves(&mut self, buffer: &mut MoveBuffer, temp_buffer: &mut MoveBuffer) -> bool { buffer.clear(); self.calc_pinned_squares(); let check_info = self.check_test(); match check_info.check_count { - // 0 => self.collect_all_moves(), + 0 => self.collect_all_moves(buffer, temp_buffer), // 1 => self.collect_moves_single_check(), // 2 => self.collect_king_evasion(), _ => panic!("More than 2 checking pieces found as the same time!") } return check_info.check_count > 0; } + + pub(in super) fn collect_all_moves(&self, buffer: &mut MoveBuffer, temp_buffer: &mut MoveBuffer) { + let safe_squares = self.get_safe_king_squares(); + + self.add_pawn_moves(buffer, temp_buffer, Self::NO_FILTER); + self.add_knight_moves(buffer, temp_buffer, Self::NO_FILTER); + self.add_bishop_moves(buffer, temp_buffer, Self::NO_FILTER); + self.add_rook_moves(buffer, temp_buffer, Self::NO_FILTER); + self.add_queen_moves(buffer, temp_buffer, Self::NO_FILTER); + self.add_king_moves(buffer, temp_buffer, safe_squares); + self.add_king_castles(buffer, safe_squares); + + buffer.append(temp_buffer); + temp_buffer.clear(); + } } \ No newline at end of file diff --git a/engine/src/bitboard/movegen/bishops.rs b/engine/src/bitboard/movegen/bishops.rs index 00f681b..3d41916 100644 --- a/engine/src/bitboard/movegen/bishops.rs +++ b/engine/src/bitboard/movegen/bishops.rs @@ -2,7 +2,7 @@ use super::*; impl Board { - fn add_bishop_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_bishop_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { let piece_index = 2 + self.side_to_move * 6; let mut bishops = self.bitboards[piece_index as usize]; let empty = !self.occupancy[2]; @@ -33,7 +33,7 @@ impl Board { } } } - fn add_bishop_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_bishop_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { let offset = 6 * self.side_to_move as usize; let mut bishops: u64 = self.bitboards[2 + offset]; let opponents = self.occupancy[1 - self.side_to_move as usize]; diff --git a/engine/src/bitboard/movegen/kings.rs b/engine/src/bitboard/movegen/kings.rs index 18315e4..60e7daf 100644 --- a/engine/src/bitboard/movegen/kings.rs +++ b/engine/src/bitboard/movegen/kings.rs @@ -2,7 +2,7 @@ use super::*; impl Board { - fn add_king_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_king_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { let piece_index = 5 + self.side_to_move * 6; let mut kings = self.bitboards[piece_index as usize]; let empty = !self.occupancy[2]; @@ -32,7 +32,7 @@ impl Board { } } } - fn add_king_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_king_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { let offset = 6 * self.side_to_move as usize; let mut kings: u64 = self.bitboards[5 + offset]; let opponents = self.occupancy[1 - self.side_to_move as usize]; @@ -51,7 +51,7 @@ impl Board { } } } - fn add_king_castles(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_king_castles(&self, buffer: &mut MoveBuffer, move_mask: u64) { if self.castling_rights & (0b11 << (2 - 2 * self.side_to_move)) == 0 { return; } diff --git a/engine/src/bitboard/movegen/knights.rs b/engine/src/bitboard/movegen/knights.rs index db4a105..4c0efce 100644 --- a/engine/src/bitboard/movegen/knights.rs +++ b/engine/src/bitboard/movegen/knights.rs @@ -2,7 +2,7 @@ use super::*; impl Board { - fn add_knight_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_knight_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { let piece_index = 1 + self.side_to_move * 6; let mut knights = self.bitboards[piece_index as usize]; let empty = !self.occupancy[2]; @@ -33,7 +33,7 @@ impl Board { } } } - fn add_knight_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_knight_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { let offset = 6 * self.side_to_move as usize; let mut knights: u64 = self.bitboards[1 + offset]; let opponents = self.occupancy[1 - self.side_to_move as usize]; diff --git a/engine/src/bitboard/movegen/pawns.rs b/engine/src/bitboard/movegen/pawns.rs index 6e9e1dc..9fc7571 100644 --- a/engine/src/bitboard/movegen/pawns.rs +++ b/engine/src/bitboard/movegen/pawns.rs @@ -2,7 +2,7 @@ use super::*; impl Board { - fn add_pawn_quiets(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_pawn_quiets(&self, buffer: &mut MoveBuffer, move_mask: u64) { let offset: u8 = self.side_to_move * 6; let mut pawns: u64 = self.bitboards[offset as usize]; while pawns != 0 { @@ -34,7 +34,7 @@ impl Board { } } } - fn add_pawn_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_pawn_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { let offset = 6 * self.side_to_move as usize; let mut pawns: u64 = self.bitboards[offset]; let opponents = self.occupancy[1 - self.side_to_move as usize]; @@ -69,7 +69,7 @@ impl Board { } } } - fn add_pawn_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_pawn_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { self.add_pawn_captures(capture_buffer, move_mask); self.add_pawn_quiets(quiet_buffer, move_mask); } diff --git a/engine/src/bitboard/movegen/queens.rs b/engine/src/bitboard/movegen/queens.rs index 6fdf4bd..960f49a 100644 --- a/engine/src/bitboard/movegen/queens.rs +++ b/engine/src/bitboard/movegen/queens.rs @@ -2,7 +2,7 @@ use super::*; impl Board { - fn add_queen_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_queen_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { let piece_index = 4 + self.side_to_move * 6; let mut queens = self.bitboards[piece_index as usize]; let empty = !self.occupancy[2]; @@ -33,7 +33,7 @@ impl Board { } } } - fn add_queen_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_queen_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { let offset = 6 * self.side_to_move as usize; let mut queens: u64 = self.bitboards[4 + offset]; let opponents = self.occupancy[1 - self.side_to_move as usize]; diff --git a/engine/src/bitboard/movegen/rooks.rs b/engine/src/bitboard/movegen/rooks.rs index b908911..749e2d8 100644 --- a/engine/src/bitboard/movegen/rooks.rs +++ b/engine/src/bitboard/movegen/rooks.rs @@ -2,7 +2,7 @@ use super::*; impl Board { - fn add_rook_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_rook_moves(&self, capture_buffer: &mut MoveBuffer, quiet_buffer: &mut MoveBuffer, move_mask: u64) { let piece_index = 3 + self.side_to_move * 6; let mut rooks = self.bitboards[piece_index as usize]; let empty = !self.occupancy[2]; @@ -33,7 +33,7 @@ impl Board { } } } - fn add_rook_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { + pub fn add_rook_captures(&self, buffer: &mut MoveBuffer, move_mask: u64) { let offset = 6 * self.side_to_move as usize; let mut rooks: u64 = self.bitboards[3 + offset]; let opponents = self.occupancy[1 - self.side_to_move as usize];