2019-07-07 13:53:57 +02:00
|
|
|
package dev.kske.chess.game;
|
|
|
|
|
|
|
|
import java.awt.event.MouseEvent;
|
2019-07-18 15:01:15 +02:00
|
|
|
import java.awt.event.MouseListener;
|
2019-07-09 09:20:30 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.stream.Collectors;
|
2019-07-07 13:53:57 +02:00
|
|
|
|
|
|
|
import dev.kske.chess.board.Board;
|
|
|
|
import dev.kske.chess.board.Move;
|
2019-07-13 11:38:44 +02:00
|
|
|
import dev.kske.chess.board.Move.Type;
|
2019-07-07 13:53:57 +02:00
|
|
|
import dev.kske.chess.board.Piece.Color;
|
|
|
|
import dev.kske.chess.board.Position;
|
2019-07-09 09:20:30 +02:00
|
|
|
import dev.kske.chess.ui.OverlayComponent;
|
2019-07-07 13:53:57 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Project: <strong>Chess</strong><br>
|
|
|
|
* File: <strong>NaturalPlayer.java</strong><br>
|
|
|
|
* Created: <strong>06.07.2019</strong><br>
|
|
|
|
* Author: <strong>Kai S. K. Engelbart</strong>
|
|
|
|
*/
|
2019-07-18 15:01:15 +02:00
|
|
|
public class NaturalPlayer extends Player implements MouseListener {
|
2019-07-07 13:53:57 +02:00
|
|
|
|
2019-07-18 15:01:15 +02:00
|
|
|
private final OverlayComponent overlayComponent;
|
|
|
|
|
|
|
|
private boolean moveRequested;
|
|
|
|
private Position pos;
|
2019-07-07 13:53:57 +02:00
|
|
|
|
2019-07-17 08:26:51 +02:00
|
|
|
public NaturalPlayer(Color color, OverlayComponent overlayComponent) {
|
|
|
|
super(color);
|
2019-07-18 15:01:15 +02:00
|
|
|
this.overlayComponent = overlayComponent;
|
|
|
|
moveRequested = false;
|
|
|
|
|
|
|
|
overlayComponent.addMouseListener(this);
|
2019-07-07 13:53:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void requestMove() {
|
|
|
|
moveRequested = true;
|
|
|
|
}
|
2019-07-14 12:03:45 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void cancelMove() {
|
|
|
|
moveRequested = false;
|
|
|
|
}
|
2019-07-18 15:01:15 +02:00
|
|
|
|
|
|
|
@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<Position> 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) {}
|
2019-07-07 13:53:57 +02:00
|
|
|
}
|