]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/gui/IntSettingSlider.java
Rewrite line renderer
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / gui / IntSettingSlider.java
1 package com.irtimaled.bbor.client.gui;
2
3 import com.google.common.base.Function;
4 import com.google.common.base.Preconditions;
5 import com.irtimaled.bbor.client.config.Setting;
6 import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
7 import net.minecraft.client.resource.language.I18n;
8 import net.minecraft.text.LiteralText;
9
10 import java.util.HashMap;
11 import java.util.Map;
12 import java.util.stream.IntStream;
13
14 class IntSettingSlider extends AbstractSlider {
15     private final String format;
16     private final Map<Integer, String> displayValues = new HashMap<>();
17
18     final Setting<Integer> setting;
19     final int minValue;
20
21     IntSettingSlider(int width, int minValue, int maxValue, String format, Setting<Integer> setting) {
22         super(width, maxValue - minValue);
23         this.setting = setting;
24         this.minValue = minValue;
25         this.format = format;
26         setInitialPosition();
27         this.updateText();
28     }
29
30     protected void setInitialPosition() {
31         this.setPosition(this.setting.get() - this.minValue);
32     }
33
34     IntSettingSlider addDisplayValue(int value, String displayValue) {
35         displayValues.put(value, displayValue);
36         if (setting.get() == value) {
37             this.updateText();
38         }
39         return this;
40     }
41
42     IntSettingSlider addDisplayValueRange(int start, int end) {
43         return addDisplayValueRange(start, end, String::valueOf);
44     }
45
46     IntSettingSlider addDisplayValueRange(int start, int end, Function<Integer, String> formatter) {
47         Preconditions.checkArgument(start <= end);
48         Preconditions.checkNotNull(formatter);
49         IntStream.range(start, end).forEach(value -> addDisplayValue(value, formatter.apply(value)));
50         return this;
51     }
52
53     protected Integer getSettingValue() {
54         return minValue + getPosition();
55     }
56
57     private void updateText() {
58         Integer value = setting.get();
59         this.setMessage(new LiteralText(I18n.translate(format, displayValues.getOrDefault(value, value.toString()))));
60     }
61
62     @Override
63     protected void onProgressChanged() {
64         this.setting.set(this.getSettingValue());
65         updateText();
66     }
67
68     @Override
69     public void appendNarrations(NarrationMessageBuilder narrationMessageBuilder) {
70         this.appendDefaultNarrations(narrationMessageBuilder);
71     }
72 }