1
mirror of https://github.com/Shiewk/Widgets.git synced 2026-04-28 11:34:17 +02:00

Keystrokes widget

This commit is contained in:
Shy
2024-10-20 11:41:54 +02:00
parent 3f4f0a2afd
commit b7b66814a8
4 changed files with 199 additions and 2 deletions
@@ -56,5 +56,6 @@ public class WidgetsModClient implements ClientModInitializer {
WidgetManager.register(new CPSWidget(Identifier.of(WidgetsMod.MOD_ID, "cps"))); WidgetManager.register(new CPSWidget(Identifier.of(WidgetsMod.MOD_ID, "cps")));
WidgetManager.register(new PlayTimeWidget(Identifier.of(WidgetsMod.MOD_ID, "playtime"))); WidgetManager.register(new PlayTimeWidget(Identifier.of(WidgetsMod.MOD_ID, "playtime")));
WidgetManager.register(new MemoryUsageWidget(Identifier.of(WidgetsMod.MOD_ID, "memory"))); WidgetManager.register(new MemoryUsageWidget(Identifier.of(WidgetsMod.MOD_ID, "memory")));
WidgetManager.register(new KeyStrokesWidget(Identifier.of(WidgetsMod.MOD_ID, "keystrokes")));
} }
} }
@@ -0,0 +1,180 @@
package de.shiewk.widgets.widgets;
import de.shiewk.widgets.ModWidget;
import de.shiewk.widgets.WidgetSettings;
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
import de.shiewk.widgets.widgets.settings.RGBAColorWidgetSetting;
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper;
import java.awt.*;
import java.util.List;
import java.util.Objects;
public class KeyStrokesWidget extends ModWidget {
public KeyStrokesWidget(Identifier id) {
super(id, List.of(
new ToggleWidgetSetting("showjump", Text.translatable("widgets.widgets.keystrokes.showJumpKey"), true),
new IntSliderWidgetSetting("size", Text.translatable("widgets.widgets.common.sizePercent"), 25, 150, 400),
new RGBAColorWidgetSetting("bgpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundPressed"), 255, 255, 255, 80),
new RGBAColorWidgetSetting("bgunpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundUnpressed"), 0, 0, 0, 80),
new RGBAColorWidgetSetting("keypressed", Text.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 255, 255, 255, 255),
new RGBAColorWidgetSetting("keyunpressed", Text.translatable("widgets.widgets.keystrokes.colorKeyUnpressed"), 255, 255, 255, 255)
));
}
@Override
public void onSettingsChanged(WidgetSettings settings) {
showJumpKey = ((ToggleWidgetSetting) settings.optionById("showjump")).getValue();
colorBackgroundPressed = ((RGBAColorWidgetSetting) settings.optionById("bgpressed")).getColor();
colorBackgroundUnpressed = ((RGBAColorWidgetSetting) settings.optionById("bgunpressed")).getColor();
colorKeyPressed = ((RGBAColorWidgetSetting) settings.optionById("keypressed")).getColor();
colorKeyUnpressed = ((RGBAColorWidgetSetting) settings.optionById("keyunpressed")).getColor();
size = 0.01f * ((IntSliderWidgetSetting) settings.optionById("size")).getValue();
}
private boolean showJumpKey = true;
private int colorBackgroundPressed = new Color(255, 255, 255, 80).getRGB(),
colorBackgroundUnpressed = new Color(0, 0, 0, 80).getRGB(),
colorKeyUnpressed = 0xffffffff,
colorKeyPressed = 0xffffffff;
protected float size = 2;
protected static class Key {
protected final KeyBinding binding;
protected boolean isPressed;
protected long lastChanged;
private Key(KeyBinding binding) {
Objects.requireNonNull(binding);
this.binding = binding;
}
}
protected static class KeyLarge extends Key {
protected String boundToKey;
protected int boundToLength;
private KeyLarge(KeyBinding binding) {
super(binding);
}
}
private KeyLarge KEY_FWD, KEY_BWD, KEY_LEFT, KEY_RIGHT;
private Key KEY_JUMP;
@Override
public void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
if (KEY_JUMP == null) return;
MatrixStack matrices = context.getMatrices();
if (size != 1) {
matrices.push();
matrices.translate(-(size-1) * posX, -(size-1) * posY, 0);
matrices.scale(size, size, 1);
}
renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 22, posY, KEY_FWD);
renderKeyStroke(context, textRenderer, measuringTimeNano, posX, posY + 22, KEY_LEFT);
renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 22, posY + 22, KEY_BWD);
renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 44, posY + 22, KEY_RIGHT);
if (showJumpKey) renderSpaceBar(context, measuringTimeNano, posX, posY + 44, KEY_JUMP);
if (size != 1){
matrices.pop();
}
}
protected void renderSpaceBar(final DrawContext context,
final long measuringTimeNano,
final int posX,
final int posY,
final Key key){
long l = measuringTimeNano - key.lastChanged;
if (l < 100000000){
if (key.isPressed){
context.fill(posX, posY, posX + 64, posY + 10, fadeColor(colorBackgroundUnpressed, colorBackgroundPressed, 0.00000001d * l));
} else {
context.fill(posX, posY, posX + 64, posY + 10, fadeColor(colorBackgroundPressed, colorBackgroundUnpressed, 0.00000001d * l));
}
} else {
context.fill(posX, posY, posX + 64, posY + 10, key.isPressed ? colorBackgroundPressed : colorBackgroundUnpressed);
}
context.fill(posX + 5, posY + 4, posX + 59, posY + 5, key.isPressed ? colorKeyPressed : colorKeyUnpressed);
}
protected void renderKeyStroke(final DrawContext context,
final TextRenderer textRenderer,
final long measuringTimeNano,
final int posX,
final int posY,
final KeyLarge key){
long l = measuringTimeNano - key.lastChanged;
if (l < 100000000){
if (key.isPressed){
context.fill(posX, posY, posX+20, posY+20, fadeColor(colorBackgroundUnpressed, colorBackgroundPressed, 0.00000001d * l));
} else {
context.fill(posX, posY, posX+20, posY+20, fadeColor(colorBackgroundPressed, colorBackgroundUnpressed, 0.00000001d * l));
}
} else {
context.fill(posX, posY, posX+20, posY+20, key.isPressed ? colorBackgroundPressed : colorBackgroundUnpressed);
}
context.drawText(textRenderer, key.boundToKey, posX+10-(key.boundToLength/2), posY + 6, key.isPressed ? colorKeyPressed : colorKeyUnpressed, true);
}
private int fadeColor(int color1, int color2, double delta) {
int red = (int) MathHelper.lerp(delta, (color1 >> 16) & 0xff, (color2 >> 16) & 0xff);
int green = (int) MathHelper.lerp(delta, (color1 >> 8) & 0xff, (color2 >> 8) & 0xff);
int blue = (int) MathHelper.lerp(delta, color1 & 0xff, color2 & 0xff);
int alpha = (int) MathHelper.lerp(delta, color1 >> 24, color2 >> 24);
return ((red & 0xff) << 16) | ((green & 0xff) << 8) | (blue & 0xff) | (alpha << 24);
}
@Override
public void tick() {
if (KEY_FWD == null) KEY_FWD = new KeyLarge(MinecraftClient.getInstance().options.forwardKey);
if (KEY_BWD == null) KEY_BWD = new KeyLarge(MinecraftClient.getInstance().options.backKey);
if (KEY_LEFT == null) KEY_LEFT = new KeyLarge(MinecraftClient.getInstance().options.leftKey);
if (KEY_RIGHT == null) KEY_RIGHT = new KeyLarge(MinecraftClient.getInstance().options.rightKey);
if (KEY_JUMP == null) KEY_JUMP = new Key(MinecraftClient.getInstance().options.jumpKey);
TextRenderer renderer = MinecraftClient.getInstance().textRenderer;
for (Key key : new Key[]{KEY_FWD, KEY_BWD, KEY_LEFT, KEY_RIGHT, KEY_JUMP}){
if (key instanceof KeyLarge keyLarge){
keyLarge.boundToKey = key.binding.getBoundKeyLocalizedText().getString();
keyLarge.boundToLength = renderer.getWidth(keyLarge.boundToKey);
}
final boolean pressed = key.binding.isPressed();
if (pressed != key.isPressed){
key.isPressed = pressed;
key.lastChanged = Util.getMeasuringTimeNano();
}
}
}
@Override
public Text getName() {
return Text.translatable("widgets.widgets.keystrokes");
}
@Override
public Text getDescription() {
return Text.translatable("widgets.widgets.keystrokes.description");
}
@Override
public int width() {
return (int) (64 * size);
}
@Override
public int height() {
return (int) ((showJumpKey ? 56 : 44) * size);
}
}
@@ -72,5 +72,13 @@
"widgets.widgets.memory.withLabel": "Arbeitsspeicher: %s", "widgets.widgets.memory.withLabel": "Arbeitsspeicher: %s",
"widgets.widgets.memory.showPercentage": "Prozentsatz anzeigen", "widgets.widgets.memory.showPercentage": "Prozentsatz anzeigen",
"widgets.widgets.memory.showLabel": "Beschriftung anzeigen", "widgets.widgets.memory.showLabel": "Beschriftung anzeigen",
"widgets.widgets.serverIP.dynamicWidth": "Widget-Breite dynamisch festlegen" "widgets.widgets.serverIP.dynamicWidth": "Widget-Breite dynamisch festlegen",
"widgets.widgets.keystrokes.showJumpKey": "Sprungtaste anzeigen",
"widgets.widgets.common.sizePercent": "Widgetgröße (%)",
"widgets.widgets.keystrokes.colorBackgroundPressed": "Hintergrundfarbe (Taste gedrückt)",
"widgets.widgets.keystrokes.colorBackgroundUnpressed": "Hintergrundfarbe (Taste nicht gedrückt)",
"widgets.widgets.keystrokes.colorKeyPressed": "Farbe der Taste (gedrückt)",
"widgets.widgets.keystrokes.colorKeyUnpressed": "Farbe der Taste (nicht gedrückt)",
"widgets.widgets.keystrokes": "Keystrokes",
"widgets.widgets.keystrokes.description": "Zeigt an, welche Tasten du momentan drückst."
} }
@@ -72,5 +72,13 @@
"widgets.widgets.memory.withLabel": "Memory: %s", "widgets.widgets.memory.withLabel": "Memory: %s",
"widgets.widgets.memory.showPercentage": "Show percentage", "widgets.widgets.memory.showPercentage": "Show percentage",
"widgets.widgets.memory.showLabel": "Show label", "widgets.widgets.memory.showLabel": "Show label",
"widgets.widgets.serverIP.dynamicWidth": "Dynamically set widget width" "widgets.widgets.serverIP.dynamicWidth": "Dynamically set widget width",
"widgets.widgets.keystrokes.showJumpKey": "Show Jump Key",
"widgets.widgets.common.sizePercent": "Widget size (%)",
"widgets.widgets.keystrokes.colorBackgroundPressed": "Background color (key pressed)",
"widgets.widgets.keystrokes.colorBackgroundUnpressed": "Background color (key not pressed)",
"widgets.widgets.keystrokes.colorKeyPressed": "Key color (pressed)",
"widgets.widgets.keystrokes.colorKeyUnpressed": "Key color (not pressed)",
"widgets.widgets.keystrokes": "Keystrokes",
"widgets.widgets.keystrokes.description": "Shows which keys you are currently pressing."
} }