diff --git a/engine/src/chessmove.rs b/engine/src/chessmove.rs index ae46a6a..e38ad7f 100644 --- a/engine/src/chessmove.rs +++ b/engine/src/chessmove.rs @@ -1,12 +1,10 @@ -use crate::piecetype; - use super::boardsquare::BoardSquare; use super::movetype::MoveType; use super::piecetype::PieceType; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] -pub struct ChessMove { +/*pub struct ChessMove { pub move_type: MoveType, pub piece_type: PieceType, pub from_square: BoardSquare, @@ -14,6 +12,36 @@ pub struct ChessMove { pub rook_from: BoardSquare, pub rook_to: BoardSquare, pub promotion_piece: Option, +}*/ +pub enum ChessMove { + Quiet { + piece_type: PieceType, + from_square: BoardSquare, + to_square: BoardSquare, + promotion_piece: Option + }, + Capture { + piece_type: PieceType, + from_square: BoardSquare, + to_square: BoardSquare, + captured_piece: PieceType, + promotion_piece: Option + }, + Castle { + king_type: PieceType, + king_from: BoardSquare, + king_to: BoardSquare, + rook_type: PieceType, + rook_from: BoardSquare, + rook_to: BoardSquare + }, + EnPassant { + pawn_type: PieceType, + from_square: BoardSquare, + to_square: BoardSquare, + captured_piece: PieceType, + captured_from: BoardSquare + } } impl ChessMove { @@ -23,14 +51,11 @@ impl ChessMove { to_square: BoardSquare, promotion_piece: Option, ) -> Self { - return Self { - move_type: MoveType::Quiet, - piece_type: piece_type, - from_square: from_square, - to_square: to_square, - rook_from: BoardSquare::new(), - rook_to: BoardSquare::new(), - promotion_piece: promotion_piece, + return Self::Quiet { + piece_type, + from_square, + to_square, + promotion_piece }; } @@ -38,34 +63,33 @@ impl ChessMove { piece_type: PieceType, from_square: BoardSquare, to_square: BoardSquare, + captured_piece: PieceType, promotion_piece: Option, ) -> Self { - return Self { - move_type: MoveType::Capture, - piece_type: piece_type, - from_square: from_square, - to_square: to_square, - rook_from: BoardSquare::new(), - rook_to: BoardSquare::new(), - promotion_piece: promotion_piece, + return Self::Capture { + piece_type, + from_square, + to_square, + captured_piece, + promotion_piece }; } pub fn castle( - piece_type: PieceType, - from_square: BoardSquare, - to_square: BoardSquare, + king_type: PieceType, + king_from: BoardSquare, + king_to: BoardSquare, + rook_type: PieceType, rook_from: BoardSquare, rook_to: BoardSquare, ) -> Self { - return Self { - move_type: MoveType::Quiet, - piece_type: piece_type, - from_square: from_square, - to_square: to_square, - rook_from: rook_from, - rook_to: rook_to, - promotion_piece: None, + return Self::Castle { + king_type, + king_from, + king_to, + rook_type, + rook_from, + rook_to }; } }