diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java
index 348cf5c..1fd5382 100644
--- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java
+++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java
@@ -59,198 +59,202 @@
/**
* Main class.
*
- *
Extends {@link Application}
+ *
+ * Extends {@link Application}
+ *
*
- * Launches the javafx thread and starts the program.
- * */
+ *
+ * Launches the javafx thread and starts the program.
+ *
+ */
public class Main extends Application {
- /**
- * Active {@link Exchange} object.
- * */
- private Exchange exchange;
-
- /**
- * Active {@link Player} object.
- * */
- private Player player;
-
- /**
- * Main method, launches the start javafx method.
- *
- * @param args standard Java parameter.
- * */
- public static void main(final String[] args) {
- launch(args);
- }
-
- @Override
- public void start(final Stage stage) throws Exception {
- Scene scene = new Scene(new Pane());
- scene.getStylesheets()
- .add(Objects.requireNonNull(getClass().getResource("/styles.css")).toExternalForm());
- Font.loadFont(getClass().getResourceAsStream("/Fonts/Aptos.ttf"), 16);
- stage.setScene(scene);
- stage.setWidth(ConfigValues.VIEWPORT_WIDTH.getValue());
- stage.setHeight(ConfigValues.VIEWPORT_HEIGHT.getValue());
-
- ThemeManager.getInstance().registerScene(scene);
-
- EventManager eventManager = new EventManager();
- ViewManager viewManager = new ViewManager(stage, eventManager);
-
- // Loads a default file in case of misreading (fallback)
- StockFileManager fileManager = new StockFileManager("src/main/resources/sp500.csv");
- StockFileParser fileParser = new StockFileParser();
- List stocksInFile = fileParser.getStocksFromStrings(fileManager.readFile());
-
- exchange = new Exchange("Exchange", stocksInFile);
- player = new Player("Player 1", new BigDecimal("10000"));
-
- GameStateLoader gameStateLoader = new GameStateLoader(
- player, exchange, stocksInFile, eventManager);
-
- MainMenuView mainMenuView = new MainMenuView();
- new MainMenuController(mainMenuView, eventManager);
-
- PlayGameView playGameView = new PlayGameView();
- SaveGameService saveGameService = new SaveGameService();
- PlayGameController playGameController =
- new PlayGameController(playGameView, eventManager, saveGameService);
- playGameController.refresh();
-
- CreateGameView createGameView = new CreateGameView();
- CreateGameController createGameController =
- new CreateGameController(createGameView, eventManager, saveGameService);
- createGameController.setOnSaveCreated(playGameController::refresh);
-
- SettingsView settingsView = new SettingsView();
- new SettingsController(settingsView, eventManager);
-
- SummaryView summaryView = new SummaryView();
- SummaryController summaryController =
- new SummaryController(summaryView, eventManager, exchange, player);
-
- TopBarView topBarView = new TopBarView(summaryView);
- TopBarController topBarController = new TopBarController(topBarView, eventManager);
-
- TopBarView topBarView2 = new TopBarView();
- new TopBarController(topBarView2, eventManager);
-
- DashBoardView dashBoardView = new DashBoardView();
- DashBoardController dashBoardController =
- new DashBoardController(dashBoardView, eventManager, player, exchange, stocksInFile);
-
- StatsView statsView = new StatsView();
- StatsController statsController =
- new StatsController(statsView, eventManager, player, exchange);
-
- MarketView marketView = new MarketView();
- MarketController marketController =
- new MarketController(marketView, eventManager, player, exchange, stocksInFile);
-
- InGameView inGameView = new InGameView(topBarView, dashBoardView.getRootPane());
- InGameController inGameController = new InGameController(inGameView, eventManager);
-
- TransactionsView transactionsView = new TransactionsView();
- TransactionsController transactionsController = new TransactionsController(
- transactionsView, eventManager, player.getTransactionArchive());
-
- ClickerGame clickerGame = new ClickerGame();
- FindStockGame findStockGame = new FindStockGame(
- stocksInFile.stream().map(Stock::getSymbol).toList()
- );
- TimeInputsGame timeInputsGame = new TimeInputsGame();
-
- GameEngineView gameEngineView = new GameEngineView();
- GameEngineController gameEngineController = new GameEngineController(
- gameEngineView, eventManager, stocksInFile.getFirst()
- );
-
- MiniGamesView miniGamesView = new MiniGamesView();
- MiniGamesController miniGamesController =
- new MiniGamesController(
- miniGamesView, eventManager, stocksInFile.getFirst(), gameEngineView,
- gameEngineController, clickerGame, inGameView, findStockGame, timeInputsGame
- );
-
- // Adds a generic event subscriber to the event manager
- // that handles STATE_RESET events. These events are
- // triggered when a new save file is loaded.
- // We define this implementation here, because
- // this class has the highest level overview of the application.
- eventManager.addSubscriber(new EventSubscriber() {
- @Override
- public void handleEvent(final EventData eventData) {
- if (eventData.data() instanceof SaveGame) {
-
- if (createGameController.getExchange() != null && createGameController.getPlayer() != null) {
- gameStateLoader.setExchange(createGameController.getExchange());
-
- exchange = createGameController.getExchange();
- player = createGameController.getPlayer();
- } else {
- exchange = gameStateLoader.getExchange();
- player = gameStateLoader.getPlayer();
- }
-
- List dynamicStocks = exchange.getStocks();
-
- // Updates the various UI components that
- // depend on an exchange, player, or list of stocks.
- findStockGame.updateStockPool(dynamicStocks.stream().map(Stock::getSymbol).toList());
- summaryController.handleContextUpdate(Main.this.exchange, Main.this.player);
- dashBoardController.handleStockPoolUpdate(dynamicStocks);
- statsController.handleContextUpdate(Main.this.exchange, Main.this.player);
- marketController.handleStockPoolUpdate(Main.this.exchange, Main.this.player, dynamicStocks);
-
- if (!dynamicStocks.isEmpty()) {
- miniGamesController.setActiveStock(dynamicStocks.getFirst());
- }
+ /**
+ * Active {@link Exchange} object.
+ */
+ private Exchange exchange;
+
+ /**
+ * Active {@link Player} object.
+ */
+ private Player player;
+
+ /**
+ * Main method, launches the start javafx method.
+ *
+ * @param args standard Java parameter.
+ */
+ public static void main(final String[] args) {
+ launch(args);
+ }
+
+ @Override
+ public void start(final Stage stage) throws Exception {
+ Scene scene = new Scene(new Pane());
+ scene.getStylesheets()
+ .add(Objects.requireNonNull(getClass().getResource("/styles.css")).toExternalForm());
+ Font.loadFont(getClass().getResourceAsStream("/Fonts/Aptos.ttf"), 16);
+ stage.setScene(scene);
+ stage.setWidth(ConfigValues.VIEWPORT_WIDTH.getValue());
+ stage.setHeight(ConfigValues.VIEWPORT_HEIGHT.getValue());
+ stage.setMinWidth(ConfigValues.MIN_VIEWPORT_WIDTH.getValue());
+ stage.setMinHeight(ConfigValues.MIN_VIEWPORT_HEIGHT.getValue());
+
+ ThemeManager.getInstance().registerScene(scene);
+
+ EventManager eventManager = new EventManager();
+ ViewManager viewManager = new ViewManager(stage, eventManager);
+
+ // Loads a default file in case of misreading (fallback)
+ StockFileManager fileManager = new StockFileManager("src/main/resources/sp500.csv");
+ StockFileParser fileParser = new StockFileParser();
+ List stocksInFile = fileParser.getStocksFromStrings(fileManager.readFile());
+
+ exchange = new Exchange("Exchange", stocksInFile);
+ player = new Player("Player 1", new BigDecimal("10000"));
+
+ GameStateLoader gameStateLoader = new GameStateLoader(
+ player, exchange, stocksInFile, eventManager);
+
+ MainMenuView mainMenuView = new MainMenuView();
+ new MainMenuController(mainMenuView, eventManager);
+
+ PlayGameView playGameView = new PlayGameView();
+ SaveGameService saveGameService = new SaveGameService();
+ PlayGameController playGameController = new PlayGameController(playGameView, eventManager,
+ saveGameService);
+ playGameController.refresh();
+
+ CreateGameView createGameView = new CreateGameView();
+ CreateGameController createGameController = new CreateGameController(createGameView, eventManager,
+ saveGameService);
+ createGameController.setOnSaveCreated(playGameController::refresh);
+
+ SettingsView settingsView = new SettingsView();
+ new SettingsController(settingsView, eventManager);
+
+ SummaryView summaryView = new SummaryView();
+ SummaryController summaryController = new SummaryController(summaryView, eventManager, exchange,
+ player);
+
+ TopBarView topBarView = new TopBarView(summaryView);
+ TopBarController topBarController = new TopBarController(topBarView, eventManager);
+
+ TopBarView topBarView2 = new TopBarView();
+ new TopBarController(topBarView2, eventManager);
+
+ DashBoardView dashBoardView = new DashBoardView();
+ DashBoardController dashBoardController = new DashBoardController(dashBoardView, eventManager, player,
+ exchange, stocksInFile);
+
+ StatsView statsView = new StatsView();
+ StatsController statsController = new StatsController(statsView, eventManager, player, exchange);
+
+ MarketView marketView = new MarketView();
+ MarketController marketController = new MarketController(marketView, eventManager, player, exchange,
+ stocksInFile);
+
+ InGameView inGameView = new InGameView(topBarView, dashBoardView.getRootPane());
+ InGameController inGameController = new InGameController(inGameView, eventManager);
+
+ TransactionsView transactionsView = new TransactionsView();
+ TransactionsController transactionsController = new TransactionsController(
+ transactionsView, eventManager, player.getTransactionArchive());
+
+ ClickerGame clickerGame = new ClickerGame();
+ FindStockGame findStockGame = new FindStockGame(
+ stocksInFile.stream().map(Stock::getSymbol).toList());
+ TimeInputsGame timeInputsGame = new TimeInputsGame();
+
+ GameEngineView gameEngineView = new GameEngineView();
+ GameEngineController gameEngineController = new GameEngineController(
+ gameEngineView, eventManager, stocksInFile.getFirst());
+
+ MiniGamesView miniGamesView = new MiniGamesView();
+ MiniGamesController miniGamesController = new MiniGamesController(
+ miniGamesView, eventManager, stocksInFile.getFirst(), gameEngineView,
+ gameEngineController, clickerGame, inGameView, findStockGame, timeInputsGame);
+
+ // Adds a generic event subscriber to the event manager
+ // that handles STATE_RESET events. These events are
+ // triggered when a new save file is loaded.
+ // We define this implementation here, because
+ // this class has the highest level overview of the application.
+ eventManager.addSubscriber(new EventSubscriber() {
+ @Override
+ public void handleEvent(final EventData eventData) {
+ if (eventData.data() instanceof SaveGame) {
+
+ if (createGameController.getExchange() != null
+ && createGameController.getPlayer() != null) {
+ gameStateLoader.setExchange(createGameController.getExchange());
+
+ exchange = createGameController.getExchange();
+ player = createGameController.getPlayer();
+ } else {
+ exchange = gameStateLoader.getExchange();
+ player = gameStateLoader.getPlayer();
+ }
+
+ List dynamicStocks = exchange.getStocks();
+
+ // Updates the various UI components that
+ // depend on an exchange, player, or list of stocks.
+ findStockGame.updateStockPool(
+ dynamicStocks.stream().map(Stock::getSymbol).toList());
+ summaryController.handleContextUpdate(Main.this.exchange, Main.this.player);
+ dashBoardController.handleStockPoolUpdate(dynamicStocks);
+ statsController.handleContextUpdate(Main.this.exchange, Main.this.player);
+ marketController.handleStockPoolUpdate(Main.this.exchange, Main.this.player,
+ dynamicStocks);
+
+ if (!dynamicStocks.isEmpty()) {
+ miniGamesController.setActiveStock(dynamicStocks.getFirst());
+ }
+ }
+ }
+ }, EventType.STATE_RESET);
+
+ topBarController.setMarketIntegration(
+ inGameView::changeCenterView, dashBoardView.getRootPane(), marketView.getRootPane(),
+ statsView.getRootPane(), transactionsView.getRootPane(),
+ transactionsController::refresh,
+ miniGamesView.getRootPane());
+
+ InGameSettingsView inGameSettingsView = new InGameSettingsView();
+ InGameSettingsController inGameSettingsController = new InGameSettingsController(inGameSettingsView,
+ eventManager, inGameView);
+ topBarController.setSettingsAction(inGameSettingsController::show);
+
+ topBarController.setOnQuitToMainMenu(() -> {
+ System.out.println("[auto-save] Quit triggered, attempting snapshot...");
+ SaveGame snapshot = gameStateLoader.snapshotActiveSave();
+ if (snapshot == null) {
+ System.out.println("[auto-save] No active save - nothing to write.");
+ return;
+ }
+ try {
+ saveGameService.saveGame(snapshot);
+ System.out.println("[auto-save] Wrote save '" + snapshot.getName() + "' to disk.");
+ } catch (Exception e) {
+ System.err.println("[auto-save] Failed: " + e.getMessage());
+ }
+ });
+
+ viewManager.addView(mainMenuView);
+ viewManager.addView(playGameView);
+ viewManager.addView(createGameView);
+ viewManager.addView(settingsView);
+ viewManager.addView(inGameView);
+ viewManager.setScene(mainMenuView);
+
+ inGameController.addwidget(WidgetEnum.DASHBOARD, dashBoardView.getRootPane());
+ inGameController.addwidget(WidgetEnum.MARKET, marketView.getRootPane());
+ inGameController.addwidget(WidgetEnum.MINIGAMES_OVERVIEW, miniGamesView.getRootPane());
+ inGameController.addwidget(WidgetEnum.MINIGAMES_ENGINE, gameEngineView.getRootPane());
+ inGameController.addwidget(WidgetEnum.STATS, statsView.getRootPane());
+ inGameController.addwidget(WidgetEnum.TRANSACTIONS, transactionsView.getRootPane());
+
+ stage.show();
}
- }
- }, EventType.STATE_RESET);
-
- topBarController.setMarketIntegration(
- inGameView::changeCenterView, dashBoardView.getRootPane(), marketView.getRootPane(),
- statsView.getRootPane(), transactionsView.getRootPane(), transactionsController::refresh,
- miniGamesView.getRootPane()
- );
-
- InGameSettingsView inGameSettingsView = new InGameSettingsView();
- InGameSettingsController inGameSettingsController =
- new InGameSettingsController(inGameSettingsView, eventManager, inGameView);
- topBarController.setSettingsAction(inGameSettingsController::show);
-
- topBarController.setOnQuitToMainMenu(() -> {
- System.out.println("[auto-save] Quit triggered, attempting snapshot...");
- SaveGame snapshot = gameStateLoader.snapshotActiveSave();
- if (snapshot == null) {
- System.out.println("[auto-save] No active save - nothing to write.");
- return;
- }
- try {
- saveGameService.saveGame(snapshot);
- System.out.println("[auto-save] Wrote save '" + snapshot.getName() + "' to disk.");
- } catch (Exception e) {
- System.err.println("[auto-save] Failed: " + e.getMessage());
- }
- });
-
- viewManager.addView(mainMenuView);
- viewManager.addView(playGameView);
- viewManager.addView(createGameView);
- viewManager.addView(settingsView);
- viewManager.addView(inGameView);
- viewManager.setScene(mainMenuView);
-
- inGameController.addwidget(WidgetEnum.DASHBOARD, dashBoardView.getRootPane());
- inGameController.addwidget(WidgetEnum.MARKET, marketView.getRootPane());
- inGameController.addwidget(WidgetEnum.MINIGAMES_OVERVIEW, miniGamesView.getRootPane());
- inGameController.addwidget(WidgetEnum.MINIGAMES_ENGINE, gameEngineView.getRootPane());
- inGameController.addwidget(WidgetEnum.STATS, statsView.getRootPane());
- inGameController.addwidget(WidgetEnum.TRANSACTIONS, transactionsView.getRootPane());
-
- stage.show();
- }
}
diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java
index 6034df8..e2ebb5b 100644
--- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java
+++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/utils/ConfigValues.java
@@ -2,28 +2,38 @@
/**
* Enum containing configuration values for the application.
- * */
+ */
public enum ConfigValues {
/**
* Standard viewport width.
- * */
- VIEWPORT_WIDTH(600),
+ */
+ VIEWPORT_WIDTH(1400),
/**
* Standard viewport height.
- * */
- VIEWPORT_HEIGHT(600);
+ */
+ VIEWPORT_HEIGHT(800),
+
+ /**
+ * Minimum viewport width. The window cannot be resized smaller than this.
+ */
+ MIN_VIEWPORT_WIDTH(1400),
+
+ /**
+ * Minimum viewport height. The window cannot be resized smaller than this.
+ */
+ MIN_VIEWPORT_HEIGHT(800);
/**
* Integer parameter of a config value.
- * */
+ */
private final int value;
/**
* Constructor.
*
* @param value the value to assign this configuration.
- * */
+ */
ConfigValues(final int value) {
this.value = value;
}
@@ -32,8 +42,8 @@ public enum ConfigValues {
* Getter method for value.
*
* @return value of the configuration.
- * */
+ */
public int getValue() {
return value;
}
-}
+}
\ No newline at end of file