public override void Undo() { if (executed) { TargetTile.DetachPiece(); SelectedTile.AttachPiece(Piece, PieceHasMoved); if (Piece is IEnPassantable) { IEnPassantable enPassantablePiece = Piece as IEnPassantable; enPassantablePiece.CurrentlyEnPassantable = false; } executed = false; } }
public override void Execute() { if (!executed) { SelectedTile.DetachPiece(); TargetTile.AttachPiece(Piece, true); if (Piece is IEnPassantable) { IEnPassantable enPassantablePiece = Piece as IEnPassantable; enPassantablePiece.CurrentlyEnPassantable = true; } executed = true; } }
public void DisableEnPassantables(Alliance alliance) { foreach (Tile tile in Board.CurrentState.Tiles) { if (!tile.IsVacant) { if (tile.Piece is IEnPassantable) { if (tile.Piece.Alliance == alliance) { IEnPassantable enPassantablePiece = tile.Piece as IEnPassantable; enPassantablePiece.CurrentlyEnPassantable = false; } } } } }
public override ReadOnlyCollection <Move> GetCandidateMoves(BoardState board, ChessPiece piece) { ReadOnlyCollection <Tile> CandidateTiles = GetCandidateTiles(board, piece); List <Move> CandidateMoves = new List <Move>(); foreach (Tile tile in CandidateTiles) { if (tile.Piece is IEnPassantable) { IEnPassantable enPassantablePiece = tile.Piece as IEnPassantable; if (enPassantablePiece.CurrentlyEnPassantable) { CandidateMoves.Add(new EnPassantMove(board[piece.Row, piece.Column], board[piece.Row + MovementBaseStepY, piece.Column + MovementBaseStepX], tile)); } } } return(CandidateMoves.AsReadOnly()); }