allow changing AnimatedValue properties without losing current progress
This also means changing easing function will not modify the progress
This commit is contained in:
parent
6850b59b84
commit
a9d8e10ff5
|
@ -58,6 +58,21 @@ public class AnimatedValue {
|
||||||
this.eqn = eqn;
|
this.eqn = eqn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void change(int duration, float min, float max, AnimationEquation eqn) {
|
||||||
|
float progress = (float) this.time / this.duration;
|
||||||
|
if (this.eqn != eqn) {
|
||||||
|
if (this.time != 0 && this.time != this.duration) {
|
||||||
|
progress = this.eqn.uncalc(progress);
|
||||||
|
}
|
||||||
|
this.eqn = eqn;
|
||||||
|
}
|
||||||
|
this.duration = duration;
|
||||||
|
this.time = (int) (this.duration * progress);
|
||||||
|
this.base = min;
|
||||||
|
this.diff = max - min;
|
||||||
|
this.updateValue();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the from and to values
|
* Change the from and to values
|
||||||
* @param min start value
|
* @param min start value
|
||||||
|
|
|
@ -312,4 +312,19 @@ public enum AnimationEquation {
|
||||||
* @return the new {@code t} value [0,1]
|
* @return the new {@code t} value [0,1]
|
||||||
*/
|
*/
|
||||||
public abstract float calc(float t);
|
public abstract float calc(float t);
|
||||||
|
|
||||||
|
public float uncalc(float x) {
|
||||||
|
float min = 0f;
|
||||||
|
float max = 1f;
|
||||||
|
// 7 iterations is already decent, do we need 8?
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
float pos = (min + max) / 2f;
|
||||||
|
if (this.calc(pos) > x) {
|
||||||
|
max = pos;
|
||||||
|
} else {
|
||||||
|
min = pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (min + max) / 2f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user