monster_chess 0.0.24

A fairy chess movegen library that can be easily extended to new chess-adjacent games.
Documentation
use crate::bitboard::BitBoard;

use super::{pieces::Piece, AttackLookup, Board, Cols, Rows};

pub fn generate_lookups<const T: usize>(
    board: &Board<T>,
    piece: &&'static dyn Piece<T>,
    _rows: Rows,
    _cols: Cols,
) -> AttackLookup<T> {
    let mut lookups = Vec::with_capacity(board.state.squares as usize);

    for i in 0..board.state.squares {
        let from = BitBoard::<T>::from_lsb(i);
        lookups.insert(i as usize, piece.generate_lookup_moves(board, from));
    }

    lookups
}

impl<'a, const T: usize> Board<'a, T> {
    pub fn generate_lookups(&mut self) {
        for (ind, piece) in self.game.pieces.iter().enumerate() {
            if !piece.can_lookup() {
                self.attack_lookup.insert(ind, vec![]);
                continue;
            }

            self.attack_lookup.insert(
                ind,
                generate_lookups(self, piece, self.state.rows, self.state.cols),
            );
        }
    }
}