package cofh.lib.gui.element;
import static cofh.lib.gui.element.ElementButtonManaged.*;
import cofh.lib.gui.GuiBase;
import cofh.lib.gui.GuiColor;
import org.lwjgl.opengl.GL11;
public abstract class ElementSlider extends ElementBase {
protected int _value;
protected int _valueMin;
protected int _valueMax;
protected int _sliderWidth;
protected int _sliderHeight;
protected boolean _isDragging;
public int borderColor = new GuiColor(120, 120, 120, 255).getColor();
public int backgroundColor = new GuiColor(0, 0, 0, 255).getColor();
protected ElementSlider(GuiBase containerScreen, int x, int y, int width, int height, int maxValue) {
this(containerScreen, x, y, width, height, maxValue, 0);
}
protected ElementSlider(GuiBase containerScreen, int x, int y, int width, int height, int maxValue, int minValue) {
super(containerScreen, x, y, width, height);
_valueMax = maxValue;
_valueMin = minValue;
}
public ElementSlider setColor(int backgroundColor, int borderColor) {
this.borderColor = borderColor;
this.backgroundColor = backgroundColor;
return this;
}
public ElementSlider setSliderSize(int width, int height) {
_sliderWidth = width;
_sliderHeight = height;
return this;
}
public ElementSlider setValue(int value) {
value = Math.max(_valueMin, Math.min(_valueMax, value));
if (value != _value) {
_value = value;
onValueChanged(_value);
}
return this;
}
@Override
public void drawBackground(int mouseX, int mouseY, float gameTicks) {
drawModalRect(posX - 1, posY - 1, posX + sizeX + 1, posY + sizeY + 1, borderColor);
drawModalRect(posX, posY, posX + sizeX, posY + sizeY, backgroundColor);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
protected void drawSlider(int mouseX, int mouseY, int sliderX, int sliderY) {
int sliderWidth = _sliderWidth;
int sliderHeight = _sliderHeight;
if (!isEnabled()) {
gui.bindTexture(DISABLED);
} else if (isHovering(mouseX, mouseY)) {
gui.bindTexture(HOVER);
} else {
gui.bindTexture(ENABLED);
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
drawTexturedModalRect(sliderX, sliderY, 0, 0, sliderWidth / 2, sliderHeight / 2);
drawTexturedModalRect(sliderX, sliderY + sliderHeight / 2, 0, 256 - sliderHeight / 2, sliderWidth / 2, sliderHeight / 2);
drawTexturedModalRect(sliderX + sliderWidth / 2, sliderY, 256 - sliderWidth / 2, 0, sliderWidth / 2, sliderHeight / 2);
drawTexturedModalRect(sliderX + sliderWidth / 2, sliderY + sliderHeight / 2, 256 - sliderWidth / 2, 256 - sliderHeight / 2, sliderWidth / 2,
sliderHeight / 2);
}
@Override
public void drawForeground(int mouseX, int mouseY) {
int sliderX = posX + getSliderX();
int sliderY = posY + getSliderY();
drawSlider(mouseX, mouseY, sliderX, sliderY);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
protected boolean isHovering(int x, int y) {
return intersectsWith(x, y);
}
public int getSliderX() {
return 0;
}
public int getSliderY() {
return 0;
}
@Override
public boolean onMousePressed(int mouseX, int mouseY, int mouseButton) {
_isDragging = mouseButton == 0;
update(mouseX, mouseY);
return true;
}
@Override
public void onMouseReleased(int mouseX, int mouseY) {
if (_isDragging)
onStopDragging();
_isDragging = false;
}
@Override
public void update(int mouseX, int mouseY) {
if (_isDragging) {
dragSlider(mouseX - posX, mouseY - posY);
}
}
protected abstract void dragSlider(int x, int y);
@Override
public boolean onMouseWheel(int mouseX, int mouseY, int movement) {
if (movement > 0) {
setValue(_value - 1);
} else if (movement < 0) {
setValue(_value + 1);
}
return true;
}
public void onValueChanged(int value) {
return;
}
public void onStopDragging() {
return;
}
}