[position] Register a captured piece in the MoveRecord
For unmake_move, so the captured piece can be restored.
This commit is contained in:
parent
2106e05d57
commit
43abbe3fe2
2 changed files with 23 additions and 16 deletions
|
@ -1,15 +1,28 @@
|
|||
// Eryn Wells <eryn@erynwells.me>
|
||||
|
||||
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<Square>,
|
||||
pub castling_rights: CastleRights,
|
||||
pub half_move_clock: HalfMoveClock,
|
||||
pub captured_piece: Option<Piece>,
|
||||
}
|
||||
|
||||
impl MoveRecord {}
|
||||
impl MoveRecord {
|
||||
pub fn new(board: &Board, ply: Move, capture: Option<Piece>) -> 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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Piece>) -> MoveRecord {
|
||||
let record = MoveRecord::new(&self.board, ply, capture);
|
||||
self.moves.push(record.clone());
|
||||
|
||||
record
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue