1.1 --- a/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Mon Nov 22 15:40:28 2021 +0100
1.2 +++ b/chess/src/main/java/org/apidesign/html/demo/chess/BoardModel.java Mon Nov 22 15:58:31 2021 +0100
1.3 @@ -104,15 +104,32 @@
1.4 b.getMoves().add(newMove);
1.5 b.setPendingMove(newMove);
1.6
1.7 - data.setPieceColor(previoslySelected.getPieceColor());
1.8 - data.setPiece(previoslySelected.getPiece());
1.9 - previoslySelected.setPiece(null);
1.10 - previoslySelected.setPieceColor(null);
1.11 + if (PieceType.KING == previoslySelected.getPiece() && previoslySelected.getX() == 'E' && previoslySelected.getY() == 1 || previoslySelected.getY() == 8) {
1.12 + if (data.getX() == 'G') {
1.13 + movePieceFromTo(
1.14 + findSquare(b, 'F', data.getY()),
1.15 + findSquare(b, 'H', data.getY())
1.16 + );
1.17 + } else if (data.getX() == 'C') {
1.18 + movePieceFromTo(
1.19 + findSquare(b, 'D', data.getY()),
1.20 + findSquare(b, 'A', data.getY())
1.21 + );
1.22 + }
1.23 + }
1.24 + movePieceFromTo(data, previoslySelected);
1.25 b.setTurn(b.getTurn() == Color.W ? Color.B : Color.W);
1.26 Rules.computeAccessible(b, null);
1.27 }
1.28 }
1.29 }
1.30 +
1.31 + private static void movePieceFromTo(Square newSquare, Square oldSquare) {
1.32 + newSquare.setPieceColor(oldSquare.getPieceColor());
1.33 + newSquare.setPiece(oldSquare.getPiece());
1.34 + oldSquare.setPiece(null);
1.35 + oldSquare.setPieceColor(null);
1.36 + }
1.37
1.38 static class NextMove extends TimerTask {
1.39 private static final Timer T = new Timer("Animate moves");
2.1 --- a/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Mon Nov 22 15:40:28 2021 +0100
2.2 +++ b/chess/src/test/java/org/apidesign/html/demo/chess/BoardModelTest.java Mon Nov 22 15:58:31 2021 +0100
2.3 @@ -355,6 +355,12 @@
2.4
2.5 BoardModel.selected(b, e1);
2.6 assertTrue(g1.isAccessible(), "Can do 0-0");
2.7 +
2.8 + BoardModel.selected(b, g1);
2.9 +
2.10 + assertNull(e1.getPiece());
2.11 + assertEquals(g1.getPiece(), PieceType.KING);
2.12 + assertEquals(f1.getPiece(), PieceType.ROCK);
2.13 }
2.14
2.15 @Test public void allowSmallRochadeForBlack() {