From af2781b94380c43e3d5a4fb0ab8bf1e0f2ab5887 Mon Sep 17 00:00:00 2001 From: Per Eric Trapnes Date: Wed, 13 May 2026 12:50:23 +0200 Subject: [PATCH] drag optimising --- .../gruppe42/Controller/GameController.java | 4 +-- .../gruppe42/Controller/PopupsController.java | 30 ++++++++----------- .../Controller/TimeAndWeatherController.java | 9 +++++- .../DesktopViewController.java | 2 +- src/main/resources/css/popup.css | 9 +++++- 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/GameController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/GameController.java index 0f6e6a6..3ed95a7 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/GameController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/GameController.java @@ -38,8 +38,7 @@ public void addAppController(final AppController appController) { * Starts the game simulation timer. */ public void startGame() { - timer = new Timer(true); // Set as daemon thread to allow JVM to exit - + timer = new Timer(true); final int delay = 0; final int period = 1000; @@ -51,6 +50,7 @@ public void run() { } } }, delay, period); + } /** diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupsController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupsController.java index d44cc7b..8b45400 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupsController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/PopupsController.java @@ -20,7 +20,7 @@ public PopupsController(List popups) { private void initPopup(Popup popup) { makeDraggable(popup); - popup.getCloseButton().setOnAction(e -> hide(popup)); + popup.getCloseButton().setOnAction(event -> hide(popup)); } public boolean show(App type) { @@ -52,30 +52,24 @@ public List getPopups() { private void makeDraggable(Popup popup) { BorderPane root = popup.getRoot(); - double[] offset = new double[2]; // [x, y] + double[] offset = new double[2]; + double[] parentBounds = new double[2]; // cache here popup.getHeader().setOnMousePressed(event -> { offset[0] = event.getSceneX() - root.getLayoutX(); offset[1] = event.getSceneY() - root.getLayoutY(); + // snapshot bounds once on press, not on every drag tick + if (root.getParent() instanceof Pane parent) { + parentBounds[0] = parent.getWidth() - popup.getWidth(); + parentBounds[1] = parent.getHeight() - popup.getHeight(); + } }); popup.getHeader().setOnMouseDragged(event -> { - root.setLayoutX(event.getSceneX() - offset[0]); - root.setLayoutY(event.getSceneY() - offset[1]); - clampToBounds(popup); + root.setLayoutX(Math.max(0, Math.min( + event.getSceneX() - offset[0], parentBounds[0]))); + root.setLayoutY(Math.max(0, Math.min( + event.getSceneY() - offset[1], parentBounds[1]))); }); } - - private void clampToBounds(Popup popup) { - BorderPane root = popup.getRoot(); - if (!(root.getParent() instanceof Pane parent)) { - return; - } - - double maxX = parent.getWidth() - popup.getWidth(); - double maxY = parent.getHeight() - popup.getHeight(); - - root.setLayoutX(Math.max(0, Math.min(root.getLayoutX(), maxX))); - root.setLayoutY(Math.max(0, Math.min(root.getLayoutY(), maxY))); - } } \ No newline at end of file diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/TimeAndWeatherController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/TimeAndWeatherController.java index c73f6b9..16f4116 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/TimeAndWeatherController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/TimeAndWeatherController.java @@ -21,10 +21,12 @@ public class TimeAndWeatherController implements AppController { private final IntegerProperty temperature = new SimpleIntegerProperty(15); private final StringProperty weather = new SimpleStringProperty("Sunny"); private final Random random = new Random(); + private final GameController gameController; private static final String[] DAYS = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; - public TimeAndWeatherController() { + public TimeAndWeatherController(GameController gameController) { + this.gameController = gameController; updateWeather(); } @@ -38,6 +40,11 @@ public void nextTick() { } else { hour.set(nextHour); } + + if (dayIndex.get() > 5) { + gameController.stopGame(); + + } } private void updateWeather() { diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/ViewControllers/DesktopViewController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/ViewControllers/DesktopViewController.java index 098977b..b56fb58 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/ViewControllers/DesktopViewController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/ViewControllers/DesktopViewController.java @@ -49,7 +49,7 @@ public DesktopViewController( final GameController gameController ) { this.player = player; - this.timeAndWeatherController = new TimeAndWeatherController(); + this.timeAndWeatherController = new TimeAndWeatherController(gameController); gameController.addAppController(timeAndWeatherController); List popups = new ArrayList<>(); diff --git a/src/main/resources/css/popup.css b/src/main/resources/css/popup.css index d3c1e25..536c0bf 100644 --- a/src/main/resources/css/popup.css +++ b/src/main/resources/css/popup.css @@ -1,9 +1,16 @@ +.popup-wrapper { + -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.2), 10, 0, 0, 5); + -fx-background-color: transparent; +} + .popup-root { -fx-background-color: white; -fx-background-radius: 10; -fx-border-color: #d1d1d1; + -fx-border-width: 1; -fx-border-radius: 10; - -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.2), 10, 0, 0, 5); + -fx-background-insets: 0; + -fx-border-insets: 0; } .popup-header {