discord-jadx/app/src/main/java/androidx/dynamicanimation/animation/SpringForce.java

158 lines
6.4 KiB
Java

package androidx.dynamicanimation.animation;
import androidx.annotation.FloatRange;
import androidx.annotation.RestrictTo;
import androidx.dynamicanimation.animation.DynamicAnimation;
public final class SpringForce implements Force {
public static final float DAMPING_RATIO_HIGH_BOUNCY = 0.2f;
public static final float DAMPING_RATIO_LOW_BOUNCY = 0.75f;
public static final float DAMPING_RATIO_MEDIUM_BOUNCY = 0.5f;
public static final float DAMPING_RATIO_NO_BOUNCY = 1.0f;
public static final float STIFFNESS_HIGH = 10000.0f;
public static final float STIFFNESS_LOW = 200.0f;
public static final float STIFFNESS_MEDIUM = 1500.0f;
public static final float STIFFNESS_VERY_LOW = 50.0f;
private static final double UNSET = Double.MAX_VALUE;
private static final double VELOCITY_THRESHOLD_MULTIPLIER = 62.5d;
private double mDampedFreq;
public double mDampingRatio = 0.5d;
private double mFinalPosition = Double.MAX_VALUE;
private double mGammaMinus;
private double mGammaPlus;
private boolean mInitialized = false;
private final DynamicAnimation.MassState mMassState = new DynamicAnimation.MassState();
public double mNaturalFreq = Math.sqrt(1500.0d);
private double mValueThreshold;
private double mVelocityThreshold;
public SpringForce() {
}
public SpringForce(float f) {
this.mFinalPosition = (double) f;
}
private void init() {
if (!this.mInitialized) {
if (this.mFinalPosition != Double.MAX_VALUE) {
double d = this.mDampingRatio;
if (d > 1.0d) {
double d2 = this.mNaturalFreq;
this.mGammaPlus = (Math.sqrt((d * d) - 1.0d) * d2) + ((-d) * d2);
double d3 = this.mDampingRatio;
double d4 = this.mNaturalFreq;
this.mGammaMinus = ((-d3) * d4) - (Math.sqrt((d3 * d3) - 1.0d) * d4);
} else if (d >= 0.0d && d < 1.0d) {
this.mDampedFreq = Math.sqrt(1.0d - (d * d)) * this.mNaturalFreq;
}
this.mInitialized = true;
return;
}
throw new IllegalStateException("Error: Final position of the spring must be set before the animation starts");
}
}
@Override // androidx.dynamicanimation.animation.Force
@RestrictTo({RestrictTo.Scope.LIBRARY})
public float getAcceleration(float f, float f2) {
float finalPosition = f - getFinalPosition();
double d = this.mNaturalFreq;
return (float) (((-(d * d)) * ((double) finalPosition)) - (((d * 2.0d) * this.mDampingRatio) * ((double) f2)));
}
public float getDampingRatio() {
return (float) this.mDampingRatio;
}
public float getFinalPosition() {
return (float) this.mFinalPosition;
}
public float getStiffness() {
double d = this.mNaturalFreq;
return (float) (d * d);
}
@Override // androidx.dynamicanimation.animation.Force
@RestrictTo({RestrictTo.Scope.LIBRARY})
public boolean isAtEquilibrium(float f, float f2) {
return ((double) Math.abs(f2)) < this.mVelocityThreshold && ((double) Math.abs(f - getFinalPosition())) < this.mValueThreshold;
}
public SpringForce setDampingRatio(@FloatRange(from = 0.0d) float f) {
if (f >= 0.0f) {
this.mDampingRatio = (double) f;
this.mInitialized = false;
return this;
}
throw new IllegalArgumentException("Damping ratio must be non-negative");
}
public SpringForce setFinalPosition(float f) {
this.mFinalPosition = (double) f;
return this;
}
public SpringForce setStiffness(@FloatRange(from = 0.0d, fromInclusive = false) float f) {
if (f > 0.0f) {
this.mNaturalFreq = Math.sqrt((double) f);
this.mInitialized = false;
return this;
}
throw new IllegalArgumentException("Spring stiffness constant must be positive.");
}
public void setValueThreshold(double d) {
double abs = Math.abs(d);
this.mValueThreshold = abs;
this.mVelocityThreshold = abs * 62.5d;
}
public DynamicAnimation.MassState updateValues(double d, double d2, long j) {
double d3;
double d4;
init();
double d5 = ((double) j) / 1000.0d;
double d6 = d - this.mFinalPosition;
double d7 = this.mDampingRatio;
if (d7 > 1.0d) {
double d8 = this.mGammaMinus;
double d9 = this.mGammaPlus;
double d10 = d6 - (((d8 * d6) - d2) / (d8 - d9));
double d11 = ((d6 * d8) - d2) / (d8 - d9);
d3 = (Math.pow(2.718281828459045d, this.mGammaPlus * d5) * d11) + (Math.pow(2.718281828459045d, d8 * d5) * d10);
double d12 = this.mGammaMinus;
double pow = Math.pow(2.718281828459045d, d12 * d5) * d10 * d12;
double d13 = this.mGammaPlus;
d4 = (Math.pow(2.718281828459045d, d13 * d5) * d11 * d13) + pow;
} else if (d7 == 1.0d) {
double d14 = this.mNaturalFreq;
double d15 = (d14 * d6) + d2;
double d16 = (d15 * d5) + d6;
double pow2 = Math.pow(2.718281828459045d, (-d14) * d5) * d16;
double pow3 = Math.pow(2.718281828459045d, (-this.mNaturalFreq) * d5) * d16;
double d17 = this.mNaturalFreq;
d4 = (Math.pow(2.718281828459045d, (-d17) * d5) * d15) + (pow3 * (-d17));
d3 = pow2;
} else {
double d18 = 1.0d / this.mDampedFreq;
double d19 = this.mNaturalFreq;
double d20 = ((d7 * d19 * d6) + d2) * d18;
double sin = ((Math.sin(this.mDampedFreq * d5) * d20) + (Math.cos(this.mDampedFreq * d5) * d6)) * Math.pow(2.718281828459045d, (-d7) * d19 * d5);
double d21 = this.mNaturalFreq;
double d22 = this.mDampingRatio;
double d23 = (-d21) * sin * d22;
double pow4 = Math.pow(2.718281828459045d, (-d22) * d21 * d5);
double d24 = this.mDampedFreq;
double d25 = (-d24) * d6;
double d26 = this.mDampedFreq;
d4 = (((Math.cos(d26 * d5) * d20 * d26) + (Math.sin(d24 * d5) * d25)) * pow4) + d23;
d3 = sin;
}
DynamicAnimation.MassState massState = this.mMassState;
massState.mValue = (float) (d3 + this.mFinalPosition);
massState.mVelocity = (float) d4;
return massState;
}
}