diff --git a/engine/src/bitboard/movegen.rs b/engine/src/bitboard/movegen.rs index b83278a..0fb7857 100644 --- a/engine/src/bitboard/movegen.rs +++ b/engine/src/bitboard/movegen.rs @@ -4,6 +4,7 @@ mod knights; use super::board::Board; use super::movebuffer::MoveBuffer; use super::bitmove::BitMove; +use super::utils::*; impl Board { diff --git a/engine/src/bitboard/movegen/knights.rs b/engine/src/bitboard/movegen/knights.rs index 9148c04..43b6b24 100644 --- a/engine/src/bitboard/movegen/knights.rs +++ b/engine/src/bitboard/movegen/knights.rs @@ -1 +1,36 @@ -use super::*; \ No newline at end of file +use super::*; + +impl Board { + + 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]; + let opponents = self.occupancy[1 - self.side_to_move as usize]; + while knights != 0 { + let from_sq = pop_lsb(&mut knights); + let raw_move_map = self.get_pseudo_knight_moves(from_sq) & move_mask; + let move_map = self.get_pin_masked_moves(raw_move_map, from_sq); + + let mut quiet_map = move_map & empty; + let mut capture_map = move_map & opponents; + + while quiet_map != 0 { + let to_sq = pop_lsb(&mut quiet_map); + quiet_buffer.add(BitMove::quiet( + from_sq as u8, + to_sq as u8, + None + )); + } + while capture_map != 0 { + let to_sq = pop_lsb(&mut capture_map); + capture_buffer.add(BitMove::capture( + from_sq as u8, + to_sq as u8, + None + )); + } + } + } +} \ No newline at end of file diff --git a/engine/src/bitboard/movegen/pawns.rs b/engine/src/bitboard/movegen/pawns.rs index 1f0c6e3..6e9e1dc 100644 --- a/engine/src/bitboard/movegen/pawns.rs +++ b/engine/src/bitboard/movegen/pawns.rs @@ -1,5 +1,3 @@ -use crate::bitboard::utils::pop_lsb; - use super::*; impl Board {