package org.darkstorm.minecraft.gui.component.basic; import org.darkstorm.minecraft.gui.component.*; public class BasicProgressBar extends AbstractComponent implements ProgressBar { private double value, minimum, maximum, increment; private ValueDisplay display; private boolean indeterminate; public BasicProgressBar() { this(0); } public BasicProgressBar(double value) { this(value, 0, 100); } public BasicProgressBar(double value, double minimum, double maximum) { this(value, minimum, maximum, 1); } public BasicProgressBar(double value, double minimum, double maximum, int increment) { this(value, minimum, maximum, increment, ValueDisplay.NONE); } public BasicProgressBar(double value, double minimum, double maximum, double increment, ValueDisplay display) { this.minimum = Math.max(0, Math.min(minimum, maximum)); this.maximum = Math.max(0, Math.max(minimum, maximum)); value = Math.max(minimum, Math.min(maximum, value)); this.value = value - (Math.round((value % increment) / increment) * increment); this.increment = Math.min(maximum, Math.max(0.0005, increment)); this.display = display != null ? display : ValueDisplay.NONE; } @Override public double getValue() { return value; } @Override public double getMinimumValue() { return minimum; } @Override public double getMaximumValue() { return maximum; } public double getIncrement() { return increment; } @Override public ValueDisplay getValueDisplay() { return display; } @Override public boolean isIndeterminate() { return indeterminate; } @Override public void setValue(double value) { value = Math.max(minimum, Math.min(maximum, value)); this.value = value - (Math.round((value % increment) / increment) * increment); } @Override public void setMinimumValue(double minimum) { this.minimum = Math.max(0, Math.min(maximum, minimum)); setValue(value); } @Override public void setMaximumValue(double maximum) { this.maximum = Math.max(maximum, minimum); setValue(value); } public void setIncrement(double increment) { this.increment = Math.min(maximum, Math.max(0.0005, increment)); setValue(value); } public void setValueDisplay(ValueDisplay display) { this.display = display != null ? display : ValueDisplay.NONE; } @Override public void setIndeterminate(boolean indeterminate) { this.indeterminate = indeterminate; } }