#ifndef CHESS_ENGINE_MOVEGENERATOR_HPP #define CHESS_ENGINE_MOVEGENERATOR_HPP #include "Piece.hpp" #include "Square.hpp" #include "Move.hpp" #include "CastlingRights.hpp" #include "BitBoard.hpp" #include "BoardState.hpp" #include #include #include #include class MoveGenerator { public: using MoveVec = std::vector; static void generatePawnMoves(const BoardState &bs, const Square &from, const std::optional &eps, PieceColor color, MoveVec &moves); static void generatePawnMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves); static void generateBishopMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves); static void generateKingMoves(const BoardState &bs, const Square &from, PieceColor color, CastlingRights cr, MoveVec &moves); static void generateRookMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves); static void generateQueenMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves); private: static void generatePawnMoves(const BoardState &bs, const Square &from, BitBoard targets, PieceColor color, MoveVec &moves); static void generateMoves(const Square &from, BitBoard movesBB, MoveVec &moves); static void generateMovesWithPromotion(const Square &from, BitBoard movesBB, MoveVec &moves); }; #endif //CHESS_ENGINE_MOVEGENERATOR_HPP