diff --git a/src/main/java/org/saturnclient/modules/mods/ArmorDisplay.java b/src/main/java/org/saturnclient/modules/mods/ArmorDisplay.java index 1102323..4d3ed0d 100644 --- a/src/main/java/org/saturnclient/modules/mods/ArmorDisplay.java +++ b/src/main/java/org/saturnclient/modules/mods/ArmorDisplay.java @@ -1,5 +1,6 @@ package org.saturnclient.modules.mods; +import org.lwjgl.glfw.GLFW; import org.saturnclient.modules.HudMod; import org.saturnclient.modules.ModDimensions; import org.saturnclient.modules.Module; @@ -14,6 +15,7 @@ import net.minecraft.item.Items; public class ArmorDisplay extends Module implements HudMod { private static Property enabled = Property.bool(true); + private static Property test = Property.keybinding(GLFW.GLFW_KEY_Y); private static ModDimensions dimensions = new ModDimensions(40, 60); public ArmorDisplay() { @@ -22,9 +24,17 @@ public class ArmorDisplay extends Module implements HudMod { .version("v0.1.0") .tags("Utility"), enabled.named("Enabled"), + test.named("Test key"), dimensions.prop()); } + @Override + public void tick() { + if (test.isKeyPressed()) { + + } + } + public void renderArmor(RenderScope scope, ItemStack helmet, ItemStack chestplate, ItemStack leggings, ItemStack boots) { int row = 0; diff --git a/src/main/java/org/saturnclient/saturnclient/config/Property.java b/src/main/java/org/saturnclient/saturnclient/config/Property.java index a91d304..6eafe53 100644 --- a/src/main/java/org/saturnclient/saturnclient/config/Property.java +++ b/src/main/java/org/saturnclient/saturnclient/config/Property.java @@ -2,6 +2,9 @@ package org.saturnclient.saturnclient.config; import java.util.Map; +import org.lwjgl.glfw.GLFW; +import org.saturnclient.saturnclient.SaturnClient; + import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; @@ -15,6 +18,7 @@ public class Property { HEX, NAMESPACE, SELECT, + KEYBINDING, } public T value; @@ -79,6 +83,10 @@ public class Property { return new Property<>(value, PropertyType.HEX); } + public static Property keybinding(int value) { + return new Property<>(value, PropertyType.KEYBINDING); + } + public void next() { if ((Integer) value < availableValues.length-1) setValue((Integer)value+1); else setValue(0); @@ -186,4 +194,8 @@ public class Property { public NamedProperty named(String name) { return new NamedProperty<>(name, this); } + + public boolean isKeyPressed() { + return GLFW.glfwGetKey(SaturnClient.client.getWindow().getHandle(), (Integer) (Object) value) == GLFW.GLFW_PRESS; + } } diff --git a/src/main/java/org/saturnclient/ui2/components/inputs/KeybindingSelector.java b/src/main/java/org/saturnclient/ui2/components/inputs/KeybindingSelector.java new file mode 100644 index 0000000..dae1518 --- /dev/null +++ b/src/main/java/org/saturnclient/ui2/components/inputs/KeybindingSelector.java @@ -0,0 +1,36 @@ +package org.saturnclient.ui2.components.inputs; + +import org.lwjgl.glfw.GLFW; +import org.saturnclient.saturnclient.config.Property; +import org.saturnclient.saturnclient.config.ThemeManager; +import org.saturnclient.ui2.Element; +import org.saturnclient.ui2.ElementContext; +import org.saturnclient.ui2.RenderScope; +import org.saturnclient.ui2.resources.Fonts; + +public class KeybindingSelector extends Element { + private static ThemeManager theme = new ThemeManager("Input"); + private static Property font = theme.property("font", Property.font(1)); + Property prop; + + public KeybindingSelector(Property prop) { + this.prop = prop; + this.width = 120; + this.height = Fonts.getHeight(); + } + + @Override + public void render(RenderScope renderScope, ElementContext ctx) { + int textColor = focused ? 0xFFFFFF : 0xAAAAAA; + int scanCode = GLFW.glfwGetKeyScancode(prop.value); + + renderScope.drawRoundedRectangle(0, 0, width, height, 10, 0xFF000000); + renderScope.drawText(0.6f, GLFW.glfwGetKeyName(prop.value, scanCode).toUpperCase(), 4, 4, font.value, textColor); + } + + @Override + public void keyPressed(int keyCode, int scanCode, int modifiers) { + prop.value = keyCode; + focused = false; + } +} diff --git a/src/main/java/org/saturnclient/ui2/screens/ConfigEditor.java b/src/main/java/org/saturnclient/ui2/screens/ConfigEditor.java index af5aae5..59990a4 100644 --- a/src/main/java/org/saturnclient/ui2/screens/ConfigEditor.java +++ b/src/main/java/org/saturnclient/ui2/screens/ConfigEditor.java @@ -9,6 +9,7 @@ import org.saturnclient.ui2.components.Sidebar; import org.saturnclient.ui2.components.inputs.FloatInput; import org.saturnclient.ui2.components.inputs.HexInput; import org.saturnclient.ui2.components.inputs.IntInput; +import org.saturnclient.ui2.components.inputs.KeybindingSelector; import org.saturnclient.ui2.components.inputs.Select; import org.saturnclient.ui2.components.inputs.Toggle; import org.saturnclient.ui2.elements.Scroll; @@ -97,6 +98,10 @@ public class ConfigEditor extends SaturnScreen { configScroll.draw(new Select((Property) prop).position(w / 2, modY)); break; + case KEYBINDING: + configScroll.draw(new KeybindingSelector((Property) prop).position(w / 2, modY)); + break; + case STRING: }