From b0c7c74346a4f0aa2451bc233e49475dffc660d7 Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Sat, 6 Dec 2025 15:04:07 +0100 Subject: [PATCH] Tutorials moved to escape menu --- .../toop/app/widget/popup/EscapePopup.java | 37 ++++++++++++++----- .../org/toop/app/widget/view/GameView.java | 18 ++++----- .../main/java/org/toop/local/AppContext.java | 13 ++++++- .../framework/eventbus/GlobalEventBus.java | 4 +- 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java b/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java index e36c82a..2fad839 100644 --- a/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java +++ b/app/src/main/java/org/toop/app/widget/popup/EscapePopup.java @@ -1,31 +1,50 @@ package org.toop.app.widget.popup; import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Button; import org.toop.app.App; import org.toop.app.widget.Primitive; import org.toop.app.widget.WidgetContainer; import org.toop.app.widget.complex.ConfirmWidget; import org.toop.app.widget.complex.PopupWidget; +import org.toop.app.widget.complex.ViewWidget; +import org.toop.app.widget.tutorial.*; +import org.toop.app.widget.view.GameView; import org.toop.app.widget.view.OptionsView; +import org.toop.local.AppContext; + +import java.awt.*; +import java.util.ArrayList; public class EscapePopup extends PopupWidget { public EscapePopup() { - var con = Primitive.button("Continue", this::hide, false); // TODO, localize + ArrayList nodes = new ArrayList<>(); + ViewWidget currentView = WidgetContainer.getCurrentView(); - var qui = Primitive.button("quit", () -> { - hide(); - WidgetContainer.add(Pos.CENTER, new QuitPopup()); - }); + nodes.add(Primitive.button("Continue", this::hide, false)); // TODO, localize - if (!(WidgetContainer.getCurrentView().getClass().isAssignableFrom(OptionsView.class))) { + if (!(currentView.getClass().isAssignableFrom(OptionsView.class))) { var opt = Primitive.button("options", () -> { hide(); WidgetContainer.getCurrentView().transitionNext(new OptionsView()); }); - add(Pos.CENTER, Primitive.vbox(con, opt, qui)); - } else { - add(Pos.CENTER, Primitive.vbox(con, qui)); + nodes.add(opt); } + if (currentView.getClass().isAssignableFrom(GameView.class)) { + BaseTutorialWidget tut = AppContext.currentTutorial(); + if (tut != null) { + nodes.add(Primitive.button("tutorialstring", () -> {})); + } + } + + nodes.add(Primitive.button("quit", () -> { + hide(); + WidgetContainer.add(Pos.CENTER, new QuitPopup()); + })); + + add(Pos.CENTER, Primitive.vbox(nodes.toArray(new Node[0]))); + } } diff --git a/app/src/main/java/org/toop/app/widget/view/GameView.java b/app/src/main/java/org/toop/app/widget/view/GameView.java index 84cdf14..94d8cd7 100644 --- a/app/src/main/java/org/toop/app/widget/view/GameView.java +++ b/app/src/main/java/org/toop/app/widget/view/GameView.java @@ -26,7 +26,6 @@ public final class GameView extends ViewWidget { private Circle player2Icon; private final Button forfeitButton; private final Button exitButton; - private final Button tutorialButton; private final TextField chatInput; private final Text keyThingy; private boolean hasSet = false; @@ -61,15 +60,16 @@ public final class GameView extends ViewWidget { chatInput = null; } - switch(gameType) { + switch (gameType) { case "TicTacToe": - this.tutorialButton = Primitive.button("tutorialstring", () -> new TicTacToeTutorialWidget(() -> {})); break; + AppContext.setCurrentTutorial(new TicTacToeTutorialWidget(() -> {})); + break; case "Reversi": - this.tutorialButton = Primitive.button("tutorialstring", () -> new ReversiTutorialWidget(() -> {})); break; + AppContext.setCurrentTutorial(new ReversiTutorialWidget(() -> {})); + break; case "Connect4": - this.tutorialButton = Primitive.button("tutorialstring", () -> new Connect4TutorialWidget(() -> {})); break; - default: - this.tutorialButton = null; break; + AppContext.setCurrentTutorial(new Connect4TutorialWidget(() -> {})); + break; } setupLayout(); @@ -92,10 +92,6 @@ public final class GameView extends ViewWidget { if (chatInput != null) { add(Pos.BOTTOM_RIGHT, Primitive.vbox(chatInput)); } - - if (tutorialButton != null) { - add(Pos.TOP_LEFT, tutorialButton); - } } public void nextPlayer(boolean isMe, String currentPlayer, String currentMove, String nextPlayer, char GameType) { diff --git a/app/src/main/java/org/toop/local/AppContext.java b/app/src/main/java/org/toop/local/AppContext.java index 37e9040..2eb3ea5 100644 --- a/app/src/main/java/org/toop/local/AppContext.java +++ b/app/src/main/java/org/toop/local/AppContext.java @@ -5,6 +5,7 @@ import java.util.MissingResourceException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.toop.app.widget.tutorial.BaseTutorialWidget; import org.toop.framework.resource.ResourceManager; import org.toop.framework.resource.resources.LocalizationAsset; @@ -16,11 +17,13 @@ import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; public class AppContext { + private static final Logger logger = LogManager.getLogger(AppContext.class); + private static final LocalizationAsset localization = ResourceManager.get("localization"); private static Locale locale = Locale.forLanguageTag("en"); private static final ObjectProperty localeProperty = new SimpleObjectProperty<>(locale); - private static final Logger logger = LogManager.getLogger(AppContext.class); + private static BaseTutorialWidget tutorialWidget; public static LocalizationAsset getLocalization() { return localization; @@ -73,4 +76,12 @@ public class AppContext { public static StringBinding bindToKey(String key) { return bindToKey(key, true); } + + public static void setCurrentTutorial(BaseTutorialWidget tutorial) { + AppContext.tutorialWidget = tutorial; + } + + public static BaseTutorialWidget currentTutorial() { + return AppContext.tutorialWidget; + } } \ No newline at end of file diff --git a/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java b/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java index 20fbbf1..dfefcb1 100644 --- a/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java +++ b/framework/src/main/java/org/toop/framework/eventbus/GlobalEventBus.java @@ -142,7 +142,7 @@ public final class GlobalEventBus { try { callListener(listener, event); } catch (Throwable e) { - e.printStackTrace(); + logger.warn("Exception while handling event: {}", event, e); } } } @@ -153,7 +153,7 @@ public final class GlobalEventBus { try { callListener(listener, event); } catch (Throwable e) { - e.printStackTrace(); + logger.warn("Exception while handling event: {}", event, e); } } }