From 66d1774f69a131eedaab8cbbdebdb041e0a43029 Mon Sep 17 00:00:00 2001 From: Rak Laptudirm <rak@laptudirm.com> Date: Thu, 12 Dec 2024 10:32:48 +0530 Subject: [PATCH] chore: some cleanup stuff --- games/src/chess/position.rs | 43 +++++++++++++++---------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/games/src/chess/position.rs b/games/src/chess/position.rs index f1b9879..8457c1c 100644 --- a/games/src/chess/position.rs +++ b/games/src/chess/position.rs @@ -36,6 +36,7 @@ use crate::interface::MoveStore; use super::castling::CastlingRightsParseError; use super::castling::Dimension; use super::castling::Rights; +use super::castling::Side; use super::movegen; use super::MoveFlag; @@ -134,21 +135,13 @@ impl PositionType for Position { let source_pc = unsafe { source_pc.unwrap_unchecked() }; - if !m.flag().is_promotion() && !m.flag().is_castling() { - board.insert(m.target(), source_pc); - } - board.castling.rights -= board.castling.get_updates(m.source()) | board.castling.get_updates(m.target()); - if source_pc.piece() == Piece::Pawn || target_pc.is_some() { - board.half_move_clock = 0; - } - board.en_passant_target = None; match m.flag() { - MoveFlag::Normal => {} + MoveFlag::Normal => board.insert(m.target(), source_pc), MoveFlag::NPromotion | MoveFlag::BPromotion | MoveFlag::RPromotion @@ -160,32 +153,27 @@ impl PositionType for Position { ), ), MoveFlag::EnPassant => { + board.insert(m.target(), source_pc); board.remove(unsafe { m.target().down(board.side_to_move).unwrap_unchecked() }); } MoveFlag::DoublePush => { + board.insert(m.target(), source_pc); board.en_passant_target = Some(unsafe { m.target().down(board.side_to_move).unwrap_unchecked() }); } - MoveFlag::CastleASide => { - let (king, rook) = - Dimension::from(board.side_to_move, castling::Side::A) - .get_targets(); - board.insert( - king, - ColoredPiece::new(Piece::King, board.side_to_move), - ); - board.insert( - rook, - ColoredPiece::new(Piece::Rook, board.side_to_move), - ); - } - MoveFlag::CastleHSide => { - let (king, rook) = - Dimension::from(board.side_to_move, castling::Side::H) - .get_targets(); + MoveFlag::CastleHSide | MoveFlag::CastleASide => { + let (king, rook) = Dimension::from( + board.side_to_move, + if m.flag() == MoveFlag::CastleHSide { + Side::H + } else { + Side::A + }, + ) + .get_targets(); board.insert( king, ColoredPiece::new(Piece::King, board.side_to_move), @@ -198,6 +186,9 @@ impl PositionType for Position { } board.half_move_clock += 1; + if source_pc.piece() == Piece::Pawn || target_pc.is_some() { + board.half_move_clock = 0; + } board.side_to_move = !board.side_to_move; board