Skip to content

Commit

Permalink
Now u can't shrink the view smaller then content
Browse files Browse the repository at this point in the history
  • Loading branch information
EspenTinius committed May 26, 2026
1 parent 999eb6b commit f2fba7a
Show file tree
Hide file tree
Showing 2 changed files with 213 additions and 199 deletions.
384 changes: 194 additions & 190 deletions src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,198 +59,202 @@
/**
* Main class.
*
* <p>Extends {@link Application}</p>
* <p>
* Extends {@link Application}
* </p>
*
* <p>Launches the javafx thread and starts the program.</p>
* */
* <p>
* Launches the javafx thread and starts the program.
* </p>
*/
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<Stock> 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 <T> void handleEvent(final EventData<T> 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<Stock> 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<Stock> 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 <T> void handleEvent(final EventData<T> 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<Stock> 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();
}
}
Loading

0 comments on commit f2fba7a

Please sign in to comment.