Skip to content

Commit

Permalink
Feat: Replaced market integration with pub/sub
Browse files Browse the repository at this point in the history
  • Loading branch information
tommyah committed May 26, 2026
1 parent 76de2f1 commit db75c15
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 104 deletions.
6 changes: 0 additions & 6 deletions src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -213,12 +213,6 @@ public <T> void handleEvent(final EventData<T> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -23,12 +25,21 @@ public final class InGameController extends ViewController<InGameView>
private final EnumMap<WidgetEnum, Node> 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);
}

Expand All @@ -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() {

Expand All @@ -53,5 +72,16 @@ public <T> void handleEvent(final EventData<T> 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<ViewData> eventData = new EventData<>(EventType.SCENE_CHANGE, viewData);
invoke(eventData);
}
} else {
getViewElement().getTopBarView().setQuitText("Back");
}
activeWidget = (WidgetEnum) data.data();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

/**
Expand Down Expand Up @@ -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<WidgetEnum> 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.
*
* <p>
* After this method is called:
* </p>
* <ul>
* <li>{@code STATS} swaps the center to the stats view and switches
* the quit/back button to "Back".</li>
* <li>{@code MARKET} swaps the center to the market and switches the
* button to "Back".</li>
* <li>{@code TRANSACTIONS} swaps the center to the transactions view
* and switches the button to "Back".</li>
* <li>{@code EXIT} returns to the dashboard if any sub-view is open,
* otherwise to the main menu.</li>
* </ul>
*
* @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<Node> 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<WidgetEnum> eventData =
new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.STATS);
invoke(eventData);
}
);

getViewElement().setOnAction(TopBarActions.MARKET,
() -> {
EventData<WidgetEnum> eventData =
new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.MARKET);
invoke(eventData);
}
);

getViewElement().setOnAction(TopBarActions.TRANSACTIONS,
() -> {
EventData<WidgetEnum> eventData =
new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.TRANSACTIONS);
invoke(eventData);
}
);

getViewElement().setOnAction(TopBarActions.MINIGAMES,
() -> {
EventData<WidgetEnum> eventData =
new EventData<>(EventType.CHANGE_INGAME_CENTER, WidgetEnum.MINIGAMES_OVERVIEW);
invoke(eventData);
}
);
}

/**
Expand Down

0 comments on commit db75c15

Please sign in to comment.