aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/sowgro/npehero/gui
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-07-16 01:23:01 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-07-16 01:23:01 -0400
commitd8b8d88e97cfd732ea0e81847762e93412377dd9 (patch)
tree018b4a1c8636b7d49af2e69d8b943680de21831d /src/main/java/net/sowgro/npehero/gui
parent2d42d77c883453e4f03ca0a47068f9d1f6c61aa6 (diff)
downloadNPEhero-d8b8d88e97cfd732ea0e81847762e93412377dd9.tar.gz
NPEhero-d8b8d88e97cfd732ea0e81847762e93412377dd9.tar.bz2
NPEhero-d8b8d88e97cfd732ea0e81847762e93412377dd9.zip
Add customizable keybindings
Diffstat (limited to 'src/main/java/net/sowgro/npehero/gui')
-rw-r--r--src/main/java/net/sowgro/npehero/gui/ControlEditor.java117
-rwxr-xr-xsrc/main/java/net/sowgro/npehero/gui/Settings.java32
2 files changed, 129 insertions, 20 deletions
diff --git a/src/main/java/net/sowgro/npehero/gui/ControlEditor.java b/src/main/java/net/sowgro/npehero/gui/ControlEditor.java
new file mode 100644
index 0000000..637a9d8
--- /dev/null
+++ b/src/main/java/net/sowgro/npehero/gui/ControlEditor.java
@@ -0,0 +1,117 @@
+package net.sowgro.npehero.gui;
+
+import javafx.beans.property.ReadOnlyObjectWrapper;
+import javafx.beans.property.ReadOnlyStringWrapper;
+import javafx.event.EventHandler;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.control.*;
+import javafx.scene.input.KeyCode;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Pane;
+import javafx.scene.layout.VBox;
+import net.sowgro.npehero.Driver;
+import net.sowgro.npehero.main.Control;
+import net.sowgro.npehero.main.SoundController;
+import org.w3c.dom.events.Event;
+
+public class ControlEditor extends Pane {
+ public ControlEditor() {
+
+ GridPane controls = new GridPane();
+ ScrollPane scrollPane = new ScrollPane(controls);
+ scrollPane.getStyleClass().remove("scroll-pane");
+ scrollPane.getStyleClass().add("box");
+ scrollPane.setPadding(new Insets(10));
+ controls.setPadding(new Insets(10));
+ controls.setHgap(40);
+ controls.setVgap(20);
+
+
+ scrollPane.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.35));
+ scrollPane.setMinWidth(400);
+ scrollPane.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75));
+
+ Button exit = new Button();
+ exit.setText("Back");
+ exit.setOnAction(e -> {
+ SoundController.playSfx(SoundController.BACKWARD);
+ Driver.setMenu(new Settings());
+ });
+
+ VBox centerBox = new VBox();
+ centerBox.setAlignment(Pos.CENTER);
+ centerBox.setSpacing(10);
+ centerBox.getChildren().addAll(scrollPane,exit);
+ centerBox.setMinWidth(400);
+
+ HBox rootBox = new HBox();
+ rootBox.prefWidthProperty().bind(super.prefWidthProperty());
+ rootBox.prefHeightProperty().bind(super.prefHeightProperty());
+ rootBox.getChildren().add(centerBox);
+ rootBox.setAlignment(Pos.CENTER);
+
+ ToggleGroup tg = new ToggleGroup();
+ for (int i = 0; i < Control.values().length; i++) {
+ Control control = Control.values()[i];
+
+
+ // label
+ Label label = new Label(control.label);
+ controls.add(label, 0, i);
+
+ // control button
+ ToggleButton controlButton = new ToggleButton("<err>");
+ controlButton.setText(keyToString(control.keyProperty.get()));
+ control.keyProperty.addListener(_ -> {
+ System.out.println(control.label + " set to " + control.keyProperty.get());
+ System.out.println(controlButton.getText());
+ controlButton.setText(keyToString(control.keyProperty.get()));
+ net.sowgro.npehero.main.Control.writeToFile();
+ });
+ controlButton.setOnMouseClicked(_ -> {
+ EventHandler<KeyEvent> keyListener = new EventHandler<>() {
+ @Override
+ public void handle(KeyEvent k) {
+ control.keyProperty.set(k.getCode());
+ rootBox.removeEventFilter(KeyEvent.KEY_PRESSED, this);
+ controlButton.setSelected(false);
+ k.consume();
+ }
+ };
+ if (controlButton.isSelected()) {
+ System.out.println("Event registered");
+ rootBox.addEventFilter(KeyEvent.KEY_PRESSED, keyListener);
+ }
+ else {
+ System.out.println("Event un-registered");
+ rootBox.removeEventFilter(KeyEvent.KEY_PRESSED, keyListener);
+ }
+ });
+ tg.getToggles().add(controlButton);
+ controls.add(controlButton, 1, i);
+
+ // label button
+ Button resetButton = new Button("Reset");
+ resetButton.setOnMouseClicked(_ -> {
+ control.keyProperty.set(control.defaultKey);
+ });
+ controls.add(resetButton, 2, i);
+
+ }
+
+ super.getChildren().add(rootBox);
+ }
+
+ public String keyToString(KeyCode key) {
+ if (key == null) {
+ return "<unset>";
+ }
+ else {
+ return key.toString();
+ }
+ }
+}
diff --git a/src/main/java/net/sowgro/npehero/gui/Settings.java b/src/main/java/net/sowgro/npehero/gui/Settings.java
index 8d345a0..cc6815c 100755
--- a/src/main/java/net/sowgro/npehero/gui/Settings.java
+++ b/src/main/java/net/sowgro/npehero/gui/Settings.java
@@ -4,7 +4,6 @@ import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Slider;
-import javafx.scene.control.ToggleButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
@@ -70,26 +69,20 @@ public class Settings extends Pane
fullBox.setPadding(new Insets(10));
- Text devLabel = new Text("Advanced");
- devLabel.getStyleClass().add("t3");
+ Text controlsLabel = new Text("Key Bindings");
+ controlsLabel.getStyleClass().add("t3");
- Button devMenu = new Button();
- devMenu.setText("Debug Menu");
- devMenu.setOnAction(e -> {
+ Button controlsButton = new Button();
+ controlsButton.setText("Edit");
+ controlsButton.setOnAction(_ -> {
SoundController.playSfx(SoundController.FORWARD);
-// Driver.debug.show();
+ Driver.setMenu(new ControlEditor());
});
- VBox devBox = new VBox();
- devBox.getStyleClass().add("box");
- devBox.getChildren().addAll(devLabel,devMenu);
- devBox.setVisible(false);
- devBox.setManaged(false);
- devBox.setPadding(new Insets(10));
-
- ToggleButton advanced = new ToggleButton("Advanced");
- advanced.selectedProperty().bindBidirectional(devBox.managedProperty());
- advanced.selectedProperty().bindBidirectional(devBox.visibleProperty());
+ VBox controlsBox = new VBox();
+ controlsBox.getStyleClass().add("box");
+ controlsBox.getChildren().addAll(controlsLabel, controlsButton);
+ controlsBox.setPadding(new Insets(10));
Button exit = new Button();
exit.setText("Back");
@@ -101,13 +94,11 @@ public class Settings extends Pane
BorderPane buttonBox = new BorderPane();
buttonBox.setLeft(exit);
- buttonBox.setRight(advanced);
-
VBox options = new VBox();
options.setSpacing(10);
options.setAlignment(Pos.CENTER);
- options.getChildren().addAll(musicBox,SFXBox,fullBox,devBox,buttonBox);
+ options.getChildren().addAll(musicBox,SFXBox,fullBox,controlsBox,buttonBox);
options.maxWidthProperty().bind(super.prefWidthProperty().multiply(0.25));
options.setMinWidth(400);
options.prefHeightProperty().bind(super.prefHeightProperty());
@@ -120,3 +111,4 @@ public class Settings extends Pane
super.getChildren().add(rootBox);
}
}
+