package dev.kske.chess.game; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.List; import java.util.stream.Collectors; import dev.kske.chess.board.Board; import dev.kske.chess.board.Move; import dev.kske.chess.board.Move.Type; import dev.kske.chess.board.Piece.Color; import dev.kske.chess.board.Position; import dev.kske.chess.ui.OverlayComponent; /** * Project: Chess
* File: NaturalPlayer.java
* Created: 06.07.2019
* Author: Kai S. K. Engelbart */ public class NaturalPlayer extends Player implements MouseListener { private final OverlayComponent overlayComponent; private boolean moveRequested; private Position pos; public NaturalPlayer(Color color, OverlayComponent overlayComponent) { super(color); this.overlayComponent = overlayComponent; name = "Player"; moveRequested = false; overlayComponent.addMouseListener(this); } @Override public void requestMove() { moveRequested = true; } @Override 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 = new Board(this.board); 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) {} }