[board] Implement all the bit twiddling to track whether castling is allowed for each player and side of the board

This commit is contained in:
Eryn Wells 2024-01-08 14:41:54 -08:00
parent 8cc7e64ba6
commit 31e5771d30
3 changed files with 100 additions and 7 deletions

View file

@ -7,9 +7,9 @@ use super::{move_generator_declaration, MoveGeneratorInternal, MoveSet};
use crate::{
bitboard::BitBoard,
piece::{Color, Piece, PlacedPiece},
Move, Position, Square,
position::BoardSide,
Move, Position,
};
use std::collections::BTreeMap;
move_generator_declaration!(KingMoveGenerator, struct);
move_generator_declaration!(KingMoveGenerator, new);
@ -17,13 +17,21 @@ move_generator_declaration!(KingMoveGenerator, getters);
impl<'a> KingMoveGenerator<'a> {
#[allow(unused_variables)]
fn king_side_castle(position: &Position) -> Option<Move> {
fn king_side_castle(position: &Position, color: Color) -> Option<Move> {
if !position.is_castling_allowed(color, BoardSide::King) {
return None;
}
// TODO: Implement king side castle.
None
}
#[allow(unused_variables)]
fn queen_side_castle(position: &Position) -> Option<Move> {
fn queen_side_castle(position: &Position, color: Color) -> Option<Move> {
if !position.is_castling_allowed(color, BoardSide::Queen) {
return None;
}
// TODO: Implement queen side castle.
None
}
@ -51,8 +59,8 @@ impl<'pos> MoveGeneratorInternal for KingMoveGenerator<'pos> {
let map_to_move = |sq| Move::new(piece, square, sq);
let king_side_castle = Self::king_side_castle(position);
let queen_side_castle = Self::queen_side_castle(position);
let king_side_castle = Self::king_side_castle(position, color);
let queen_side_castle = Self::queen_side_castle(position, color);
let quiet_moves = quiet_moves_bb
.occupied_squares()
.map(map_to_move)