diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..500830f --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ + + +all: + cargo build diff --git a/board/src/errors.rs b/board/src/errors.rs new file mode 100644 index 0000000..e69de29 diff --git a/position/src/sight/rays.rs b/position/src/sight/rays.rs new file mode 100644 index 0000000..df376d7 --- /dev/null +++ b/position/src/sight/rays.rs @@ -0,0 +1,27 @@ +// Eryn Wells + +use chessfriend_bitboard::BitBoard; +use chessfriend_core::{Direction, Square}; + +fn _find_ray_connecting_squares(origin_square: Square, target_square: Square) -> BitBoard { + macro_rules! ray { + ($square:expr, $direction:expr) => { + ($direction, BitBoard::ray($square, $direction)) + }; + } + + let target: BitBoard = target_square.into(); + match Direction::ALL + .iter() + .map(|direction| ray!(origin_square, *direction)) + .find(|(direction, &ray)| (ray & target).is_populated()) + { + Some((direction, ray)) => { + if let Some(first_occupied_square) = BitBoard::$occupied_squares(&(ray & $blockers)).next() + let remainder = BitBoard::ray(first_occupied_square, direction); + let attack_ray = ray & !remainder; + attack_ray * ray + } + None => BitBoard::EMPTY, + } +}