File size: 2,030 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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 p_369283_) {
        this.entity = p_369283_;
    }

    public void tick() {
        this.rotXOld = this.rotX;
        this.rotYOld = this.rotY;
        this.rotZOld = this.rotZ;
        float f;
        float f1;
        float f2;
        if (this.entity.isFallFlying()) {
            float f3 = 1.0F;
            Vec3 vec3 = this.entity.getDeltaMovement();
            if (vec3.y < 0.0) {
                Vec3 vec31 = vec3.normalize();
                f3 = 1.0F - (float)Math.pow(-vec31.y, 1.5);
            }

            f = Mth.lerp(f3, (float) (Math.PI / 12), (float) (Math.PI / 9));
            f1 = Mth.lerp(f3, (float) (-Math.PI / 12), (float) (-Math.PI / 2));
            f2 = 0.0F;
        } else if (this.entity.isCrouching()) {
            f = (float) (Math.PI * 2.0 / 9.0);
            f1 = (float) (-Math.PI / 4);
            f2 = 0.08726646F;
        } else {
            f = (float) (Math.PI / 12);
            f1 = (float) (-Math.PI / 12);
            f2 = 0.0F;
        }

        this.rotX = this.rotX + (f - this.rotX) * 0.3F;
        this.rotY = this.rotY + (f2 - this.rotY) * 0.3F;
        this.rotZ = this.rotZ + (f1 - this.rotZ) * 0.3F;
    }

    public float getRotX(float p_361516_) {
        return Mth.lerp(p_361516_, this.rotXOld, this.rotX);
    }

    public float getRotY(float p_362262_) {
        return Mth.lerp(p_362262_, this.rotYOld, this.rotY);
    }

    public float getRotZ(float p_368210_) {
        return Mth.lerp(p_368210_, this.rotZOld, this.rotZ);
    }
}