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 897b7e4..1d9ff8a 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 @@ -2,7 +2,6 @@ import edu.ntnu.idi.idatt2003.gruppe42.Controller.AppControllers.AppController; import edu.ntnu.idi.idatt2003.gruppe42.Model.GameState; -import edu.ntnu.idi.idatt2003.gruppe42.Model.Player; import java.util.ArrayList; import java.util.List; @@ -13,20 +12,10 @@ * Controller for managing the game state and timing. */ public final class GameController { - private final Player player; private final List appControllers = new ArrayList<>(); private Timer timer; private GameState gameState; - /** - * Constructs a new GameController. - * - * @param player the player model - */ - public GameController(final Player player) { - this.player = player; - } - /** * Adds an application controller to the list of controllers to be updated. * @@ -38,6 +27,7 @@ public void addAppController(final AppController appController) { public void setGameState(GameState gameState) { this.gameState = gameState; + } /** @@ -48,25 +38,20 @@ public void startGame() { final int delay = 0; final int period = 1000; - timer.scheduleAtFixedRate(new TimerTask() { - @Override - public void run() { - - if (isWeekend()) { - stopGame(); - } - - for (AppController controller : appControllers) { - controller.nextTick(); - - } - } - }, delay, period); - - } - - public boolean isWeekend() { - return !(gameState == GameState.WORKDAY); + timer.scheduleAtFixedRate( + new TimerTask() { + @Override + public void run() { + for (AppController controller : appControllers) { + controller.nextTick(); + } + if (isWeekend()) { + stopGame(); + } + } + }, + delay, + period); } /** @@ -78,4 +63,8 @@ public void stopGame() { timer.purge(); } } + + public boolean isWeekend() { + return !(gameState == GameState.WORKDAY); + } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java index cc5ba9d..478d449 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Controller/MarketController.java @@ -79,4 +79,8 @@ public static void printMarket(final List stocks) { System.out.println(stock.getHistoricalPrices().toString()); } } + + public void advanceWeek() { + exchange.advance(); + } } \ 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 60c1535..4fda836 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 @@ -3,13 +3,9 @@ import edu.ntnu.idi.idatt2003.gruppe42.Controller.AppControllers.AppController; import edu.ntnu.idi.idatt2003.gruppe42.Model.Day; import edu.ntnu.idi.idatt2003.gruppe42.Model.GameState; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Random; import javafx.beans.property.IntegerProperty; -import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleIntegerProperty; -import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; @@ -19,7 +15,8 @@ */ public class TimeAndWeatherController implements AppController { private final IntegerProperty hour = new SimpleIntegerProperty(0); - private final IntegerProperty dayIndex = new SimpleIntegerProperty(0); // 0 = Sunday, 1 = Monday, etc. + private final IntegerProperty dayIndex = new SimpleIntegerProperty(0); + private final IntegerProperty weekNumber = new SimpleIntegerProperty(0); private final IntegerProperty temperature = new SimpleIntegerProperty(15); private final StringProperty weather = new SimpleStringProperty("Sunny"); private final Random random = new Random(); @@ -37,10 +34,12 @@ public TimeAndWeatherController(GameController gameController) { public void nextTick() { int nextHour = hour.get() + 1; if (nextHour >= 24) { - hour.set(0); + System.out.println("This is the day" + dayIndex); + System.out.println("This is the hour" + hour); dayIndex.set((dayIndex.get() + 1) % 7); - updateWeather(); updateGameState(); + updateWeather(); + hour.set(0); } else { hour.set(nextHour); } @@ -75,6 +74,17 @@ public IntegerProperty dayIndexProperty() { return dayIndex; } + public IntegerProperty weekIndexProperty() { + return weekNumber; + } + + public void advanceWeek() { + weekNumber.set(weekNumber.get() + 1); + dayIndex.set(1); + updateGameState(); + gameController.startGame(); + } + public IntegerProperty temperatureProperty() { return temperature; } @@ -91,11 +101,18 @@ public String getDayOfWeekString() { return DAYS[dayIndex.get()].toString(); } + public String getWeekString() { + return "Week " + weekNumber.get(); + } + public void updateGameState() { - if (dayIndex.equals(new SimpleIntegerProperty(6))) { + + if (dayIndex.get() == 6) { + System.out.println("det er lørdag"); gameController.setGameState(GameState.RENTDAY); return; - } else if (dayIndex.equals(new SimpleIntegerProperty(0))) { + } else if (dayIndex.get() == 0) { + System.out.println("det er søndag"); gameController.setGameState(GameState.FREEDAY); return; } 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 a358c6d..92ba9bc 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 @@ -92,6 +92,11 @@ public DesktopViewController( popupsController.getPopups().stream() .map(Popup::getRoot).toArray(Pane[]::new) ); + + this.desktopView.getNextWeekButton().setOnAction( event -> { + marketController.advanceWeek(); + timeAndWeatherController.advanceWeek(); + }); } /** diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Millions.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Millions.java index 19b4acb..ad6e8d6 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Millions.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/Millions.java @@ -39,7 +39,7 @@ public void start(Stage stage) throws Exception { public void initGame(String username, Difficulty difficulty) { player = GameFactory.createPlayer(username, difficulty); - gameController = new GameController(player); + gameController = new GameController(); gameController.startGame(); switchToDesktopView(); } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Views/DesktopView.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Views/DesktopView.java index 56c26e3..44bc856 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Views/DesktopView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/View/Views/DesktopView.java @@ -28,6 +28,8 @@ public final class DesktopView { private final DesktopViewController controller; private final BorderPane root; + private Button nextWeekButton; + public DesktopView(DesktopViewController controller) { this.controller = controller; this.root = new BorderPane(); @@ -95,10 +97,17 @@ private HBox createBottomBar() { playerLabel.getStyleClass().add("desktop-label-bold"); playerLabel.setMinWidth(Region.USE_PREF_SIZE); - Region spacer = new Region(); - HBox.setHgrow(spacer, Priority.ALWAYS); + nextWeekButton = new Button("Advance to next week"); + + Region spacerLeft = new Region(); + HBox.setHgrow(spacerLeft, Priority.ALWAYS); + + Region spacerRight = new Region(); + HBox.setHgrow(spacerRight, Priority.ALWAYS); - HBox bottomBar = new HBox(15, settingsButton, playerLabel, spacer, createStatusBox()); + HBox bottomBar = new HBox(15, + settingsButton, playerLabel, spacerLeft, nextWeekButton, spacerRight, createStatusBox() + ); bottomBar.setAlignment(Pos.CENTER_LEFT); bottomBar.setPadding(new Insets(5, 15, 5, 15)); bottomBar.getStyleClass().add("desktop-bottom-bar"); @@ -112,23 +121,27 @@ private HBox createStatusBox() { Label weather = styledLabel("desktop-label"); Label temp = styledLabel("desktop-label"); Label day = styledLabel("desktop-label-bold"); + Label week = styledLabel("desktop-label-bold"); Label clock = styledLabel("desktop-label-bold"); weather.setText(twc.weatherProperty().get()); temp.setText(twc.temperatureProperty().get() + "°C"); day.setText(twc.getDayOfWeekString()); + week.setText(twc.getWeekString()); clock.setText(twc.getTimeString()); twc.hourProperty().addListener((obs, o, n) -> Platform.runLater(() -> clock.setText(twc.getTimeString()))); twc.dayIndexProperty().addListener((obs, o, n) -> Platform.runLater(() -> day.setText(twc.getDayOfWeekString()))); + twc.weekIndexProperty().addListener((obs, o, n) + -> Platform.runLater(() -> week.setText(twc.getWeekString()))); twc.weatherProperty().addListener((obs, o, n) -> Platform.runLater(() -> weather.setText(n))); twc.temperatureProperty().addListener((obs, o, n) -> Platform.runLater(() -> temp.setText(n + "°C"))); - HBox box = new HBox(10, weather, temp, day, clock); + HBox box = new HBox(10, weather, temp, day, week, clock); box.setAlignment(Pos.CENTER_RIGHT); box.setMinWidth(Region.USE_PREF_SIZE); return box; @@ -143,4 +156,8 @@ private Label styledLabel(String styleClass) { private String resource(String path) { return getClass().getResource(path).toExternalForm(); } + + public Button getNextWeekButton() { + return nextWeekButton; + } } \ No newline at end of file