use super::sq::SQ;
pub const PLAYER_CNT: usize = 2;
pub const PIECE_TYPE_CNT: usize = 8;
pub const PIECE_CNT: usize = 16;
pub const SQ_CNT: usize = 64;
pub const FILE_CNT: usize = 8;
pub const RANK_CNT: usize = 8;
pub const PHASE_CNT: usize = 2;
pub const CASTLING_SIDES: usize = 2;
pub const TOTAL_CASTLING_CNT: usize = CASTLING_SIDES * CASTLING_SIDES;
pub const ALL_CASTLING_RIGHTS: usize = TOTAL_CASTLING_CNT * TOTAL_CASTLING_CNT;
pub const BLACK_SIDE: u64 =
0b11111111_11111111_11111111_11111111_00000000_00000000_00000000_00000000;
pub const WHITE_SIDE: u64 =
0b00000000_00000000_00000000_00000000_11111111_11111111_11111111_11111111;
pub const FILE_A: u64 = 0b00000001_00000001_00000001_00000001_00000001_00000001_00000001_00000001;
pub const FILE_B: u64 = 0b00000010_00000010_00000010_00000010_00000010_00000010_00000010_00000010;
pub const FILE_C: u64 = 0b00000100_00000100_00000100_00000100_00000100_00000100_00000100_00000100;
pub const FILE_D: u64 = 0b00001000_00001000_00001000_00001000_00001000_00001000_00001000_00001000;
pub const FILE_E: u64 = 0b00010000_00010000_00010000_00010000_00010000_00010000_00010000_00010000;
pub const FILE_F: u64 = 0b00100000_00100000_00100000_00100000_00100000_00100000_00100000_00100000;
pub const FILE_G: u64 = 0b01000000_01000000_01000000_01000000_01000000_01000000_01000000_01000000;
pub const FILE_H: u64 = 0b10000000_10000000_10000000_10000000_10000000_10000000_10000000_10000000;
pub const RANK_1: u64 = 0x0000_0000_0000_00FF;
pub const RANK_2: u64 = 0x0000_0000_0000_FF00;
pub const RANK_3: u64 = 0x0000_0000_00FF_0000;
pub const RANK_4: u64 = 0x0000_0000_FF00_0000;
pub const RANK_5: u64 = 0x0000_00FF_0000_0000;
pub const RANK_6: u64 = 0x0000_FF00_0000_0000;
pub const RANK_7: u64 = 0x00FF_0000_0000_0000;
pub const RANK_8: u64 = 0xFF00_0000_0000_0000;
pub const DARK_SQUARES: u64 = 0xAA55AA55AA55AA55;
pub const LIGHT_SQUARES: u64 = !DARK_SQUARES;
pub static FILE_BB: [u64; FILE_CNT] = [
FILE_A,
FILE_B,
FILE_C,
FILE_D,
FILE_E,
FILE_F,
FILE_G,
FILE_H,
];
pub static RANK_BB: [u64; RANK_CNT] = [
RANK_1,
RANK_2,
RANK_3,
RANK_4,
RANK_5,
RANK_6,
RANK_7,
RANK_8,
];
pub const NORTH: i8 = 8;
pub const SOUTH: i8 = -8;
pub const WEST: i8 = -1;
pub const EAST: i8 = 1;
pub const NORTH_EAST: i8 = 9;
pub const NORTH_WEST: i8 = 7;
pub const SOUTH_EAST: i8 = -7;
pub const SOUTH_WEST: i8 = -9;
pub static START_OCC_BOARDS: [u64; PLAYER_CNT] = [START_WHITE_OCC, START_BLACK_OCC];
pub const START_W_PAWN: u64 =
0b00000000_00000000_00000000_00000000_00000000_00000000_11111111_00000000;
pub const START_W_KNIGHT: u64 =
0b00000000_00000000_00000000_00000000_00000000_00000000_00000000_01000010;
pub const START_W_BISHOP: u64 =
0b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00100100;
pub const START_W_ROOK: u64 =
0b00000000_00000000_00000000_00000000_00000000_00000000_00000000_10000001;
pub const START_W_QUEEN: u64 =
0b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00001000;
pub const START_W_KING: u64 =
0b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00010000;
pub const START_B_PAWN: u64 =
0b00000000_11111111_00000000_00000000_00000000_00000000_00000000_00000000;
pub const START_B_KNIGHT: u64 =
0b01000010_00000000_00000000_00000000_00000000_00000000_00000000_00000000;
pub const START_B_BISHOP: u64 =
0b00100100_00000000_00000000_00000000_00000000_00000000_00000000_00000000;
pub const START_B_ROOK: u64 =
0b10000001_00000000_00000000_00000000_00000000_00000000_00000000_00000000;
pub const START_B_QUEEN: u64 =
0b00001000_00000000_00000000_00000000_00000000_00000000_00000000_00000000;
pub const START_B_KING: u64 =
0b00010000_00000000_00000000_00000000_00000000_00000000_00000000_00000000;
pub const START_WHITE_OCC: u64 =
0b00000000_00000000_00000000_00000000_00000000_00000000_11111111_11111111;
pub const START_BLACK_OCC: u64 =
0b11111111_11111111_00000000_00000000_00000000_00000000_00000000_00000000;
pub const START_OCC_ALL: u64 = START_BLACK_OCC | START_WHITE_OCC;
pub const WHITE_KING_START: u8 = 4;
pub const BLACK_KING_START: u8 = 60;
pub const ROOK_BLACK_KSIDE_START: u8 = 63;
pub const ROOK_BLACK_QSIDE_START: u8 = 56;
pub const ROOK_WHITE_KSIDE_START: u8 = 7;
pub const ROOK_WHITE_QSIDE_START: u8 = 0;
pub const C_WHITE_K_MASK: u8 = 0b0000_1000;
pub const C_WHITE_Q_MASK: u8 = 0b0000_0100;
pub const C_BLACK_K_MASK: u8 = 0b0000_0010;
pub const C_BLACK_Q_MASK: u8 = 0b0000_0001;
pub static CASTLING_ROOK_START: [[u8; CASTLING_SIDES]; PLAYER_CNT] =
[
[ROOK_WHITE_KSIDE_START, ROOK_WHITE_QSIDE_START],
[ROOK_BLACK_KSIDE_START, ROOK_BLACK_QSIDE_START],
];
pub const CASTLING_PATH_WHITE_K_SIDE: u64 = (1 as u64) << SQ::F1.0 as u32 |
(1 as u64) << SQ::G1.0 as u32;
pub const CASTLING_PATH_WHITE_Q_SIDE: u64 = (1 as u64) << SQ::B1.0 as u32 |
(1 as u64) << SQ::C1.0 as u32 |
(1 as u64) << SQ::D1.0 as u32;
pub const CASTLING_PATH_BLACK_K_SIDE: u64 = (1 as u64) << SQ::F8.0 as u32 |
(1 as u64) << SQ::G8.0 as u32;
pub const CASTLING_PATH_BLACK_Q_SIDE: u64 = (1 as u64) << SQ::B8.0 as u32 |
(1 as u64) << SQ::C8.0 as u32 |
(1 as u64) << SQ::D8.0 as u32;
pub static CASTLING_PATH_WHITE: [u64; CASTLING_SIDES] =
[CASTLING_PATH_WHITE_K_SIDE, CASTLING_PATH_WHITE_Q_SIDE];
pub static CASTLING_PATH_BLACK: [u64; CASTLING_SIDES] =
[CASTLING_PATH_BLACK_K_SIDE, CASTLING_PATH_BLACK_Q_SIDE];
pub static CASTLING_PATH: [[u64; CASTLING_SIDES]; PLAYER_CNT] =
[
[CASTLING_PATH_WHITE_K_SIDE, CASTLING_PATH_WHITE_Q_SIDE],
[CASTLING_PATH_BLACK_K_SIDE, CASTLING_PATH_BLACK_Q_SIDE],
];
pub static SQ_DISPLAY_ORDER: [u8; SQ_CNT] = [56, 57, 58, 59, 60, 61, 62, 63,
48, 49, 50, 51, 52, 53, 54, 55,
40, 41, 42, 43, 44, 45, 46, 47,
32, 33, 34, 35, 36, 37, 38, 39,
24, 25, 26, 27, 28, 29, 30, 31,
16, 17, 18, 19, 20, 21, 22, 23,
8, 9, 10, 11, 12, 13, 14, 15,
0, 1, 2, 3, 4, 5, 6, 7];
pub static SQ_DISPLAY: [&str; SQ_CNT] = [
"a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1",
"a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2",
"a3", "b3", "c3", "d3", "e3", "f3", "g3", "h3",
"a4", "b4", "c4", "d4", "e4", "f4", "g4", "h4",
"a5", "b5", "c5", "d5", "e5", "f5", "g5", "h5",
"a6", "b6", "c6", "d6", "e6", "f6", "g6", "h6",
"a7", "b7", "c7", "d7", "e7", "f7", "g7", "h7",
"a8", "b8", "c8", "d8", "e8", "f8", "g8", "h8"];
pub static PIECE_DISPLAYS: [[char; PIECE_TYPE_CNT]; PLAYER_CNT] = [
['_', 'P', 'N', 'B', 'R', 'Q', 'K', '*'],
['_', 'p', 'n', 'b', 'r', 'q', 'k', '*'],
];
pub static FILE_DISPLAYS: [char; FILE_CNT] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];
pub static RANK_DISPLAYS: [char; FILE_CNT] = ['1', '2', '3', '4', '5', '6', '7', '8'];