diff options
| author | xander <xander@isxander.dev> | 2022-09-01 11:58:49 +0100 |
|---|---|---|
| committer | xander <xander@isxander.dev> | 2022-09-01 11:58:49 +0100 |
| commit | 4d977cc9764ecf0073650f126700f6ff638fa06b (patch) | |
| tree | 883e68bbd80874c048b3e34db59bf0aa926b489b /src/main/java/dev/isxander/yacl/gui/controllers/EnumControl.java | |
| parent | e63a3c989e3a899bdc81558dd2e4c5cc2c659bde (diff) | |
| download | YetAnotherConfigLib-4d977cc9764ecf0073650f126700f6ff638fa06b.tar.gz YetAnotherConfigLib-4d977cc9764ecf0073650f126700f6ff638fa06b.tar.bz2 YetAnotherConfigLib-4d977cc9764ecf0073650f126700f6ff638fa06b.zip | |
javadoc!
added LongSliderController
renamed Control -> Controller
add minecraft simple option binding constructor
Diffstat (limited to 'src/main/java/dev/isxander/yacl/gui/controllers/EnumControl.java')
| -rw-r--r-- | src/main/java/dev/isxander/yacl/gui/controllers/EnumControl.java | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/EnumControl.java b/src/main/java/dev/isxander/yacl/gui/controllers/EnumControl.java deleted file mode 100644 index d032937..0000000 --- a/src/main/java/dev/isxander/yacl/gui/controllers/EnumControl.java +++ /dev/null @@ -1,77 +0,0 @@ -package dev.isxander.yacl.gui.controllers; - -import dev.isxander.yacl.api.Control; -import dev.isxander.yacl.api.NameableEnum; -import dev.isxander.yacl.api.Option; -import dev.isxander.yacl.api.utils.Dimension; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; - -import java.util.function.Function; - -public class EnumControl<T extends Enum<T>> implements Control<T> { - private final Option<T> option; - private final Function<T, Text> valueFormatter; - private final Class<T> enumClass; - - public EnumControl(Option<T> option, Class<T> enumClass) { - this(option, enumClass, value -> { - if (value instanceof NameableEnum nameableEnum) - return nameableEnum.getDisplayName(); - return Text.of(value.name()); - }); - } - - public EnumControl(Option<T> option, Class<T> enumClass, Function<T, Text> valueFormatter) { - this.option = option; - this.valueFormatter = valueFormatter; - this.enumClass = enumClass; - } - - @Override - public Option<T> option() { - return option; - } - - @Override - public Text formatValue() { - return valueFormatter.apply(option().pendingValue()); - } - - @Override - public ControlWidget<EnumControl<T>> provideWidget(Screen screen, Dimension<Integer> widgetDimension) { - return new EnumControlElement<>(this, screen, widgetDimension, enumClass.getEnumConstants()); - } - - public static class EnumControlElement<T extends Enum<T>> extends ControlWidget<EnumControl<T>> { - private final T[] values; - - public EnumControlElement(EnumControl<T> control, Screen screen, Dimension<Integer> dim, T[] values) { - super(control, screen, dim); - this.values = values; - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (!isMouseOver(mouseX, mouseY) || (button != 0 && button != 1)) - return false; - - playDownSound(); - - int change = button == 1 || Screen.hasShiftDown() ? -1 : 1; - int targetIdx = control.option().pendingValue().ordinal() + change; - if (targetIdx >= values.length) { - targetIdx -= values.length; - } else if (targetIdx < 0) { - targetIdx += values.length; - } - control.option().requestSet(values[targetIdx]); - return true; - } - - @Override - protected int getHoveredControlWidth() { - return getUnhoveredControlWidth(); - } - } -} |
