From d47084d6f54d477990b57f857261dbb978b53ac3 Mon Sep 17 00:00:00 2001 From: Julian Kropff Date: Thu, 12 Mar 2026 07:24:28 +0100 Subject: [PATCH] feat(game-ui): add TaskbarController --- .../gameuicomponents/TaskbarController.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/gameuicomponents/TaskbarController.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/gameuicomponents/TaskbarController.java new file mode 100644 index 0000000..995d4c9 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/gameuicomponents/TaskbarController.java @@ -0,0 +1,84 @@ +package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.gameuicomponents; + +import javafx.application.Platform; +import javafx.fxml.FXML; +import javafx.scene.control.TextField; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.HBox; + +/** + * Controller für die interaktive Taskleiste innerhalb der Poker-UI. + * + * Verantwortlich für: + * - Drag-and-Drop-Verschieben der Taskleiste, + * - Eingabe und Verwaltung von Spieleinsätzen, + * - Steuerung allgemeiner Menüfunktionen wie Exit. + * + * Dient als Schnittstelle zwischen Benutzerinteraktionen und der Spiellogik. + */ +public class TaskbarController { + + @FXML private HBox taskbar; + @FXML private TextField taskbarInput; + + private double xOffset = 0; + private double yOffset = 0; + + // Logik für das Verschieben der Taskleiste: Maus gedrückt + @FXML + private void onTaskbarPressed(MouseEvent event) { + xOffset = event.getSceneX() - taskbar.getLayoutX(); + yOffset = event.getSceneY() - taskbar.getLayoutY(); + } + + // Logik für das Verschieben der Taskleiste: Maus ziehen + @FXML + private void onTaskbarDragged(MouseEvent event) { + taskbar.setLayoutX(event.getSceneX() - xOffset); + taskbar.setLayoutY(event.getSceneY() - yOffset); + + taskbar.setScaleX(0.9); + taskbar.setScaleY(0.9); + } + + // Logik für das Verschieben der Taskleiste: Maus loslassen + @FXML + private void onTaskbarReleased(MouseEvent event) { + taskbar.setScaleX(1.0); + taskbar.setScaleY(1.0); + } + + // Enter-Taste im Textfeld (in der Taskleiste) + @FXML + private void onInputSubmitted(KeyEvent event) { + if (event.getCode() == KeyCode.ENTER) { + processBet(); + } + } + + // Submit-Button (in der Taskleiste) + @FXML + private void onInputSubmittedAction() { + processBet(); + } + + // Exit-Button (in der Taskleiste) + // TODO: Logik implementieren, um zur Lobby zurückzukehren, + // ohne die gesamte Anwendung zu schließen (kein System.exit/Platform.exit). + @FXML + private void onExitButtonClick() { + Platform.exit(); + } + + // Logik zum Verarbeiten des Einsatzes + private void processBet() { + String input = taskbarInput.getText(); + if (input != null && !input.isEmpty()) { + // TODO: System.out durch echte Kommunikation mit der GameEngine ersetzen, sobald die Logik steht + System.out.println("Einsatz gesetzt: " + input + " Credits"); + taskbarInput.clear(); + } + } +} \ No newline at end of file