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/ControlEditor.java | |
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/ControlEditor.java')
-rw-r--r-- | src/main/java/net/sowgro/npehero/gui/ControlEditor.java | 117 |
1 files changed, 117 insertions, 0 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(); + } + } +} |