diff --git a/src/main/java/org/example/TravelGameController.java b/src/main/java/org/example/TravelGameController.java index 30d60803..20e42c5e 100644 --- a/src/main/java/org/example/TravelGameController.java +++ b/src/main/java/org/example/TravelGameController.java @@ -58,6 +58,8 @@ public class TravelGameController { private List shownMoves = List.of(); private final Map moveButtons = new HashMap<>(); + private Map lastTurnByTravelerId = new HashMap<>(); + private Location lastClickedDestination = null; private int cycleIndex = 0; @@ -329,10 +331,24 @@ private int screenToGridY(double y, double totalHeight) { } private void syncHudAndMap() { + refreshTurnCache(); updateHud(); updateGraphics(); } + private void refreshTurnCache() { + if (players.isEmpty()) { + lastTurnByTravelerId.clear(); + return; + } + + List ids = players.stream() + .map(Traveler::getId) + .toList(); + + lastTurnByTravelerId = journeyService.getLastTurnNumbersForPlayers(ids); + } + private void updateHud() { if (players.isEmpty()) return; @@ -348,7 +364,9 @@ private void updateHud() { nextPlayerLabel.setText(next != null ? next.getPlayerName() : nextRef.getPlayerName()); currentCreditsLabel.setText(current.getMoney() != null ? current.getMoney().toPlainString() : "-"); - currentTurnLabel.setText(String.valueOf(current.getTurnCount())); + + int lastTurn = lastTurnByTravelerId.getOrDefault(current.getId(), 0); + currentTurnLabel.setText(String.valueOf(lastTurn + 1)); currentPointLabel.setText(String.valueOf(current.getPlayerScore())); currentLocationLabel.setText("[" + clampToGrid(current.getPlayerPosX()) + "," + clampToGrid(current.getPlayerPosY()) + "]"); diff --git a/src/main/java/org/example/service/JourneyService.java b/src/main/java/org/example/service/JourneyService.java index aa753f47..8fac9f73 100644 --- a/src/main/java/org/example/service/JourneyService.java +++ b/src/main/java/org/example/service/JourneyService.java @@ -5,7 +5,9 @@ import java.math.BigDecimal; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class JourneyService { @@ -121,4 +123,32 @@ private Journey doTravelStep(Traveler traveler, LocationLink route, Transport tr return journey; } + + public Map getLastTurnNumbersForPlayers(List travelerIds) { + if (travelerIds == null || travelerIds.isEmpty()) return Map.of(); + + List rows = em.createQuery(""" + select j.traveler.id, max(j.turnNumber) + from Journey j + where j.traveler.id in :ids + group by j.traveler.id + """, Object[].class) + .setParameter("ids", travelerIds) + .getResultList(); + + Map out = new HashMap<>(); + for (Object[] r : rows) { + Long id = (Long) r[0]; + Integer maxTurn = (r[1] == null) ? 0 : ((Number) r[1]).intValue(); + out.put(id, maxTurn); + } + + // spelare utan journeys hamnar inte i rows → sätt 0 på dem + for (Long id : travelerIds) { + out.putIfAbsent(id, 0); + } + + return out; + } + }