diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-16 01:23:01 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-16 01:23:01 -0400 |
commit | d8b8d88e97cfd732ea0e81847762e93412377dd9 (patch) | |
tree | 018b4a1c8636b7d49af2e69d8b943680de21831d /src/main/java/net/sowgro/npehero/gui | |
parent | 2d42d77c883453e4f03ca0a47068f9d1f6c61aa6 (diff) | |
download | NPEhero-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.java | 117 | ||||
-rwxr-xr-x | src/main/java/net/sowgro/npehero/gui/Settings.java | 32 |
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); } } + |