80 lines
1.1 KiB
Java
80 lines
1.1 KiB
Java
package speiger.src.coreengine.math.value;
|
|
|
|
public abstract class Value implements IValue
|
|
{
|
|
final float start;
|
|
final float duration;
|
|
byte flags = 0;
|
|
int done = 0;
|
|
|
|
float progress = 0F;
|
|
float value;
|
|
|
|
public Value(float duration)
|
|
{
|
|
this(0F, duration);
|
|
}
|
|
|
|
public Value(float start, float duration)
|
|
{
|
|
this.duration = duration;
|
|
this.start = start;
|
|
}
|
|
|
|
@Override
|
|
public float update(float particleTime)
|
|
{
|
|
if((flags & 2) != 0)
|
|
{
|
|
return value;
|
|
}
|
|
progress += particleTime;
|
|
if(progress < start)
|
|
{
|
|
if((flags & 1) == 0)
|
|
{
|
|
value = calculateProgress(0F);
|
|
onInitialValueSet();
|
|
}
|
|
return value;
|
|
}
|
|
value = calculateProgress((progress - start) / duration);
|
|
if(progress >= start + duration)
|
|
{
|
|
onFinished();
|
|
}
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public float get()
|
|
{
|
|
return value;
|
|
}
|
|
|
|
@Override
|
|
public boolean isDone()
|
|
{
|
|
return done > 0;
|
|
}
|
|
|
|
protected abstract float calculateProgress(float time);
|
|
|
|
protected void onFinished()
|
|
{
|
|
progress = start;
|
|
done++;
|
|
}
|
|
|
|
protected void onInitialValueSet()
|
|
{
|
|
flags |= 1;
|
|
}
|
|
|
|
protected void finishProgress()
|
|
{
|
|
flags |= 2;
|
|
done++;
|
|
}
|
|
}
|