mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
145 lines
5.3 KiB
Java
145 lines
5.3 KiB
Java
package androidx.dynamicanimation.animation;
|
|
|
|
import android.os.Looper;
|
|
import android.util.AndroidRuntimeException;
|
|
import androidx.dynamicanimation.animation.DynamicAnimation;
|
|
import tech.rabbit.r1launcher.BuildConfig;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class SpringAnimation extends DynamicAnimation<SpringAnimation> {
|
|
private static final float UNSET = Float.MAX_VALUE;
|
|
private boolean mEndRequested;
|
|
private float mPendingPosition;
|
|
private SpringForce mSpring;
|
|
|
|
public SpringForce getSpring() {
|
|
return this.mSpring;
|
|
}
|
|
|
|
public SpringAnimation setSpring(SpringForce springForce) {
|
|
this.mSpring = springForce;
|
|
return this;
|
|
}
|
|
|
|
@Override // androidx.dynamicanimation.animation.DynamicAnimation
|
|
void setValueThreshold(float f) {
|
|
}
|
|
|
|
public SpringAnimation(FloatValueHolder floatValueHolder) {
|
|
super(floatValueHolder);
|
|
this.mSpring = null;
|
|
this.mPendingPosition = Float.MAX_VALUE;
|
|
this.mEndRequested = false;
|
|
}
|
|
|
|
public <K> SpringAnimation(K k, FloatPropertyCompat<K> floatPropertyCompat) {
|
|
super(k, floatPropertyCompat);
|
|
this.mSpring = null;
|
|
this.mPendingPosition = Float.MAX_VALUE;
|
|
this.mEndRequested = false;
|
|
}
|
|
|
|
public <K> SpringAnimation(K k, FloatPropertyCompat<K> floatPropertyCompat, float f) {
|
|
super(k, floatPropertyCompat);
|
|
this.mSpring = null;
|
|
this.mPendingPosition = Float.MAX_VALUE;
|
|
this.mEndRequested = false;
|
|
this.mSpring = new SpringForce(f);
|
|
}
|
|
|
|
@Override // androidx.dynamicanimation.animation.DynamicAnimation
|
|
public void start() {
|
|
sanityCheck();
|
|
this.mSpring.setValueThreshold(getValueThreshold());
|
|
super.start();
|
|
}
|
|
|
|
public void animateToFinalPosition(float f) {
|
|
if (isRunning()) {
|
|
this.mPendingPosition = f;
|
|
return;
|
|
}
|
|
if (this.mSpring == null) {
|
|
this.mSpring = new SpringForce(f);
|
|
}
|
|
this.mSpring.setFinalPosition(f);
|
|
start();
|
|
}
|
|
|
|
public void skipToEnd() {
|
|
if (!canSkipToEnd()) {
|
|
throw new UnsupportedOperationException("Spring animations can only come to an end when there is damping");
|
|
}
|
|
if (Looper.myLooper() != Looper.getMainLooper()) {
|
|
throw new AndroidRuntimeException("Animations may only be started on the main thread");
|
|
}
|
|
if (this.mRunning) {
|
|
this.mEndRequested = true;
|
|
}
|
|
}
|
|
|
|
public boolean canSkipToEnd() {
|
|
return this.mSpring.mDampingRatio > BuildConfig.SENTRY_SAMPLE_RATE;
|
|
}
|
|
|
|
private void sanityCheck() {
|
|
SpringForce springForce = this.mSpring;
|
|
if (springForce == null) {
|
|
throw new UnsupportedOperationException("Incomplete SpringAnimation: Either final position or a spring force needs to be set.");
|
|
}
|
|
double finalPosition = springForce.getFinalPosition();
|
|
if (finalPosition > this.mMaxValue) {
|
|
throw new UnsupportedOperationException("Final position of the spring cannot be greater than the max value.");
|
|
}
|
|
if (finalPosition < this.mMinValue) {
|
|
throw new UnsupportedOperationException("Final position of the spring cannot be less than the min value.");
|
|
}
|
|
}
|
|
|
|
@Override // androidx.dynamicanimation.animation.DynamicAnimation
|
|
boolean updateValueAndVelocity(long j) {
|
|
if (this.mEndRequested) {
|
|
float f = this.mPendingPosition;
|
|
if (f != Float.MAX_VALUE) {
|
|
this.mSpring.setFinalPosition(f);
|
|
this.mPendingPosition = Float.MAX_VALUE;
|
|
}
|
|
this.mValue = this.mSpring.getFinalPosition();
|
|
this.mVelocity = 0.0f;
|
|
this.mEndRequested = false;
|
|
return true;
|
|
}
|
|
if (this.mPendingPosition != Float.MAX_VALUE) {
|
|
this.mSpring.getFinalPosition();
|
|
long j2 = j / 2;
|
|
DynamicAnimation.MassState updateValues = this.mSpring.updateValues(this.mValue, this.mVelocity, j2);
|
|
this.mSpring.setFinalPosition(this.mPendingPosition);
|
|
this.mPendingPosition = Float.MAX_VALUE;
|
|
DynamicAnimation.MassState updateValues2 = this.mSpring.updateValues(updateValues.mValue, updateValues.mVelocity, j2);
|
|
this.mValue = updateValues2.mValue;
|
|
this.mVelocity = updateValues2.mVelocity;
|
|
} else {
|
|
DynamicAnimation.MassState updateValues3 = this.mSpring.updateValues(this.mValue, this.mVelocity, j);
|
|
this.mValue = updateValues3.mValue;
|
|
this.mVelocity = updateValues3.mVelocity;
|
|
}
|
|
this.mValue = Math.max(this.mValue, this.mMinValue);
|
|
this.mValue = Math.min(this.mValue, this.mMaxValue);
|
|
if (!isAtEquilibrium(this.mValue, this.mVelocity)) {
|
|
return false;
|
|
}
|
|
this.mValue = this.mSpring.getFinalPosition();
|
|
this.mVelocity = 0.0f;
|
|
return true;
|
|
}
|
|
|
|
@Override // androidx.dynamicanimation.animation.DynamicAnimation
|
|
float getAcceleration(float f, float f2) {
|
|
return this.mSpring.getAcceleration(f, f2);
|
|
}
|
|
|
|
@Override // androidx.dynamicanimation.animation.DynamicAnimation
|
|
boolean isAtEquilibrium(float f, float f2) {
|
|
return this.mSpring.isAtEquilibrium(f, f2);
|
|
}
|
|
}
|