diff --git a/moves/src/make_move.rs b/moves/src/make_move.rs index dfd9b41..59a881e 100644 --- a/moves/src/make_move.rs +++ b/moves/src/make_move.rs @@ -81,7 +81,11 @@ trait MakeMoveInternal { fn validate_move(&self, ply: Move, validate: ValidateMove) -> Result<(), MakeMoveError>; fn validate_active_piece(&self, ply: Move) -> Result; - fn advance_clocks(&mut self, half_move_clock: HalfMoveClock); + fn advance_board_state( + &mut self, + en_passant_target: Option, + half_move_clock: HalfMoveClock, + ); } impl MakeMove for T { @@ -147,7 +151,7 @@ impl MakeMoveInternal for T { let record = MoveRecord::new(board, ply, None); - self.advance_clocks(HalfMoveClock::Advance); + self.advance_board_state(None, HalfMoveClock::Advance); Ok(record) } @@ -169,13 +173,13 @@ impl MakeMoveInternal for T { // board state before the change is preserved. let record = MoveRecord::new(board, ply, None); - board.set_en_passant_target(match target.rank() { + let en_passant_target = match target.rank() { Rank::FOUR => Square::from_file_rank(target.file(), Rank::THREE), Rank::FIVE => Square::from_file_rank(target.file(), Rank::SIX), _ => unreachable!(), - }); + }; - self.advance_clocks(HalfMoveClock::Advance); + self.advance_board_state(Some(en_passant_target), HalfMoveClock::Advance); Ok(record) } @@ -217,7 +221,7 @@ impl MakeMoveInternal for T { let record = MoveRecord::new(board, ply, Some(captured_piece)); - self.advance_clocks(HalfMoveClock::Reset); + self.advance_board_state(None, HalfMoveClock::Reset); Ok(record) } @@ -242,7 +246,7 @@ impl MakeMoveInternal for T { board.revoke_castling_right(active_color, wing); - self.advance_clocks(HalfMoveClock::Advance); + self.advance_board_state(None, HalfMoveClock::Advance); Ok(record) } @@ -276,12 +280,16 @@ impl MakeMoveInternal for T { let record = MoveRecord::new(board, ply, None); - self.advance_clocks(HalfMoveClock::Reset); + self.advance_board_state(None, HalfMoveClock::Reset); Ok(record) } - fn advance_clocks(&mut self, half_move_clock: HalfMoveClock) { + fn advance_board_state( + &mut self, + en_passant_target: Option, + half_move_clock: HalfMoveClock, + ) { let board = self.board_mut(); match half_move_clock { @@ -293,6 +301,8 @@ impl MakeMoveInternal for T { let active_color = previous_active_color.next(); board.set_active_color(active_color); + board.set_en_passant_target_option(en_passant_target); + if active_color == Color::White { board.full_move_number += 1; }