2 Commits

Author SHA1 Message Date
lieght
816a0b953e Escape can't be opened in mainview now 2025-12-06 15:11:23 +01:00
lieght
b0c7c74346 Tutorials moved to escape menu 2025-12-06 15:04:07 +01:00
5 changed files with 54 additions and 25 deletions

View File

@@ -140,6 +140,12 @@ public final class App extends Application {
} }
public void escapePopup() { public void escapePopup() {
if ( WidgetContainer.getCurrentView() == null
|| WidgetContainer.getCurrentView() instanceof MainView) {
return;
}
if (!Objects.requireNonNull( if (!Objects.requireNonNull(
WidgetContainer.find(widget -> widget instanceof QuitPopup || widget instanceof EscapePopup) WidgetContainer.find(widget -> widget instanceof QuitPopup || widget instanceof EscapePopup)
).isEmpty()) { ).isEmpty()) {

View File

@@ -1,31 +1,47 @@
package org.toop.app.widget.popup; package org.toop.app.widget.popup;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import org.toop.app.App; import javafx.scene.Node;
import org.toop.app.widget.Primitive; import org.toop.app.widget.Primitive;
import org.toop.app.widget.WidgetContainer; 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.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.MainView;
import org.toop.app.widget.view.OptionsView; import org.toop.app.widget.view.OptionsView;
import org.toop.local.AppContext;
import java.util.ArrayList;
public class EscapePopup extends PopupWidget { public class EscapePopup extends PopupWidget {
public EscapePopup() { public EscapePopup() {
var con = Primitive.button("Continue", this::hide, false); // TODO, localize ViewWidget currentView = WidgetContainer.getCurrentView();
ArrayList<Node> nodes = new ArrayList<>();
var qui = Primitive.button("quit", () -> { nodes.add(Primitive.button("Continue", this::hide, false)); // TODO, localize
hide();
WidgetContainer.add(Pos.CENTER, new QuitPopup());
});
if (!(WidgetContainer.getCurrentView().getClass().isAssignableFrom(OptionsView.class))) { if (!(currentView.getClass().isAssignableFrom(OptionsView.class))) {
var opt = Primitive.button("options", () -> { var opt = Primitive.button("options", () -> {
hide(); hide();
WidgetContainer.getCurrentView().transitionNext(new OptionsView()); WidgetContainer.getCurrentView().transitionNext(new OptionsView());
}); });
add(Pos.CENTER, Primitive.vbox(con, opt, qui)); nodes.add(opt);
} else {
add(Pos.CENTER, Primitive.vbox(con, qui));
} }
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])));
} }
} }

View File

@@ -26,7 +26,6 @@ public final class GameView extends ViewWidget {
private Circle player2Icon; private Circle player2Icon;
private final Button forfeitButton; private final Button forfeitButton;
private final Button exitButton; private final Button exitButton;
private final Button tutorialButton;
private final TextField chatInput; private final TextField chatInput;
private final Text keyThingy; private final Text keyThingy;
private boolean hasSet = false; private boolean hasSet = false;
@@ -63,13 +62,14 @@ public final class GameView extends ViewWidget {
switch (gameType) { switch (gameType) {
case "TicTacToe": case "TicTacToe":
this.tutorialButton = Primitive.button("tutorialstring", () -> new TicTacToeTutorialWidget(() -> {})); break; AppContext.setCurrentTutorial(new TicTacToeTutorialWidget(() -> {}));
break;
case "Reversi": case "Reversi":
this.tutorialButton = Primitive.button("tutorialstring", () -> new ReversiTutorialWidget(() -> {})); break; AppContext.setCurrentTutorial(new ReversiTutorialWidget(() -> {}));
break;
case "Connect4": case "Connect4":
this.tutorialButton = Primitive.button("tutorialstring", () -> new Connect4TutorialWidget(() -> {})); break; AppContext.setCurrentTutorial(new Connect4TutorialWidget(() -> {}));
default: break;
this.tutorialButton = null; break;
} }
setupLayout(); setupLayout();
@@ -92,10 +92,6 @@ public final class GameView extends ViewWidget {
if (chatInput != null) { if (chatInput != null) {
add(Pos.BOTTOM_RIGHT, Primitive.vbox(chatInput)); 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) { public void nextPlayer(boolean isMe, String currentPlayer, String currentMove, String nextPlayer, char GameType) {

View File

@@ -5,6 +5,7 @@ import java.util.MissingResourceException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.toop.app.widget.tutorial.BaseTutorialWidget;
import org.toop.framework.resource.ResourceManager; import org.toop.framework.resource.ResourceManager;
import org.toop.framework.resource.resources.LocalizationAsset; import org.toop.framework.resource.resources.LocalizationAsset;
@@ -16,11 +17,13 @@ import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
public class AppContext { public class AppContext {
private static final Logger logger = LogManager.getLogger(AppContext.class);
private static final LocalizationAsset localization = ResourceManager.get("localization"); private static final LocalizationAsset localization = ResourceManager.get("localization");
private static Locale locale = Locale.forLanguageTag("en"); private static Locale locale = Locale.forLanguageTag("en");
private static final ObjectProperty<Locale> localeProperty = new SimpleObjectProperty<>(locale); private static final ObjectProperty<Locale> localeProperty = new SimpleObjectProperty<>(locale);
private static final Logger logger = LogManager.getLogger(AppContext.class); private static BaseTutorialWidget tutorialWidget;
public static LocalizationAsset getLocalization() { public static LocalizationAsset getLocalization() {
return localization; return localization;
@@ -73,4 +76,12 @@ public class AppContext {
public static StringBinding bindToKey(String key) { public static StringBinding bindToKey(String key) {
return bindToKey(key, true); return bindToKey(key, true);
} }
public static void setCurrentTutorial(BaseTutorialWidget tutorial) {
AppContext.tutorialWidget = tutorial;
}
public static BaseTutorialWidget currentTutorial() {
return AppContext.tutorialWidget;
}
} }

View File

@@ -142,7 +142,7 @@ public final class GlobalEventBus {
try { try {
callListener(listener, event); callListener(listener, event);
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); logger.warn("Exception while handling event: {}", event, e);
} }
} }
} }
@@ -153,7 +153,7 @@ public final class GlobalEventBus {
try { try {
callListener(listener, event); callListener(listener, event);
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); logger.warn("Exception while handling event: {}", event, e);
} }
} }
} }