diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/audio/Audio.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/audio/Audio.java index 63e1c4f..61ec2e1 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/audio/Audio.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/audio/Audio.java @@ -11,6 +11,7 @@ public enum Audio { CLOCK("/audio/clock.wav", true), // Background music + WORK_THEME("/audio/work_theme.mp3", false), WEEKEND_THEME("/audio/weekend_theme.mp3", false); private final String path; 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 eec5cfc..22ef4ef 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 @@ -19,7 +19,7 @@ public final class GameController { private final List appControllers = new ArrayList<>(); private Timer timer; - private GameState gameState; + private GameState gameState = GameState.FREEDAY; private final AudioManager audioManager = AudioManager.get(); private boolean workMusicPlaying = false; private boolean weekendMusicPlaying = false; @@ -44,7 +44,7 @@ public void setGameState(final GameState gameState) { this.gameState = gameState; if (gameState == GameState.WORKDAY && !workMusicPlaying) { - //audioManager.playBgMusic(Audio.WORK_THEME); + audioManager.playBgMusic(Audio.WORK_THEME); workMusicPlaying = true; weekendMusicPlaying = false; } @@ -64,14 +64,16 @@ public void setGameState(final GameState gameState) { public void startGame() { timer = new Timer(true); final int delay = 0; - final int period = 1000; + final int period = 100; timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { + for (AppController controller : appControllers) { controller.nextTick(); } + if (isWeekend()) { stopGame(); } @@ -90,11 +92,11 @@ public void stopGame() { } /** - * Returns whether the current game state is a weekend. + * Weekend checker. * - * @return {@code true} if the game state is {@link GameState#FREEDAY}. + * @return {@code true} if the game state is weekend */ public boolean isWeekend() { - return gameState == GameState.FREEDAY; + return gameState == GameState.FREEDAY || gameState == GameState.RENTDAY; } } \ No newline at end of file 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 914d1a1..0865672 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 @@ -25,7 +25,6 @@ public final class MarketController implements AppController { /** * Creates a new market controller and loads stock data from a file. * - * @param path the path to the stock data file * @throws IOException if the file cannot be read * @throws StockFileParseException if the file content is malformed */ 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 103fbe2..76fcc9d 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 @@ -16,8 +16,8 @@ * Controller responsible for managing in-game time, days, weeks, and weather. */ public class TimeAndWeatherController implements AppController { - private final IntegerProperty hour = new SimpleIntegerProperty(0); - private final IntegerProperty dayIndex = new SimpleIntegerProperty(0); + private final IntegerProperty hour = new SimpleIntegerProperty(HOURS_PER_DAY - 1); + private final IntegerProperty dayIndex = new SimpleIntegerProperty(SATURDAY_INDEX); private final IntegerProperty weekNumber = new SimpleIntegerProperty(0); private final IntegerProperty temperature = new SimpleIntegerProperty(15); private final StringProperty weather = new SimpleStringProperty("Sunny"); @@ -41,7 +41,6 @@ public class TimeAndWeatherController implements AppController { public TimeAndWeatherController(GameController gameController) { this.gameController = gameController; updateWeather(); - updateGameState(); } /** @@ -49,18 +48,19 @@ public TimeAndWeatherController(GameController gameController) { */ @Override public void nextTick() { - Platform.runLater(() -> { - int nextHour = hour.get() + 1; - if (nextHour >= HOURS_PER_DAY) { - dayIndex.set((dayIndex.get() + 1) % 7); - updateGameState(); - updateWeather(); + int nextHour = hour.get() + 1; + if (nextHour >= HOURS_PER_DAY) { + int nextDayIndex = (dayIndex.get() + 1) % 7; + Platform.runLater(() -> { + dayIndex.set(nextDayIndex); hour.set(0); - audioManager.playSfx(Audio.CLOCK); - } else { - hour.set(nextHour); - } - }); + }); + updateGameState(nextDayIndex); + updateWeather(); + audioManager.playSfx(Audio.CLOCK); + } else { + Platform.runLater(() -> hour.set(nextHour)); + } } /** @@ -115,6 +115,7 @@ public IntegerProperty weekIndexProperty() { public void advanceWeek() { weekNumber.set(weekNumber.get() + 1); dayIndex.set(1); + hour.set(0); updateGameState(); gameController.startGame(); } @@ -172,10 +173,20 @@ public String getWeekString() { * all other days → {@link GameState#WORKDAY}. */ public void updateGameState() { - if (dayIndex.get() == SATURDAY_INDEX) { + updateGameState(dayIndex.get()); + } + + /** + * Updates the current game state based on a specific day index. + * + * @param index the day index + */ + private void updateGameState(int index) { + + if (index == SATURDAY_INDEX) { gameController.setGameState(GameState.RENTDAY); return; - } else if (dayIndex.get() == SUNDAY_INDEX) { + } else if (index == SUNDAY_INDEX) { gameController.setGameState(GameState.FREEDAY); return; } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/controller/viewcontrollers/DesktopDialogController.java b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/controller/viewcontrollers/DesktopDialogController.java index 0c1eac8..6c03fef 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/controller/viewcontrollers/DesktopDialogController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/gruppe42/controller/viewcontrollers/DesktopDialogController.java @@ -105,6 +105,7 @@ private void wireWeekendRapport() { weekendReportApp.getRoot().setVisible(false); desktopView.exitLayer(ModalLayer.RAPPORT); timeAndWeatherController.setDay(0); + timeAndWeatherController.hourProperty().set(0); }); } diff --git a/src/main/resources/audio/work_theme.mp3 b/src/main/resources/audio/work_theme.mp3 new file mode 100644 index 0000000..5d94de6 Binary files /dev/null and b/src/main/resources/audio/work_theme.mp3 differ