diff --git a/position/src/move_record.rs b/position/src/move_record.rs index 72af258..5fbfe27 100644 --- a/position/src/move_record.rs +++ b/position/src/move_record.rs @@ -1,15 +1,28 @@ // Eryn Wells -use chessfriend_board::{board::HalfMoveClock, CastleRights}; -use chessfriend_core::Square; +use chessfriend_board::{board::HalfMoveClock, Board, CastleRights}; +use chessfriend_core::{Color, Piece, Square}; use chessfriend_moves::Move; #[derive(Clone, Debug, Eq, PartialEq)] pub(crate) struct MoveRecord { + pub color: Color, pub ply: Move, pub en_passant_target: Option, pub castling_rights: CastleRights, pub half_move_clock: HalfMoveClock, + pub captured_piece: Option, } -impl MoveRecord {} +impl MoveRecord { + pub fn new(board: &Board, ply: Move, capture: Option) -> Self { + Self { + color: board.active_color, + ply, + en_passant_target: board.en_passant_target, + castling_rights: board.castling_rights, + half_move_clock: board.half_move_clock, + captured_piece: capture, + } + } +} diff --git a/position/src/position/make_move.rs b/position/src/position/make_move.rs index 13c0d6a..52bff90 100644 --- a/position/src/position/make_move.rs +++ b/position/src/position/make_move.rs @@ -118,7 +118,7 @@ impl Position { self.remove_piece(origin); - let record = self.register_move_record(ply); + let record = self.register_move_record(ply, None); self.advance_clocks(HalfMoveClock::Advance); @@ -141,7 +141,7 @@ impl Position { _ => unreachable!(), }; - let record = self.register_move_record(ply); + let record = self.register_move_record(ply, None); self.advance_clocks(HalfMoveClock::Advance); @@ -181,7 +181,7 @@ impl Position { self.place_piece(piece, target_square, PlacePieceStrategy::Replace)?; } - let record = self.register_move_record(ply); + let record = self.register_move_record(ply, Some(captured_piece)); self.advance_clocks(HalfMoveClock::Reset); @@ -202,7 +202,7 @@ impl Position { self.board.castling_rights.revoke(active_color, wing); - let record = self.register_move_record(ply); + let record = self.register_move_record(ply, None); self.advance_clocks(HalfMoveClock::Advance); @@ -232,21 +232,15 @@ impl Position { ); } - let record = self.register_move_record(ply); + let record = self.register_move_record(ply, None); self.advance_clocks(HalfMoveClock::Reset); Ok(record) } - fn register_move_record(&mut self, ply: Move) -> MoveRecord { - let record = MoveRecord { - ply, - en_passant_target: self.board.en_passant_target, - castling_rights: self.board.castling_rights, - half_move_clock: self.board.half_move_clock, - }; - + fn register_move_record(&mut self, ply: Move, capture: Option) -> MoveRecord { + let record = MoveRecord::new(&self.board, ply, capture); self.moves.push(record.clone()); record