فهرست منبع

Implemented first somewhat working action

Ondřej Schlaichert 8 ماه پیش
والد
کامیت
0cea0a9d36

+ 7 - 0
src/main/java/eu/oschl/gui/ButtonData.java

@@ -0,0 +1,7 @@
+package eu.oschl.gui;
+
+public record ButtonData(
+        String actionId,
+        String... arguments
+) {
+}

+ 44 - 8
src/main/java/eu/oschl/gui/GameController.java

@@ -1,23 +1,59 @@
 package eu.oschl.gui;
 
+import eu.oschl.gui.actions.Action;
+import eu.oschl.gui.exceptions.InvalidActionId;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
-import javafx.scene.text.Text;
+import javafx.scene.control.Button;
+import javafx.scene.layout.VBox;
 import javafx.scene.text.TextFlow;
 
-public class GameController {
+import java.util.ArrayList;
+
+public class GameController implements Observer {
     @FXML
     private TextFlow output;
 
     @FXML
-    private void onTestButtonClick(ActionEvent actionEvent) {
+    private VBox inputButtonContainer;
+
+    @FXML
+    public void initialize() {
+        Output.setOutputElement(output);
+        update();
+    }
+
+    @FXML
+    private void exectuteAction(ActionEvent event) throws InvalidActionId {
+        Button clickedButton = (Button) event.getSource();
+        ButtonData buttonData = (ButtonData) clickedButton.getUserData();
+
+        var actionProcessor = Session.getActionProcessor();
+
+        actionProcessor.executeAction(buttonData.actionId(), buttonData.arguments());
+    }
+
+    private void renderActionButtons() {
+        inputButtonContainer.getChildren().clear();
+
+        var newButtons = new ArrayList<Button>();
+
+        for (Action action : Session.getActionProcessor().getActions()) {
+            var actionButton = new Button(action.getName());
 
-        for (int i = 0; i < 50; i++) {
-            Text fragment1 = new Text("Hello, ");
-            Text fragment2 = new Text("favourite boy! ");
-            Text fragment3 = new Text("Welcome back. ");
+            actionButton.setUserData(new ButtonData(action.getId()));
+            actionButton.setOnAction(this::exectuteAction);
 
-            output.getChildren().addAll(fragment1, fragment2, fragment3);
+            actionButton.setMaxWidth(Double.MAX_VALUE);
+
+            newButtons.add(actionButton);
         }
+
+        inputButtonContainer.getChildren().addAll(newButtons);
+    }
+
+    @Override
+    public void update() {
+        renderActionButtons();
     }
 }

+ 8 - 0
src/main/java/eu/oschl/gui/Session.java

@@ -12,6 +12,14 @@ public class Session extends Application {
     private static Game game;
     private static ActionProcessor actionProcessor;
 
+    public static Game getGame() {
+        return game;
+    }
+
+    public static ActionProcessor getActionProcessor() {
+        return actionProcessor;
+    }
+
     public static void launchGui(Game game, String[] args)
     {
         Session.game = game;

+ 1 - 1
src/main/java/eu/oschl/gui/exceptions/InvalidActionId.java

@@ -5,7 +5,7 @@ package eu.oschl.gui.exceptions;
  *
  * @author Ondřej Schlaichert
  */
-public class InvalidActionId extends Exception {
+public class InvalidActionId extends RuntimeException {
     public InvalidActionId() {
         super();
     }

+ 0 - 2
src/main/java/module-info.java

@@ -1,8 +1,6 @@
 module eu.oschl.gui {
     requires javafx.controls;
     requires javafx.fxml;
-    requires eu.oschl.gui;
-
 
     opens eu.oschl.gui to javafx.fxml;
     exports eu.oschl.gui;

+ 6 - 6
src/main/resources/eu/oschl/gui/game.fxml

@@ -31,13 +31,13 @@
     </ScrollPane>
 
     <ScrollPane fitToWidth="true" GridPane.rowIndex="1">
-        <VBox spacing="5.0">
+        <VBox fx:id="inputButtonContainer" spacing="5.0">
 
-            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 1" onAction="#onTestButtonClick"/>
-            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 2" onAction="#onTestButtonClick"/>
-            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 3" onAction="#onTestButtonClick"/>
-            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 4" onAction="#onTestButtonClick"/>
-            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 5" onAction="#onTestButtonClick"/>
+<!--            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 1" onAction="#onTestButtonClick"/>-->
+<!--            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 2" onAction="#onTestButtonClick"/>-->
+<!--            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 3" onAction="#onTestButtonClick"/>-->
+<!--            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 4" onAction="#onTestButtonClick"/>-->
+<!--            <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" text="Button 5" onAction="#onTestButtonClick"/>-->
 
             <padding>
                 <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>