AnimationUtils.java

net.minecraft.client.model.AnimationUtils

信息

  • 全限定名:net.minecraft.client.model.AnimationUtils
  • 类型:public class
  • 包:net.minecraft.client.model
  • 源码路径:src/main/java/net/minecraft/client/model/AnimationUtils.java
  • 起始行号:L13
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public static void animateCrossbowHold(ModelPart rightArm, ModelPart leftArm, ModelPart head, boolean holdingInRightArm) @ L14

  • 方法名:animateCrossbowHold
  • 源码定位:L14
  • 返回类型:void
  • 修饰符:public static

参数:

  • rightArm: ModelPart
  • leftArm: ModelPart
  • head: ModelPart
  • holdingInRightArm: boolean

说明:

TODO

public static void animateCrossbowCharge(ModelPart rightArm, ModelPart leftArm, float maxCrossbowChargeDuration, float ticksUsingItem, boolean holdingInRightArm) @ L23

  • 方法名:animateCrossbowCharge
  • 源码定位:L23
  • 返回类型:void
  • 修饰符:public static

参数:

  • rightArm: ModelPart
  • leftArm: ModelPart
  • maxCrossbowChargeDuration: float
  • ticksUsingItem: float
  • holdingInRightArm: boolean

说明:

TODO

public static void swingWeaponDown(ModelPart rightArm, ModelPart leftArm, HumanoidArm mainArm, float attackTime, float ageInTicks) @ L37

  • 方法名:swingWeaponDown
  • 源码定位:L37
  • 返回类型:void
  • 修饰符:public static

参数:

  • rightArm: ModelPart
  • leftArm: ModelPart
  • mainArm: HumanoidArm
  • attackTime: float
  • ageInTicks: float

说明:

TODO

public static void bobModelPart(ModelPart modelPart, float ageInTicks, float scale) @ L59

  • 方法名:bobModelPart
  • 源码定位:L59
  • 返回类型:void
  • 修饰符:public static

参数:

  • modelPart: ModelPart
  • ageInTicks: float
  • scale: float

说明:

TODO

public static void bobArms(ModelPart rightArm, ModelPart leftArm, float ageInTicks) @ L64

  • 方法名:bobArms
  • 源码定位:L64
  • 返回类型:void
  • 修饰符:public static

参数:

  • rightArm: ModelPart
  • leftArm: ModelPart
  • ageInTicks: float

说明:

TODO

public static <T extends UndeadRenderState> void animateZombieArms(ModelPart leftArm, ModelPart rightArm, boolean aggressive, T state) @ L69

  • 方法名:animateZombieArms
  • 源码定位:L69
  • 返回类型: void
  • 修饰符:public static

