package gminers.glasspane.component.progress;
import gminers.kitchensink.Hues;
import lombok.Getter;
import lombok.Setter;
/**
* Implements a progress bar that sets it's filled color through a (smoothly animated) hue value rather than exact RGB.
*
* @author Aesen Vismea
*
*/
public class PaneProgressHueBar
extends PaneProgressBar {
@Getter @Setter protected float targetHue = 100;
protected float lagHue = 100;
protected int counter = 0;
@Getter @Setter protected int brightnessModifier = 64;
@Getter @Setter protected int hueChangeSpeed = 12;
public PaneProgressHueBar() {
doTick();
lagHue = targetHue;
}
@Override
protected void doTick() {
counter++;
if (lagHue > targetHue) {
lagHue -= Math.min(hueChangeSpeed, lagHue - targetHue);
} else if (lagHue < targetHue) {
lagHue += Math.min(hueChangeSpeed, targetHue - lagHue);
}
int brighterCol = Hues.hueToRGB((int) lagHue);
int r = brighterCol >> 16 & 0xFF;
int g = brighterCol >> 8 & 0xFF;
int b = brighterCol & 0xFF;
r += brightnessModifier;
g += brightnessModifier;
b += brightnessModifier;
r = Math.min(r, 255);
g = Math.min(g, 255);
b = Math.min(b, 255);
brighterCol = r << 16 | g << 8 | b;
filledColor = brighterCol;
super.doTick();
}
}