diff --git a/moves/src/castle.rs b/moves/src/castle.rs index 5459ff4..731f25f 100644 --- a/moves/src/castle.rs +++ b/moves/src/castle.rs @@ -1,7 +1,7 @@ // Eryn Wells use chessfriend_bitboard::BitBoard; -use chessfriend_core::Square; +use chessfriend_core::{Color, Square}; #[repr(u8)] #[derive(Copy, Clone, Debug, Eq, PartialEq)] @@ -10,7 +10,7 @@ pub enum Castle { QueenSide = 1, } -pub(crate) struct CastlingParameters { +pub struct Parameters { /// Origin squares of the king and rook. origin_squares: Squares, @@ -24,19 +24,45 @@ pub(crate) struct CastlingParameters { check_squares: BitBoard, } +impl Parameters { + pub fn king_origin_square(&self) -> Square { + self.origin_squares.king + } + + pub fn rook_origin_square(&self) -> Square { + self.origin_squares.rook + } + + pub fn king_target_square(&self) -> Square { + self.target_squares.king + } + + pub fn rook_target_square(&self) -> Square { + self.target_squares.rook + } + + pub fn clear_squares(&self) -> &BitBoard { + &self.clear_squares + } + + pub fn check_squares(&self) -> &BitBoard { + &self.check_squares + } +} + #[derive(Debug)] -pub(crate) struct Squares { - pub king: Square, - pub rook: Square, +struct Squares { + king: Square, + rook: Square, } impl Castle { pub const ALL: [Castle; 2] = [Castle::KingSide, Castle::QueenSide]; /// Parameters for each castling move, organized by color and board-side. - const PARAMETERS: [[CastlingParameters; 2]; 2] = [ + const PARAMETERS: [[Parameters; 2]; 2] = [ [ - CastlingParameters { + Parameters { origin_squares: Squares { king: Square::E1, rook: Square::H1, @@ -48,7 +74,7 @@ impl Castle { clear_squares: BitBoard::new(0b01100000), check_squares: BitBoard::new(0b01110000), }, - CastlingParameters { + Parameters { origin_squares: Squares { king: Square::E1, rook: Square::A1, @@ -62,7 +88,7 @@ impl Castle { }, ], [ - CastlingParameters { + Parameters { origin_squares: Squares { king: Square::E8, rook: Square::H8, @@ -74,7 +100,7 @@ impl Castle { clear_squares: BitBoard::new(0b01100000 << 8 * 7), check_squares: BitBoard::new(0b01110000 << 8 * 7), }, - CastlingParameters { + Parameters { origin_squares: Squares { king: Square::E8, rook: Square::A8, @@ -88,4 +114,8 @@ impl Castle { }, ], ]; + + pub fn parameters(&self, color: Color) -> &'static Parameters { + &Castle::PARAMETERS[color as usize][*self as usize] + } }