minecraft-src/net/minecraft/world/entity/ElytraAnimationState.java
2025-07-04 02:49:36 +03:00

65 lines
1.7 KiB
Java

package net.minecraft.world.entity;
import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec3;
public class ElytraAnimationState {
private static final float DEFAULT_X_ROT = (float) (Math.PI / 12);
private static final float DEFAULT_Z_ROT = (float) (-Math.PI / 12);
private float rotX;
private float rotY;
private float rotZ;
private float rotXOld;
private float rotYOld;
private float rotZOld;
private final LivingEntity entity;
public ElytraAnimationState(LivingEntity entity) {
this.entity = entity;
}
public void tick() {
this.rotXOld = this.rotX;
this.rotYOld = this.rotY;
this.rotZOld = this.rotZ;
float g;
float h;
float i;
if (this.entity.isFallFlying()) {
float f = 1.0F;
Vec3 vec3 = this.entity.getDeltaMovement();
if (vec3.y < 0.0) {
Vec3 vec32 = vec3.normalize();
f = 1.0F - (float)Math.pow(-vec32.y, 1.5);
}
g = Mth.lerp(f, (float) (Math.PI / 12), (float) (Math.PI / 9));
h = Mth.lerp(f, (float) (-Math.PI / 12), (float) (-Math.PI / 2));
i = 0.0F;
} else if (this.entity.isCrouching()) {
g = (float) (Math.PI * 2.0 / 9.0);
h = (float) (-Math.PI / 4);
i = 0.08726646F;
} else {
g = (float) (Math.PI / 12);
h = (float) (-Math.PI / 12);
i = 0.0F;
}
this.rotX = this.rotX + (g - this.rotX) * 0.3F;
this.rotY = this.rotY + (i - this.rotY) * 0.3F;
this.rotZ = this.rotZ + (h - this.rotZ) * 0.3F;
}
public float getRotX(float partialTick) {
return Mth.lerp(partialTick, this.rotXOld, this.rotX);
}
public float getRotY(float partialTick) {
return Mth.lerp(partialTick, this.rotYOld, this.rotY);
}
public float getRotZ(float partialTick) {
return Mth.lerp(partialTick, this.rotZOld, this.rotZ);
}
}