diff --git a/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java b/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java index d76e016..ed0e983 100644 --- a/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java +++ b/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java @@ -100,12 +100,9 @@ protected void init() { var maxsize = 256.; var imagePathField = new TextFieldWidget(client.textRenderer, columns[0], rows[4], twoColumnSizePadding, rowSizePadding, Text.empty()); - var sizeSlider = new SliderWidget(columns[0], rows[1], twoColumnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.size"), 0, maxsize, this.targetConfig.y, 1); - var xPosSlider = new SliderWidget(columns[0], rows[2], columnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.x"), 0., 1., this.targetConfig.x, 1 / 64f); - var yPosSlider = new SliderWidget(columns[1], rows[2], columnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.y"), 0., 1., this.targetConfig.y, 1 / 64f); - - - sizeSlider.setValueOwn(this.targetConfig.size / maxsize); + var sizeSlider = new SliderWidget(columns[0], rows[1], twoColumnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.size"), this.targetConfig.size,0, maxsize, 256); + var xPosSlider = new SliderWidget(columns[0], rows[2], columnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.x"), this.targetConfig.x,0., 1., 64); + var yPosSlider = new SliderWidget(columns[1], rows[2], columnSizePadding, rowSizePadding, Text.translatable("customcursor.edit.y"), this.targetConfig.y,0., 1., 64); xPosSlider.setChangedListener(d -> this.targetConfig.x = (float) (double) d); yPosSlider.setChangedListener(d -> this.targetConfig.y = (float) (double) d); diff --git a/src/main/java/io/github/jumperonjava/customcursor/util/SliderWidget.java b/src/main/java/io/github/jumperonjava/customcursor/util/SliderWidget.java index d7a4dac..6eb9c57 100644 --- a/src/main/java/io/github/jumperonjava/customcursor/util/SliderWidget.java +++ b/src/main/java/io/github/jumperonjava/customcursor/util/SliderWidget.java @@ -9,7 +9,7 @@ * Slider widget for general use. */ public class SliderWidget extends net.minecraft.client.gui.widget.SliderWidget { - private final float round; + private final int steps; private Consumer changedListener; private Text text; public double min, max; @@ -23,66 +23,37 @@ public class SliderWidget extends net.minecraft.client.gui.widget.SliderWidget { * @param text * @param minValue * @param maxValue - * @param value - * @param round rounding of value. - * For example when round==5 then value range from 0 to 256 - * values would only be numbers that are divisible by five (0,5,15,230,255). - * This rule is not applied to value contructor parameter + * @param initialValue + * @param steps */ - public SliderWidget(int x, int y, int width, int height, Text text, double minValue, double maxValue, double value, float round) { - super(x, y, width, height, text, value); + public SliderWidget(int x, int y, int width, int height, Text text, double initialValue, double minValue, double maxValue, int steps) { + super(x, y, width, height, text, MathHelper.map(initialValue,minValue,maxValue,0,1)); this.min=minValue; this.max=maxValue; this.text=text; - this.round=round; - setValueOwn(scaleValueTo01(value)); - setMessage(text); - } - public SliderWidget(int x, int y, int width, int height, Text text, double maxValue, double value, int round){ - this(x, y, width, height, text,0,maxValue, value,round); - } - - @Override - protected void updateMessage() { - } - public void setText(Text text){ - this.text=text; + this.steps=steps; updateMessage(); } - public Text getText(){ - return text; - } @Override - public Text getMessage() { - var val = round(scaleValueFrom01(value)); - var isInt = round == (int) round; - var s = isInt ? String.valueOf((int) val) : String.valueOf(val); - return this.text.copy().append(Text.literal(" "+s)); - } - public double round(double value){ - return ((float)Math.round(value/round))*round; + protected void updateMessage() { + var mappedValue = getMappedValue(); + var stringValue = mappedValue == (int)mappedValue + ? String.valueOf((int)mappedValue) + : String.valueOf(mappedValue); + this.setMessage(this.text.copy().append(" ").append(stringValue)); + } + private double getMappedValue(){ + var value = this.value; + value = Math.floor(value*steps)/steps; + value = MathHelper.lerp(value, this.min, this.max); + return value; } @Override protected void applyValue() { if(changedListener==null) return; - changedListener.accept(round(scaleValueFrom01(value))); - } - private double scaleValueFrom01(double value){ - return value*(max-min)+min; - } - private double scaleValueTo01(double value){ - return (value-min)/(max-min); - } - public void setValueOwn(double value) { - double d = this.value; - this.value = MathHelper.clamp(value, 0.0, 1.0); - if (d != this.value) { - this.applyValue(); - } - - this.updateMessage(); + changedListener.accept(getMappedValue()); } public void setChangedListener(Consumer changedListener) {