From 1811f74aa7f2f351a69f8c5883ff919bd1eb8346 Mon Sep 17 00:00:00 2001 From: Janis Date: Wed, 1 Apr 2026 09:56:05 +0200 Subject: [PATCH] feat: highlight legal moves on chess board interaction --- .../src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala b/modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala index ba0fdbb..02d22a4 100644 --- a/modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala +++ b/modules/ui/src/main/scala/de/nowchess/ui/gui/ChessBoardView.scala @@ -12,6 +12,7 @@ import scalafx.stage.Stage import de.nowchess.api.board.{Board, Color, Piece, PieceType, Square, File, Rank} import de.nowchess.api.move.PromotionPiece import de.nowchess.chess.engine.GameEngine +import de.nowchess.chess.logic.GameRules /** ScalaFX chess board view that displays the game state. * Uses chess sprites and color palette. @@ -128,6 +129,11 @@ class ChessBoardView(val stage: Stage, private val engine: GameEngine) extends B if piece.color == currentTurn then selectedSquare = Some(clickedSquare) highlightSquare(rank, file, PieceSprites.SquareColors.Selected) + val legalDests = GameRules.legalMoves(currentBoard, engine.history, currentTurn) + .collect { case (`clickedSquare`, to) => to } + legalDests.foreach { sq => + highlightSquare(sq.rank.ordinal, sq.file.ordinal, PieceSprites.SquareColors.ValidMove) + } } case Some(fromSquare) =>