Add move highlights

main
Elnu 2 years ago
parent 17aa7c7ccb
commit 3eec0e7833

@ -24,6 +24,7 @@ public class Board {
Piece[][] board; Piece[][] board;
// The current board coordinate that's being dragged // The current board coordinate that's being dragged
BoardCoordinate dragging = null; BoardCoordinate dragging = null;
ArrayList<BoardCoordinate> legalMoves = null;
public Board() { public Board() {
// Initialize DrawingPanel // Initialize DrawingPanel
@ -115,9 +116,11 @@ public class Board {
// Get board coordinate of mouse click // Get board coordinate of mouse click
BoardCoordinate coordinate = new ScreenCoordinate(x, y).toBoard(); BoardCoordinate coordinate = new ScreenCoordinate(x, y).toBoard();
// If there's no piece there, return // If there's no piece there, return
if (get(coordinate) == null) return; Piece piece = get(coordinate);
if (piece == null) return;
// Set currently dragging piece to that coordinate // Set currently dragging piece to that coordinate
dragging = coordinate; dragging = coordinate;
legalMoves = piece.getLegalMoves(coordinate, this);
// Redraw with dragging // Redraw with dragging
draw(x, y); draw(x, y);
} }
@ -164,6 +167,14 @@ public class Board {
draw(new ScreenCoordinate(mouseX, mouseY)); draw(new ScreenCoordinate(mouseX, mouseY));
} }
void drawRect(int x, int y) {
graphics.fillRect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE);
}
void drawRect(BoardCoordinate coordinate) {
drawRect(coordinate.x, coordinate.y);
}
public void draw(ScreenCoordinate mousePosition) { public void draw(ScreenCoordinate mousePosition) {
// Draw board // Draw board
graphics.setColor(BLACK); graphics.setColor(BLACK);
@ -171,7 +182,17 @@ public class Board {
graphics.setColor(WHITE); graphics.setColor(WHITE);
for (int y = 0; y < BOARD_SIZE; y++) for (int y = 0; y < BOARD_SIZE; y++)
for (int x = y % 2; x < BOARD_SIZE; x += 2) for (int x = y % 2; x < BOARD_SIZE; x += 2)
graphics.fillRect(x * TILE_SIZE, y * TILE_SIZE, TILE_SIZE, TILE_SIZE); drawRect(x, y);
if (dragging != null) {
graphics.setColor(new Color(0, 128, 0, 128));
for (BoardCoordinate legalMove : legalMoves)
drawRect(legalMove);
BoardCoordinate hovering = mousePosition.toBoard();
if (legalMoves.contains(hovering)) {
graphics.setColor(get(hovering) == null ? new Color(0, 0, 255, 128) : new Color(255, 0, 0, 128));
drawRect(mousePosition.toBoard());
}
}
// Draw pieces // Draw pieces
forEachPiece((boardCoordinate, piece) -> { forEachPiece((boardCoordinate, piece) -> {