SimpleJavaEngine/src/main/java/speiger/src/coreengine/math/value/CubicValue.java

60 lines
1.5 KiB
Java

package speiger.src.coreengine.math.value;
import speiger.src.coreengine.math.MathUtils;
public class CubicValue extends Value
{
final float startValue;
final float startHelperValue;
final float endHelperValue;
final float endValue;
boolean smooth = false;
public CubicValue(float duration, float startValue, float startHelper, float endHelper, float endValue)
{
this(0F, duration, startValue, startHelper, endHelper, endValue);
}
public CubicValue(float start, float duration, float startValue, float startHelper, float endHelper, float endValue)
{
super(start, duration);
this.startValue = startValue;
startHelperValue = startHelper;
endHelperValue = endHelper;
this.endValue = endValue;
}
public CubicValue setSmooth()
{
smooth = true;
return this;
}
public CubicValue setSmooth(boolean smooth)
{
this.smooth = smooth;
return this;
}
@Override
protected float calculateProgress(float time)
{
if(smooth)
{
float first = MathUtils.smoothQuadraticCurve(startValue, startHelperValue, endHelperValue, time);
float second = MathUtils.smoothQuadraticCurve(startHelperValue, endHelperValue, endValue, time);
return MathUtils.smoothLerp(first, second, time);
}
float first = MathUtils.quadraticCurve(startValue, startHelperValue, endHelperValue, time);
float second = MathUtils.quadraticCurve(startHelperValue, endHelperValue, endValue, time);
return MathUtils.lerp(first, second, time);
}
@Override
protected void onFinished()
{
finishProgress();
}
}