From af0db24b0a8083a396e67c9236fba973a2ed8935 Mon Sep 17 00:00:00 2001 From: ramollia <@> Date: Sat, 4 Oct 2025 15:56:07 +0200 Subject: [PATCH] add: sliders change: formatting --- app/src/main/java/org/toop/app/App.java | 22 ++++++------ .../java/org/toop/app/events/AppEvents.java | 2 -- .../java/org/toop/app/layer/Container.java | 36 ++++++++++++++++--- .../main/java/org/toop/app/layer/Layer.java | 25 +++++++++---- .../layer/containers/HorizontalContainer.java | 6 ++-- .../layer/containers/VerticalContainer.java | 6 ++-- .../org/toop/app/layer/layers/GameLayer.java | 5 ++- .../org/toop/app/layer/layers/MainLayer.java | 23 +++++++++--- .../app/layer/layers/MultiplayerLayer.java | 33 +++++++++++------ .../org/toop/app/layer/layers/QuitLayer.java | 11 ++++-- app/src/main/resources/assets/style/app.css | 20 +++++++++-- 11 files changed, 142 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index d0116cb..e0a04b6 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -1,6 +1,5 @@ package org.toop.app; -import org.toop.app.canvas.GameCanvas; import org.toop.app.layer.Layer; import org.toop.app.layer.layers.MainLayer; import org.toop.app.layer.layers.QuitLayer; @@ -52,13 +51,13 @@ public final class App extends Application { App.stage = stage; App.root = root; - App.width = (int)stage.getWidth(); - App.height = (int)stage.getHeight(); + App.width = (int) stage.getWidth(); + App.height = (int) stage.getHeight(); App.isQuitting = false; activate(new MainLayer()); - } + } public static void activate(Layer layer) { popAll(); @@ -66,7 +65,7 @@ public final class App extends Application { } public static void push(Layer layer) { - root.getChildren().addLast(layer.getLayer()); + root.getChildren().addLast(layer.getLayer()); } public static void pop() { @@ -74,10 +73,6 @@ public final class App extends Application { isQuitting = false; } - public static void pushCanvas(GameCanvas canvas) { - root.getChildren().addLast(canvas.getCanvas()); - } - public static void popAll() { final int childrenCount = root.getChildren().size(); @@ -95,6 +90,11 @@ public final class App extends Application { stage.close(); } - public static int getWidth() { return width; } - public static int getHeight() { return height; } + public static int getWidth() { + return width; + } + + public static int getHeight() { + return height; + } } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/events/AppEvents.java b/app/src/main/java/org/toop/app/events/AppEvents.java index e326ff0..00a1d4d 100644 --- a/app/src/main/java/org/toop/app/events/AppEvents.java +++ b/app/src/main/java/org/toop/app/events/AppEvents.java @@ -6,7 +6,5 @@ import org.toop.framework.eventbus.events.EventsBase; public class AppEvents extends EventsBase { public record OnNodeHover() implements EventWithoutSnowflake {} - public record OnNodeClick() implements EventWithoutSnowflake {} - public record OnLanguageChange(String language) implements EventWithoutSnowflake {} } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/layer/Container.java b/app/src/main/java/org/toop/app/layer/Container.java index 7d53475..5f37e58 100644 --- a/app/src/main/java/org/toop/app/layer/Container.java +++ b/app/src/main/java/org/toop/app/layer/Container.java @@ -7,6 +7,7 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.scene.Node; import javafx.scene.control.Label; +import javafx.scene.control.Slider; import javafx.scene.control.TextField; import javafx.scene.layout.Region; import javafx.scene.text.Text; @@ -18,6 +19,7 @@ public abstract class Container { public abstract Region getContainer(); public abstract void addNode(Node node); + public abstract void addContainer(Container container, boolean fill); public void addText(String cssClass, String x, boolean wrap) { @@ -26,7 +28,9 @@ public abstract class Container { if (wrap) { addNode(new TextFlow(element)); - } else { addNode(element); } + } else { + addNode(element); + } } public void addText(String x, boolean wrap) { @@ -42,7 +46,6 @@ public abstract class Container { }); element.setOnMouseClicked(_ -> { - GlobalEventBus.post(new AppEvents.OnNodeClick()); runnable.run(); }); @@ -54,7 +57,7 @@ public abstract class Container { } public void addToggle(String cssClass, String x1, String x2, boolean toggled, Consumer consumer) { - final Label element = new Label(toggled? x2 : x1); + final Label element = new Label(toggled ? x2 : x1); element.getStyleClass().add(cssClass); final BooleanProperty checked = new SimpleBooleanProperty(toggled); @@ -64,7 +67,6 @@ public abstract class Container { }); element.setOnMouseClicked(_ -> { - GlobalEventBus.post(new AppEvents.OnNodeClick()); checked.set(!checked.get()); if (checked.get()) { @@ -83,6 +85,32 @@ public abstract class Container { addToggle("toggle", x1, x2, toggled, consumer); } + public void addSlider(String cssClass, int max, int initial, Consumer consumer) { + final Slider element = new Slider(0, max, initial); + element.getStyleClass().add(cssClass); + + element.setMinorTickCount(0); + element.setMajorTickUnit(1); + element.setBlockIncrement(1); + + element.setSnapToTicks(true); + element.setShowTickLabels(true); + + element.setOnMouseEntered(_ -> { + GlobalEventBus.post(new AppEvents.OnNodeHover()); + }); + + element.valueProperty().addListener((_, _, newValue) -> { + consumer.accept(newValue.intValue()); + }); + + addNode(element); + } + + public void addSlider(int max, int initial, Consumer consumer) { + addSlider("slider", max, initial, consumer); + } + public void addInput(String cssClass, String input, Consumer consumer) { final TextField element = new TextField(input); element.getStyleClass().add(cssClass); diff --git a/app/src/main/java/org/toop/app/layer/Layer.java b/app/src/main/java/org/toop/app/layer/Layer.java index a33ea92..933e581 100644 --- a/app/src/main/java/org/toop/app/layer/Layer.java +++ b/app/src/main/java/org/toop/app/layer/Layer.java @@ -37,11 +37,15 @@ public abstract class Layer { if (widthPercent > 0) { container.getContainer().setMaxWidth(widthPercent * widthUnit); - } else { container.getContainer().setMaxWidth(Region.USE_PREF_SIZE); } + } else { + container.getContainer().setMaxWidth(Region.USE_PREF_SIZE); + } if (heightPercent > 0) { container.getContainer().setMaxHeight(heightPercent * heightUnit); - } else { container.getContainer().setMaxHeight(Region.USE_PREF_SIZE); } + } else { + container.getContainer().setMaxHeight(Region.USE_PREF_SIZE); + } container.getContainer().setTranslateX(xOffset * widthUnit); container.getContainer().setTranslateY(yOffset * heightUnit); @@ -57,11 +61,15 @@ public abstract class Layer { if (widthPercent > 0) { canvas.getCanvas().setWidth(widthPercent * widthUnit); - } else { canvas.getCanvas().setWidth(Region.USE_PREF_SIZE); } + } else { + canvas.getCanvas().setWidth(Region.USE_PREF_SIZE); + } if (heightPercent > 0) { canvas.getCanvas().setHeight(heightPercent * heightUnit); - } else { canvas.getCanvas().setHeight(Region.USE_PREF_SIZE); } + } else { + canvas.getCanvas().setHeight(Region.USE_PREF_SIZE); + } canvas.getCanvas().setTranslateX(xOffset * widthUnit); canvas.getCanvas().setTranslateY(yOffset * heightUnit); @@ -85,8 +93,13 @@ public abstract class Layer { } } - public StackPane getLayer() { return layer; } - public Region getBackground() { return background; } + public StackPane getLayer() { + return layer; + } + + public Region getBackground() { + return background; + } public abstract void reload(); } \ No newline at end of file diff --git a/app/src/main/java/org/toop/app/layer/containers/HorizontalContainer.java b/app/src/main/java/org/toop/app/layer/containers/HorizontalContainer.java index 79b8fa0..11ca3f7 100644 --- a/app/src/main/java/org/toop/app/layer/containers/HorizontalContainer.java +++ b/app/src/main/java/org/toop/app/layer/containers/HorizontalContainer.java @@ -21,7 +21,9 @@ public final class HorizontalContainer extends Container { } @Override - public Region getContainer() { return container; } + public Region getContainer() { + return container; + } @Override public void addNode(Node node) { @@ -51,7 +53,7 @@ public final class HorizontalContainer extends Container { for (final Node child : children) { if (child instanceof Region) { - ((Region)child).setPrefWidth(widthPerChild); + ((Region) child).setPrefWidth(widthPerChild); } } } diff --git a/app/src/main/java/org/toop/app/layer/containers/VerticalContainer.java b/app/src/main/java/org/toop/app/layer/containers/VerticalContainer.java index ce9024f..6e8d803 100644 --- a/app/src/main/java/org/toop/app/layer/containers/VerticalContainer.java +++ b/app/src/main/java/org/toop/app/layer/containers/VerticalContainer.java @@ -21,7 +21,9 @@ public final class VerticalContainer extends Container { } @Override - public Region getContainer() { return container; } + public Region getContainer() { + return container; + } @Override public void addNode(Node node) { @@ -51,7 +53,7 @@ public final class VerticalContainer extends Container { for (final Node child : children) { if (child instanceof Region) { - ((Region)child).setPrefHeight(heightPerChild); + ((Region) child).setPrefHeight(heightPerChild); } } } diff --git a/app/src/main/java/org/toop/app/layer/layers/GameLayer.java b/app/src/main/java/org/toop/app/layer/layers/GameLayer.java index 3d2e645..9832b0e 100644 --- a/app/src/main/java/org/toop/app/layer/layers/GameLayer.java +++ b/app/src/main/java/org/toop/app/layer/layers/GameLayer.java @@ -18,7 +18,10 @@ public class GameLayer extends Layer { App.popAll(); final Container controlContainer = new VerticalContainer(5); - controlContainer.addButton("Back", () -> { App.activate(new MainLayer()); }); + + controlContainer.addButton("Back", () -> { + App.activate(new MainLayer()); + }); addCanvas(new TicTacToeCanvas(), Pos.CENTER, 0, 0, 100, 100); addContainer(controlContainer, Pos.BOTTOM_LEFT, 2, -2, 0, 0); diff --git a/app/src/main/java/org/toop/app/layer/layers/MainLayer.java b/app/src/main/java/org/toop/app/layer/layers/MainLayer.java index d156407..4781297 100644 --- a/app/src/main/java/org/toop/app/layer/layers/MainLayer.java +++ b/app/src/main/java/org/toop/app/layer/layers/MainLayer.java @@ -19,13 +19,26 @@ public final class MainLayer extends Layer { popAll(); final Container gamesContainer = new VerticalContainer(5); - gamesContainer.addButton("Tic Tac Toe", () -> { App.activate(new MultiplayerLayer(GameType.TICTACTOE)); }); - gamesContainer.addButton("Othello", () -> { App.activate(new MultiplayerLayer(GameType.OTHELLO)); }); + + gamesContainer.addButton("Tic Tac Toe", () -> { + App.activate(new MultiplayerLayer(GameType.TICTACTOE)); + }); + + gamesContainer.addButton("Othello", () -> { + App.activate(new MultiplayerLayer(GameType.OTHELLO)); + }); final Container controlContainer = new VerticalContainer(5); - controlContainer.addButton("Credits", () -> {}); - controlContainer.addButton("Options", () -> {}); - controlContainer.addButton("Quit", () -> { App.quitPopup(); }); + + controlContainer.addButton("Credits", () -> { + }); + + controlContainer.addButton("Options", () -> { + }); + + controlContainer.addButton("Quit", () -> { + App.quitPopup(); + }); addContainer(gamesContainer, Pos.TOP_LEFT, 2, 2, 25, 0); addContainer(controlContainer, Pos.BOTTOM_LEFT, 2, -2, 25, 0); diff --git a/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java b/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java index 10a6210..56ed738 100644 --- a/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java +++ b/app/src/main/java/org/toop/app/layer/layers/MultiplayerLayer.java @@ -2,7 +2,6 @@ package org.toop.app.layer.layers; import org.toop.app.App; import org.toop.app.GameType; -import org.toop.app.canvas.TicTacToeCanvas; import org.toop.app.layer.Container; import org.toop.app.layer.Layer; import org.toop.app.layer.containers.HorizontalContainer; @@ -26,26 +25,33 @@ public class MultiplayerLayer extends Layer { popAll(); final Container mainContainer = new VerticalContainer(5); + mainContainer.addToggle("Local", "Server", !isConnectionLocal, (server) -> { isConnectionLocal = !server; reload(); }); final Container playersContainer = new HorizontalContainer(50); + mainContainer.addContainer(playersContainer, true); final Container player1Container = new VerticalContainer("player_container", 5); + playersContainer.addContainer(player1Container, true); playersContainer.addText("VS", false); final Container player2Container = new VerticalContainer("player_container", 5); + playersContainer.addContainer(player2Container, true); if (isConnectionLocal) { - mainContainer.addButton("Start", () -> {}); + mainContainer.addButton("Start", () -> { + }); } else { - mainContainer.addButton("Connnect", () -> { App.activate(new GameLayer()); }); + mainContainer.addButton("Connnect", () -> { + App.activate(new GameLayer()); + }); } player1Container.addToggle("Human", "Computer", !isPlayer1Human, (computer) -> { @@ -57,8 +63,9 @@ public class MultiplayerLayer extends Layer { player1Container.addText("player is human", true); player1Container.addText("input player name here: ...", true); } else { - player1Container.addText("playing against ai", true); - player1Container.addToggle("Easy", "Hard", false, (hard) -> {}); + player1Container.addText("Computer depth", true); + player1Container.addSlider(9, 2, (depth) -> { + }); } if (isConnectionLocal) { @@ -71,19 +78,25 @@ public class MultiplayerLayer extends Layer { player2Container.addText("player is human", true); player2Container.addText("input player name here: ...", true); } else { - player2Container.addText("playing against ai", true); - player2Container.addToggle("Easy", "Hard", false, (hard) -> {}); + player2Container.addText("Computer depth", true); + player2Container.addSlider(9, 2, (depth) -> { + }); } } else { player2Container.addText("Server IP", true); - player2Container.addInput("", (input) -> {}); + player2Container.addInput("", (input) -> { + }); player2Container.addText("Server Port", true); - player2Container.addInput("", (input) -> {}); + player2Container.addInput("", (input) -> { + }); } final Container controlContainer = new VerticalContainer(5); - controlContainer.addButton("Back", () -> { App.activate(new MainLayer()); }); + + controlContainer.addButton("Back", () -> { + App.activate(new MainLayer()); + }); addContainer(mainContainer, Pos.CENTER, 0, 0, 75, 75); addContainer(controlContainer, Pos.BOTTOM_LEFT, 2, -2, 0, 0); diff --git a/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java b/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java index 1dc5af5..2c56c21 100644 --- a/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java +++ b/app/src/main/java/org/toop/app/layer/layers/QuitLayer.java @@ -19,13 +19,20 @@ public final class QuitLayer extends Layer { popAll(); final Container mainContainer = new VerticalContainer(30); + mainContainer.addText("Are you sure?", false); final Container controlContainer = new HorizontalContainer(30); + mainContainer.addContainer(controlContainer, false); - controlContainer.addButton("Yes", () -> { App.quit(); }); - controlContainer.addButton("No", () -> { App.pop(); }); + controlContainer.addButton("Yes", () -> { + App.quit(); + }); + + controlContainer.addButton("No", () -> { + App.pop(); + }); addContainer(mainContainer, Pos.CENTER, 0, 0, 30, 30); } diff --git a/app/src/main/resources/assets/style/app.css b/app/src/main/resources/assets/style/app.css index 6bafc5b..4d8dc33 100644 --- a/app/src/main/resources/assets/style/app.css +++ b/app/src/main/resources/assets/style/app.css @@ -24,6 +24,7 @@ -fx-font-size: 20px; -fx-background-color: transparent; + -fx-border-color: transparent; } @@ -37,9 +38,24 @@ } .input:focused { - -fx-border-color: transparent; - -fx-background-color: linear-gradient(to bottom right, orange, indigo), #1d1d1d; -fx-background-insets: 0, 2; -fx-background-radius: 8; + + -fx-border-color: transparent; +} + +.slider { + -fx-padding: 10; + + -fx-background-color: transparent; +} + +.slider .track { + -fx-background-color: linear-gradient(to right, #00ff00, #ff0000); + -fx-background-radius: 2; +} + +.slider .thumb { + -fx-background-color: linear-gradient(to bottom right, orange, indigo), #1d1d1d; } \ No newline at end of file