use crate::{ consts::*, util::bit, }; #[derive(Clone, Copy)] pub struct MoveSet { pub direction:u32, pub stride:u32, } impl MoveSet { pub fn rotate(&self) -> Self { Self { direction:0, stride:0, } } } #[derive(Clone, Copy)] pub struct PieceClass { pub name:&'static str, pub moves:MoveSet, pub pmoves:MoveSet, } pub const PIECES :[PieceClass; PIECES_COUNT] = [ PieceClass { name: "Militia", moves: MoveSet { direction:bit(0) | bit(1) | bit(5), stride:0, }, pmoves: MoveSet{ direction:bit(0) | bit(1) | bit(2) | bit(4) | bit(5), stride:0, }, }, PieceClass { name: "Knight", moves: MoveSet { direction:bit(3) | bit(6) | bit(11) | bit(13) | bit(17), stride:0, }, pmoves: MoveSet{ direction:bit(3) | bit(6) | bit(7) | bit(10) | bit(11) | bit(13) | bit(14) | bit(16) | bit(17), stride:0, }, }, PieceClass { name: "Lance", moves: MoveSet { direction:0, stride:0, }, pmoves: MoveSet { direction:0, stride:0, }, }, PieceClass { name: "Tower", moves: MoveSet { direction:0, stride:0, }, pmoves: MoveSet { direction:0, stride:0, }, }, PieceClass { name: "Castle", moves: MoveSet { direction:0, stride:0, }, pmoves: MoveSet { direction:0, stride:0, }, }, PieceClass { name: "Dragon", moves: MoveSet { direction:0, stride:0, }, pmoves: MoveSet { direction:0, stride:0, }, }, PieceClass { name: "King", moves: MoveSet { direction:0, stride:0, }, pmoves: MoveSet { direction:0, stride:0, }, }, ]; #[derive(Clone, Copy)] pub struct Piece { pub class:u8, pub promoted:bool, pub player:u8, pub tile:u8, } impl Piece { pub fn new(class:u8, player:u8) -> Self { Self { class, promoted:false, player, tile:0, } } pub fn new_at(class:u8, player:u8, tile:u8) -> Self { Self { class, promoted:false, player, tile, } } }