From 17511e9d63859b404c9b96bc94a5be0edb496eed Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Tue, 26 Dec 2023 21:34:01 -0700 Subject: [PATCH] [board] Implement a rather dumb Position::piece_on_square This method does an iteration over all piece colors and shapes to find the piece on a given square. --- board/src/position/position.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/board/src/position/position.rs b/board/src/position/position.rs index 2a924f5..d6b32bb 100644 --- a/board/src/position/position.rs +++ b/board/src/position/position.rs @@ -2,7 +2,7 @@ use super::Pieces; use crate::bitboard::BitBoard; -use crate::piece::{Color, Piece, PiecePlacementError}; +use crate::piece::{Color, Piece, PiecePlacementError, PlacedPiece, Shape}; use crate::Square; use std::fmt; use std::fmt::Write; @@ -98,6 +98,20 @@ impl Position { &mut self.pieces_per_type[piece.color as usize][piece.shape as usize] } + pub fn piece_on_square(&self, sq: Square) -> Option { + for color in Color::iter() { + for shape in Shape::iter() { + let piece = Piece::new(color, shape); + let bb = self.bitboard_for_piece(&piece); + if bb.has_piece_at(&sq) { + return Some(PlacedPiece::new(piece, sq)); + } + } + } + + None + } + pub fn pieces(&self, color: Color) -> Pieces { Pieces::new(&self, color) }