package kornell.gui.client.util.easing;
public class Transitions {
public static Transition BOUNCE = new Transition() {
public double transition(double p) {
double value;
for (double a = 0, b = 1; true; a += b, b /= 2){
if (p >= (7 - 4 * a) / 11){
value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
break;
}
}
return value;
}
};
public static Transition ELASTIC = new Transition() {
public double transition(double p) {
return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * 1/3);
}
};
public static Transition BACK = new Transition() {
public double transition(double p) {
return Math.pow(p, 2) * ((1.618 + 1) * p - 1.618);
}
};
public static Transition SINE = new Transition() {
public double transition(double p) {
return 1 - Math.sin((1 - p) * Math.PI / 2);
}
};
public static Transition CIRC = new Transition() {
public double transition(double p) {
return 1 - Math.sin(Math.acos(p));
}
};
public static Transition EXPO = new Transition() {
public double transition(double p) {
return Math.pow(2, 8 * (p - 1));
}
};
public static Transition QUAD = expo(2);
public static Transition CUBIC = expo(3);
public static Transition QUART = expo(4);
public static Transition QUINT = expo(5);
public static Transition SIXT = expo(6);
public static Transition expo(final int power) {
return new Transition() {
public double transition(double p) {
return Math.pow(p, power);
}
};
}
}