参数:

  • leftArm: ModelPart
  • rightArm: ModelPart
  • aggressive: boolean
  • state: T

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class AnimationUtils {
    public static void animateCrossbowHold(ModelPart rightArm, ModelPart leftArm, ModelPart head, boolean holdingInRightArm) {
        ModelPart holdingArm = holdingInRightArm ? rightArm : leftArm;
        ModelPart shootingArm = holdingInRightArm ? leftArm : rightArm;
        holdingArm.yRot = (holdingInRightArm ? -0.3F : 0.3F) + head.yRot;
        shootingArm.yRot = (holdingInRightArm ? 0.6F : -0.6F) + head.yRot;
        holdingArm.xRot = (float) (-Math.PI / 2) + head.xRot + 0.1F;
        shootingArm.xRot = -1.5F + head.xRot;
    }
 
    public static void animateCrossbowCharge(
        ModelPart rightArm, ModelPart leftArm, float maxCrossbowChargeDuration, float ticksUsingItem, boolean holdingInRightArm
    ) {
        ModelPart holdingArm = holdingInRightArm ? rightArm : leftArm;
        ModelPart pullingArm = holdingInRightArm ? leftArm : rightArm;
        holdingArm.yRot = holdingInRightArm ? -0.8F : 0.8F;
        holdingArm.xRot = -0.97079635F;
        pullingArm.xRot = holdingArm.xRot;
        float useTicks = Mth.clamp(ticksUsingItem, 0.0F, maxCrossbowChargeDuration);
        float lerpAlpha = useTicks / maxCrossbowChargeDuration;
        pullingArm.yRot = Mth.lerp(lerpAlpha, 0.4F, 0.85F) * (holdingInRightArm ? 1 : -1);
        pullingArm.xRot = Mth.lerp(lerpAlpha, pullingArm.xRot, (float) (-Math.PI / 2));
    }
 
    public static void swingWeaponDown(ModelPart rightArm, ModelPart leftArm, HumanoidArm mainArm, float attackTime, float ageInTicks) {
        float attack2 = Mth.sin(attackTime * (float) Math.PI);
        float attack = Mth.sin((1.0F - (1.0F - attackTime) * (1.0F - attackTime)) * (float) Math.PI);
        rightArm.zRot = 0.0F;
        leftArm.zRot = 0.0F;
        rightArm.yRot = (float) (Math.PI / 20);
        leftArm.yRot = (float) (-Math.PI / 20);
        if (mainArm == HumanoidArm.RIGHT) {
            rightArm.xRot = -1.8849558F + Mth.cos(ageInTicks * 0.09F) * 0.15F;
            leftArm.xRot = -0.0F + Mth.cos(ageInTicks * 0.19F) * 0.5F;
            rightArm.xRot += attack2 * 2.2F - attack * 0.4F;
            leftArm.xRot += attack2 * 1.2F - attack * 0.4F;
        } else {
            rightArm.xRot = -0.0F + Mth.cos(ageInTicks * 0.19F) * 0.5F;
            leftArm.xRot = -1.8849558F + Mth.cos(ageInTicks * 0.09F) * 0.15F;
            rightArm.xRot += attack2 * 1.2F - attack * 0.4F;
            leftArm.xRot += attack2 * 2.2F - attack * 0.4F;
        }
 
        bobArms(rightArm, leftArm, ageInTicks);
    }
 
    public static void bobModelPart(ModelPart modelPart, float ageInTicks, float scale) {
        modelPart.zRot = modelPart.zRot + scale * (Mth.cos(ageInTicks * 0.09F) * 0.05F + 0.05F);
        modelPart.xRot = modelPart.xRot + scale * (Mth.sin(ageInTicks * 0.067F) * 0.05F);
    }
 
    public static void bobArms(ModelPart rightArm, ModelPart leftArm, float ageInTicks) {
        bobModelPart(rightArm, ageInTicks, 1.0F);
        bobModelPart(leftArm, ageInTicks, -1.0F);
    }
 
    public static <T extends UndeadRenderState> void animateZombieArms(ModelPart leftArm, ModelPart rightArm, boolean aggressive, T state) {
        if (!state.isBaby || state.getMainHandItemStack() == ItemStack.EMPTY) {
            boolean animateAttack = state.swingAnimationType != SwingAnimationType.STAB;
            if (animateAttack) {
                float attackTime = state.attackTime;
                float armDrop = (float) -Math.PI / (aggressive ? 1.5F : 2.25F);
                float attackYRotModifier = Mth.sin(attackTime * (float) Math.PI);
                float attackXRotModifier = Mth.sin((1.0F - (1.0F - attackTime) * (1.0F - attackTime)) * (float) Math.PI);
                rightArm.zRot = 0.0F;
                rightArm.yRot = -(0.1F - attackYRotModifier * 0.6F);
                rightArm.xRot = armDrop;
                rightArm.xRot += attackYRotModifier * 1.2F - attackXRotModifier * 0.4F;
                leftArm.zRot = 0.0F;
                leftArm.yRot = 0.1F - attackYRotModifier * 0.6F;
                leftArm.xRot = armDrop;
                leftArm.xRot += attackYRotModifier * 1.2F - attackXRotModifier * 0.4F;
            }
 
            bobArms(rightArm, leftArm, state.ageInTicks);
        }
    }
}

引用的其他类