[board, position] Add a color argument to opposing_sight

New convention: active_color_ methods operate on the active color of the Board.
Methods without that prefix take a color parameter and operate on that.

Refactor opposing_sight to do this.
This commit is contained in:
Eryn Wells 2025-05-23 09:56:47 -07:00
parent a92ec9aba3
commit 0abe9b6c19
3 changed files with 10 additions and 7 deletions

View file

@ -61,7 +61,7 @@ impl Board {
}
// King cannot pass through check.
let opposing_sight = self.opposing_sight();
let opposing_sight = self.opposing_sight(active_color);
let opposing_pieces_can_see_castling_path =
(parameters.check & opposing_sight).is_populated();
if opposing_pieces_can_see_castling_path {

View file

@ -44,14 +44,17 @@ impl Board {
.fold(BitBoard::empty(), BitOr::bitor)
}
pub fn active_color_opposing_sight(&self) -> BitBoard {
self.opposing_sight(self.active_color)
}
/// A [`BitBoard`] of all squares visible by colors that oppose the given color.
pub fn opposing_sight(&self) -> BitBoard {
pub fn opposing_sight(&self, color: Color) -> BitBoard {
// TODO: Probably want to implement a caching layer here.
let active_color = self.active_color;
Color::ALL
.into_iter()
.filter_map(|c| {
if c == active_color {
if c == color {
None
} else {
Some(self.friendly_sight(c))
@ -223,7 +226,7 @@ mod tests {
Black Rook on E7,
);
let sight = pos.opposing_sight();
let sight = pos.active_color_opposing_sight();
assert_eq!(sight, bitboard![A7 B7 C7 D7 F7 G7 H7 E8 E6 E5 E4]);
}

View file

@ -81,8 +81,8 @@ impl Position {
}
/// A [`BitBoard`] of all squares visible by colors that oppose the given color.
pub fn opposing_sight(&self) -> BitBoard {
self.board.opposing_sight()
pub fn active_color_opposing_sight(&self) -> BitBoard {
self.board.active_color_opposing_sight()
}
}