impl PieceType { pub fn to_algebraic(self) -> String { match self { Self::FeebleAlfil => "A", Self::FeebleKing => "K", Self::FeebleKnight => "N", Self::FeebleRook => "R", Self::FeebleQueen => "Q", Self::FidePawn => "", } .to_string() } pub fn name(&self) -> String { match self { Self::FeebleAlfil => "Alfil", Self::FeebleKing => "King", Self::FeebleKnight => "Knight", Self::FeebleRook => "Rook", Self::FeebleQueen => "Queen", Self::FidePawn => "Pawn", } .to_string() } pub fn asset_name(&self) -> String { match self { Self::FeebleAlfil => "bishop.png", Self::FeebleKnight => "knight.png", Self::FeebleKing => "king.png", Self::FeebleRook => "rook.png", Self::FidePawn => "pawn.png", Self::FeebleQueen => "queen.png", } .to_string() } pub fn turning_style(&self) -> Vec { match self { Self::FeebleAlfil | Self::FeebleRook => vec![Turnable::QuarterTurn], Self::FeebleKnight | Self::FeebleKing => vec![Turnable::EighthTurn], Self::FeebleQueen => vec![Turnable::QuarterTurn, Turnable::EighthTurn], Self::FidePawn => vec![], } } pub fn promotion_target_p(&self) -> bool { !matches!(self, Self::FidePawn | Self::FeebleKing) } pub fn orientation_permitted(&self, orientation: &Orientation) -> bool { match self { Self::FeebleAlfil => Orientation::is_diagonal(orientation), Self::FeebleRook => Orientation::is_orthogonal(orientation), Self::FidePawn => false, _ => true, } } }