/**
*
*/
package net.puppygames.applet.effects;
/**
* Adjust to a new value
*/
public abstract class AdjusterEffect extends Effect {
private final int rate;
private int current;
private int target;
private boolean finished;
public AdjusterEffect(int rate, int initial, int target) {
this.rate = rate;
this.current = initial;
this.target = target;
}
public void setTarget(int target) {
this.target = target;
}
public int getTarget() {
return target;
}
public void setCurrent(int current) {
this.current = current;
}
public int getCurrent() {
return current;
}
@Override
protected void render() {
// Doesn't do anything normally
}
@Override
protected final void doTick() {
if (current < target) {
current = Math.min(current + rate, target);
} else if (current > target) {
current = Math.max(current - rate, target);
}
onTicked();
}
protected abstract void onTicked();
@Override
public void finish() {
current = target;
remove();
}
@Override
protected void doRemove() {
finished = true;
}
@Override
public boolean isEffectActive() {
return !finished;
}
}