]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/gui/AbstractSlider.java
d16d3ca9fea6d13464491d9b666aea51649d653e
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / gui / AbstractSlider.java
1 package com.irtimaled.bbor.client.gui;
2
3 import net.minecraft.util.math.MathHelper;
4 import org.lwjgl.opengl.GL11;
5
6 abstract class AbstractSlider extends AbstractControl {
7     double progress;
8     private boolean isDragging;
9
10     AbstractSlider(int x, int y, int width) {
11         super(x, y, width, "");
12     }
13
14     @Override
15     protected void renderBackground(int mouseX, int mouseY) {
16         this.minecraft.getTextureManager().bindTexture(WIDGETS_LOCATION);
17         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
18         if(isDragging) {
19             changeProgress(mouseX);
20         }
21
22         int hoverState = super.getYImage(this.isHovered);
23         this.blit(this.x + (int) (this.progress * (double) (this.width - 8)), this.y, 0, 46 + hoverState * 20, 4, this.height);
24         this.blit(this.x + (int) (this.progress * (double) (this.width - 8)) + 4, this.y, 196, 46 + hoverState * 20, 4, 20);
25     }
26
27     boolean setProgress(double progress) {
28         progress = MathHelper.clamp(progress, 0d, 1d);
29         if (this.progress == progress) return false;
30
31         this.progress = progress;
32         return true;
33     }
34
35     private void changeProgress(double mouseX) {
36         double progress = (mouseX - (double) (this.x + 4)) / (double) (this.width - 8);
37         if (setProgress(progress)) {
38             onProgressChanged();
39         }
40         updateText();
41     }
42
43     @Override
44     protected int getYImage(boolean hovered) {
45         return 0;
46     }
47
48     @Override
49     protected void onDrag(double mouseX, double mouseY, double deltaX, double deltaY) {
50         changeProgress(mouseX);
51     }
52
53     @Override
54     public void onClick(double mouseX, double mouseY) {
55         changeProgress(mouseX);
56         isDragging = true;
57     }
58
59     @Override
60     public void onRelease(double mouseX, double mouseY) {
61         this.isDragging = false;
62     }
63
64     protected abstract void updateText();
65
66     protected abstract void onProgressChanged();
67 }