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 32de983..99d33ce 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 @@ -213,12 +213,6 @@ public void handleEvent(final EventData eventData) { } }, 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); diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameController.java index d0b30d8..f099411 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameController.java @@ -5,6 +5,8 @@ import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventSubscriber; import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventType; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewController; +import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewData; +import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewEnum; import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.WidgetEnum; import java.util.EnumMap; import javafx.scene.Node; @@ -23,12 +25,21 @@ public final class InGameController extends ViewController private final EnumMap widgetMap = new EnumMap<>(WidgetEnum.class); /** - * {@inheritDoc}. + * Value representing currently active widget. + */ + private WidgetEnum activeWidget; + + /** + * Constructor. + * + * @param viewElement the associated {@link InGameView}. + * @param eventManager the active {@link EventManager}. */ public InGameController(final InGameView viewElement, final EventManager eventManager) throws IllegalArgumentException { super(viewElement, eventManager); + activeWidget = WidgetEnum.DASHBOARD; eventManager.addSubscriber(this, EventType.CHANGE_INGAME_CENTER); } @@ -42,6 +53,14 @@ public void addwidget(final WidgetEnum widgetEnum, final Node widgetRoot) { widgetMap.put(widgetEnum, widgetRoot); } + /** + * Getter method for currently active widget. + * */ + private WidgetEnum getActiveWidget() { + return activeWidget; + } + + @Override protected void initInteractions() { @@ -53,5 +72,16 @@ public void handleEvent(final EventData data) { throw new IllegalArgumentException("Invalid event thrown!"); } getViewElement().changeCenterView(widgetMap.get(data.data())); + if (data.data() == WidgetEnum.DASHBOARD) { + getViewElement().getTopBarView().setQuitText("Quit"); + if (activeWidget == WidgetEnum.DASHBOARD) { + ViewData viewData = new ViewData(ViewEnum.MAIN_MENU); + EventData eventData = new EventData<>(EventType.SCENE_CHANGE, viewData); + invoke(eventData); + } + } else { + getViewElement().getTopBarView().setQuitText("Back"); + } + activeWidget = (WidgetEnum) data.data(); } } diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameView.java index 7027655..1055ac3 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ingame/InGameView.java @@ -48,6 +48,11 @@ protected void initStyling() { getRootPane().getStyleClass().add("in-game-root"); } + /** + * Changes the center of the in-game view wrapper to a new widget view element. + * + * @param newCenterView the root node of the new center to set. + * */ public void changeCenterView(final Node newCenterView) { this.centerView = newCenterView; centerStack.getChildren().clear(); @@ -57,6 +62,13 @@ public void changeCenterView(final Node newCenterView) { } } + /** + * Getter method for top bar. + * */ + public TopBarView getTopBarView() { + return topBarView; + } + /** * Shows a settings overlay on top of the current center view. * diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/topbar/TopBarController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/topbar/TopBarController.java index ef677b0..e840703 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/topbar/TopBarController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/topbar/TopBarController.java @@ -1,9 +1,13 @@ package edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.topbar; +import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventData; import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager; +import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventType; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewController; import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewEnum; import java.util.function.Consumer; + +import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.WidgetEnum; import javafx.scene.Node; /** @@ -75,105 +79,42 @@ public TopBarController(final TopBarView viewElement, final EventManager eventMa @Override protected void initInteractions() { getViewElement().setOnAction(TopBarActions.EXIT, () -> { - onQuitToMainMenu.run(); - changeScene(ViewEnum.MAIN_MENU); + EventData eventData = + new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.DASHBOARD); + invoke(eventData); }); - getViewElement().setOnAction(TopBarActions.STATS, () -> changeScene(ViewEnum.MAIN_MENU)); - - getViewElement().setOnAction(TopBarActions.MARKET, () -> changeScene(ViewEnum.MAIN_MENU)); - - getViewElement().setOnAction(TopBarActions.SETTINGS, () -> changeScene(ViewEnum.MAIN_MENU)); - } - - /** - * Wires the top bar buttons to swap between the dashboard, stats, - * market and transactions center-views inside the in-game view. - * - *

- * After this method is called: - *

- *
    - *
  • {@code STATS} swaps the center to the stats view and switches - * the quit/back button to "Back".
  • - *
  • {@code MARKET} swaps the center to the market and switches the - * button to "Back".
  • - *
  • {@code TRANSACTIONS} swaps the center to the transactions view - * and switches the button to "Back".
  • - *
  • {@code EXIT} returns to the dashboard if any sub-view is open, - * otherwise to the main menu.
  • - *
- * - * @param centerSwitcher callback that swaps the center-view (typically - * {@code inGameView::changeCenterView}). - * @param dashboardCenter root pane of the dashboard widget (home). - * @param marketCenter root pane of the market widget. - * @param statsCenter root pane of the stats widget. - * @param transactionsCenter root pane of the transactions widget. - * @param onTransactionUpdate callback invoked when entering transactions. - * @param minigamesCenter root pane of the minigames widget. - */ - public void setMarketIntegration(final Consumer centerSwitcher, - final Node dashboardCenter, - final Node marketCenter, - final Node statsCenter, - final Node transactionsCenter, - final Runnable onTransactionUpdate, - final Node minigamesCenter - ) { - getViewElement().setOnAction(TopBarActions.EXIT, () -> { - if (inMarketView - || inStatsView - || inTransactionsView - || inMinigamesView) { - centerSwitcher.accept(dashboardCenter); - getViewElement().setQuitText("Quit"); - inMarketView = false; - inStatsView = false; - inTransactionsView = false; - inMinigamesView = false; - } else { - onQuitToMainMenu.run(); - changeScene(ViewEnum.MAIN_MENU); - } - }); - - getViewElement().setOnAction(TopBarActions.STATS, () -> { - centerSwitcher.accept(statsCenter); - getViewElement().setQuitText("Back"); - inMarketView = false; - inStatsView = true; - inTransactionsView = false; - inMinigamesView = false; - }); - - getViewElement().setOnAction(TopBarActions.MARKET, () -> { - centerSwitcher.accept(marketCenter); - getViewElement().setQuitText("Back"); - inMarketView = true; - inStatsView = false; - inTransactionsView = false; - inMinigamesView = false; - }); - - getViewElement().setOnAction(TopBarActions.TRANSACTIONS, () -> { - centerSwitcher.accept(transactionsCenter); - onTransactionUpdate.run(); - getViewElement().setQuitText("Back"); - inMarketView = false; - inStatsView = false; - inTransactionsView = true; - inMinigamesView = false; - }); - - getViewElement().setOnAction(TopBarActions.MINIGAMES, () -> { - centerSwitcher.accept(minigamesCenter); - getViewElement().setQuitText("Back"); - inMarketView = false; - inStatsView = false; - inTransactionsView = false; - inMinigamesView = true; - }); + getViewElement().setOnAction(TopBarActions.STATS, + () -> { + EventData eventData = + new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.STATS); + invoke(eventData); + } + ); + + getViewElement().setOnAction(TopBarActions.MARKET, + () -> { + EventData eventData = + new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.MARKET); + invoke(eventData); + } + ); + + getViewElement().setOnAction(TopBarActions.TRANSACTIONS, + () -> { + EventData eventData = + new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.TRANSACTIONS); + invoke(eventData); + } + ); + + getViewElement().setOnAction(TopBarActions.MINIGAMES, + () -> { + EventData eventData = + new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.MINIGAMES_OVERVIEW); + invoke(eventData); + } + ); } /**