diff --git a/src/dev/kske/chess/game/Game.java b/src/dev/kske/chess/game/Game.java
index a7cd531..e3a83f6 100644
--- a/src/dev/kske/chess/game/Game.java
+++ b/src/dev/kske/chess/game/Game.java
@@ -93,5 +93,12 @@ public class Game {
overlayComponent.clearArrow();
}
+ /**
+ * Removed all connections between the game and the ui.
+ */
+ public void disconnect() {
+ players.values().forEach(Player::disconnect);
+ }
+
public Board getBoard() { return board; }
}
diff --git a/src/dev/kske/chess/game/NaturalPlayer.java b/src/dev/kske/chess/game/NaturalPlayer.java
index f105862..e181320 100644
--- a/src/dev/kske/chess/game/NaturalPlayer.java
+++ b/src/dev/kske/chess/game/NaturalPlayer.java
@@ -1,7 +1,7 @@
package dev.kske.chess.game;
-import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
import java.util.List;
import java.util.stream.Collectors;
@@ -18,43 +18,19 @@ import dev.kske.chess.ui.OverlayComponent;
* Created: 06.07.2019
* Author: Kai S. K. Engelbart
*/
-public class NaturalPlayer extends Player {
+public class NaturalPlayer extends Player implements MouseListener {
- private boolean moveRequested;
+ private final OverlayComponent overlayComponent;
+
+ private boolean moveRequested;
+ private Position pos;
public NaturalPlayer(Color color, OverlayComponent overlayComponent) {
super(color);
- moveRequested = false;
- overlayComponent.addMouseListener(new MouseAdapter() {
+ this.overlayComponent = overlayComponent;
+ moveRequested = false;
- private Position pos;
-
- @Override
- public void mousePressed(MouseEvent evt) {
- if (!moveRequested) return;
- if (pos == null) {
- pos = new Position(evt.getPoint().x / overlayComponent.getTileSize(),
- evt.getPoint().y / overlayComponent.getTileSize());
-
- Board board = (Board) NaturalPlayer.this.board.clone();
- if (board.get(pos) != null && board.get(pos).getColor() == color) {
- List positions = board.getMoves(pos)
- .stream()
- .map(move -> move.dest)
- .collect(Collectors.toList());
- overlayComponent.displayDots(positions);
- } else pos = null;
- } else {
- Position dest = new Position(evt.getPoint().x / overlayComponent.getTileSize(),
- evt.getPoint().y / overlayComponent.getTileSize());
-
- overlayComponent.clearDots();
- moveRequested = false;
- game.onMove(NaturalPlayer.this, new Move(pos, dest, Type.UNKNOWN));
- pos = null;
- }
- }
- });
+ overlayComponent.addMouseListener(this);
}
@Override
@@ -66,4 +42,47 @@ public class NaturalPlayer extends Player {
public void cancelMove() {
moveRequested = false;
}
+
+ @Override
+ public void disconnect() {
+ overlayComponent.removeMouseListener(this);
+ }
+
+ @Override
+ public void mousePressed(MouseEvent evt) {
+ if (!moveRequested) return;
+ if (pos == null) {
+ pos = new Position(evt.getPoint().x / overlayComponent.getTileSize(),
+ evt.getPoint().y / overlayComponent.getTileSize());
+
+ Board board = (Board) NaturalPlayer.this.board.clone();
+ if (board.get(pos) != null && board.get(pos).getColor() == color) {
+ List positions = board.getMoves(pos)
+ .stream()
+ .map(move -> move.dest)
+ .collect(Collectors.toList());
+ overlayComponent.displayDots(positions);
+ } else pos = null;
+ } else {
+ Position dest = new Position(evt.getPoint().x / overlayComponent.getTileSize(),
+ evt.getPoint().y / overlayComponent.getTileSize());
+
+ overlayComponent.clearDots();
+ moveRequested = false;
+ game.onMove(NaturalPlayer.this, new Move(pos, dest, Type.UNKNOWN));
+ pos = null;
+ }
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {}
+
+ @Override
+ public void mouseReleased(MouseEvent e) {}
+
+ @Override
+ public void mouseEntered(MouseEvent e) {}
+
+ @Override
+ public void mouseExited(MouseEvent e) {}
}
diff --git a/src/dev/kske/chess/game/Player.java b/src/dev/kske/chess/game/Player.java
index 07d578a..9e55756 100644
--- a/src/dev/kske/chess/game/Player.java
+++ b/src/dev/kske/chess/game/Player.java
@@ -23,6 +23,8 @@ public abstract class Player {
public abstract void cancelMove();
+ public abstract void disconnect();
+
public Game getGame() { return game; }
public void setGame(Game game) {
diff --git a/src/dev/kske/chess/game/ai/AIPlayer.java b/src/dev/kske/chess/game/ai/AIPlayer.java
index 6adf76e..9e1f2fe 100644
--- a/src/dev/kske/chess/game/ai/AIPlayer.java
+++ b/src/dev/kske/chess/game/ai/AIPlayer.java
@@ -98,4 +98,7 @@ public class AIPlayer extends Player {
}
}
}
+
+ @Override
+ public void disconnect() {}
}
diff --git a/src/dev/kske/chess/ui/MenuBar.java b/src/dev/kske/chess/ui/MenuBar.java
index 471166f..362e684 100644
--- a/src/dev/kske/chess/ui/MenuBar.java
+++ b/src/dev/kske/chess/ui/MenuBar.java
@@ -16,12 +16,12 @@ public class MenuBar extends JMenuBar {
private static final long serialVersionUID = -7221583703531248228L;
- private final MainWindow mainWindow;
- private final BoardPane boardPane;
+ private final MainWindow mainWindow;
+ private final BoardPane boardPane;
public MenuBar(MainWindow mainWindow) {
- this.mainWindow = mainWindow;
- boardPane = mainWindow.getBoardPane();
+ this.mainWindow = mainWindow;
+ boardPane = mainWindow.getBoardPane();
initGameMenu();
}