diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/service/GameStateLoader.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/service/GameStateLoader.java index 6f67aa5..0137ad2 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/service/GameStateLoader.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/service/GameStateLoader.java @@ -254,11 +254,8 @@ private void applySave(final SaveGame save) { if (save.getNetWorthHistory() != null && !save.getNetWorthHistory().isEmpty()) { player.setNetWorthHistory(save.getNetWorthHistory()); } else { - // No recorded history available - seed a minimal two-point - // history so the chart still has something to render. List seed = new ArrayList<>(); seed.add(BigDecimal.valueOf(save.getStartingCapital())); - seed.add(player.getNetWorth()); player.setNetWorthHistory(seed); } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java index 1079fcf..6149a39 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java @@ -282,7 +282,17 @@ protected void initLayout() { yAxis.setTickMarkVisible(true); yAxis.setMinorTickVisible(false); yAxis.setAutoRanging(false); - yAxis.setLabel("Price (NOK)"); + yAxis.setTickLabelFormatter(new javafx.util.StringConverter() { + @Override + public String toString(final Number value) { + return Math.round(value.floatValue() * 100f) / 100f + " NOK"; + } + + @Override + public Number fromString(final String string) { + return 0; + } + }); chart = new LineChart<>(xAxis, yAxis); chart.setCreateSymbols(false); diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java index b934d50..5fe9992 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsController.java @@ -176,7 +176,6 @@ public void handleEvent(final EventData data) { balanceHistory.addAll(player.getNetWorthHistory()); } else { balanceHistory.add(player.getStartingMoney()); - balanceHistory.add(player.getNetWorth()); } pushSnapshot(); } @@ -277,7 +276,6 @@ public void handleContextUpdate(final Exchange updatedExchange, final Player upd this.balanceHistory.addAll(this.player.getNetWorthHistory()); } else { this.balanceHistory.add(this.player.getStartingMoney()); - this.balanceHistory.add(this.player.getNetWorth()); } pushSnapshot(); } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java index f3d6129..2f54361 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/stats/StatsView.java @@ -452,8 +452,15 @@ private void renderBalanceChart() { balanceChartPane.getChildren().add(seg); } - // X-axis labels (week numbers). + int xLabelStep = computeXLabelStep(n, stepX); + int lastIndex = n - 1; for (int i = 0; i < n; i++) { + boolean isEdge = (i == 0 || i == lastIndex); + boolean isStepAligned = (i % xLabelStep == 0) + && (lastIndex - i >= xLabelStep || i == 0); + if (!isEdge && !isStepAligned) { + continue; + } double x = padL + i * stepX; Text xLabel = new Text(0, h - 6, String.valueOf(i + 1)); xLabel.getStyleClass().add("stats-chart-axis"); @@ -649,6 +656,35 @@ private static String stripTrailingZeros(final BigDecimal v) { return v.stripTrailingZeros().toPlainString(); } + /** + * Picks a stride that lets us draw every {@code step}-th week label + * along the x-axis without overlap. + * + *

Targets at least ~28 px of horizontal space between adjacent + * rendered labels. The step is also rounded to a "nice" value + * (1, 2, 5, 10, 20, 50, ...) so the labels read as a clean + * progression rather than landing on awkward weeks.

+ * + * @param n the total number of data points on the chart. + * @param stepX the horizontal spacing between consecutive points. + * @return the index stride to use when rendering x-axis labels. + * */ + private static int computeXLabelStep(final int n, final double stepX) { + final double minLabelSpacing = 28.0; + if (stepX >= minLabelSpacing || n <= 1) { + return 1; + } + int rawStep = (int) Math.ceil(minLabelSpacing / stepX); + // Snap to a nice 1-2-5 progression so labels land on tidy weeks. + int[] niceSteps = {1, 2, 5, 10, 20, 50, 100}; + for (int s : niceSteps) { + if (s >= rawStep) { + return s; + } + } + return rawStep; + } + /** Internal data carrier for a single pie slice. */ private static final class Segment { final String label;