mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 16:24:23 +01:00
Fixed: Dual weilding causes ponies to break the laws of physics
This commit is contained in:
parent
53b2d0f370
commit
3cc128ef2f
3 changed files with 36 additions and 20 deletions
|
@ -81,7 +81,10 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
||||||
|
|
||||||
rightLeg.rotationPointY = FRONT_LEG_RP_Y_NOTSNEAK;
|
rightLeg.rotationPointY = FRONT_LEG_RP_Y_NOTSNEAK;
|
||||||
leftLeg.rotationPointY = FRONT_LEG_RP_Y_NOTSNEAK;
|
leftLeg.rotationPointY = FRONT_LEG_RP_Y_NOTSNEAK;
|
||||||
|
|
||||||
|
if (!attributes.isSleeping) {
|
||||||
animateBreathing(ticks);
|
animateBreathing(ticks);
|
||||||
|
}
|
||||||
|
|
||||||
if (attributes.isSwimming) {
|
if (attributes.isSwimming) {
|
||||||
head.setRotationPoint(0, -2, -2);
|
head.setRotationPoint(0, -2, -2);
|
||||||
|
@ -388,16 +391,24 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
||||||
protected void alignArmForAction(Cuboid arm, ArmPose pose, ArmPose complement, boolean both, float swing, float reflect) {
|
protected void alignArmForAction(Cuboid arm, ArmPose pose, ArmPose complement, boolean both, float swing, float reflect) {
|
||||||
switch (pose) {
|
switch (pose) {
|
||||||
case ITEM:
|
case ITEM:
|
||||||
|
arm.yaw = 0;
|
||||||
|
|
||||||
|
if ((!both || reflect == (attributes.isLeftHanded ? 1 : -1)) && complement != ArmPose.BLOCK) {
|
||||||
float swag = 1;
|
float swag = 1;
|
||||||
if (!isFlying() && both) {
|
if (!isFlying() && both) {
|
||||||
swag -= (float)Math.pow(swing, 2);
|
swag -= (float)Math.pow(swing, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
float mult = 1 - swag/2;
|
float mult = 1 - swag/2;
|
||||||
arm.pitch = arm.pitch * mult - (PI / 10) * swag;
|
arm.pitch = arm.pitch * mult - (PI / 10) * swag;
|
||||||
arm.roll = -reflect * (PI / 15);
|
arm.roll = -reflect * (PI / 15);
|
||||||
|
|
||||||
if (attributes.isCrouching) {
|
if (attributes.isCrouching) {
|
||||||
arm.rotationPointX -= reflect * 2;
|
arm.rotationPointX -= reflect * 2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
case EMPTY:
|
case EMPTY:
|
||||||
arm.yaw = 0;
|
arm.yaw = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -482,19 +493,22 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
||||||
* Used in animations together with {@code swing} and {@code move}.
|
* Used in animations together with {@code swing} and {@code move}.
|
||||||
*/
|
*/
|
||||||
protected void animateBreathing(float ticks) {
|
protected void animateBreathing(float ticks) {
|
||||||
if (attributes.isSleeping) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
float cos = MathHelper.cos(ticks * 0.09F) * 0.05F + 0.05F;
|
float cos = MathHelper.cos(ticks * 0.09F) * 0.05F + 0.05F;
|
||||||
float sin = MathHelper.sin(ticks * 0.067F) * 0.05F;
|
float sin = MathHelper.sin(ticks * 0.067F) * 0.05F;
|
||||||
|
|
||||||
if (rightArmPose != ArmPose.EMPTY) {
|
boolean animateLeft =
|
||||||
|
(leftArmPose != ArmPose.EMPTY && (leftArmPose != rightArmPose || attributes.isLeftHanded))
|
||||||
|
&& rightArmPose != ArmPose.BLOCK;
|
||||||
|
boolean animateRight =
|
||||||
|
(rightArmPose != ArmPose.EMPTY && (leftArmPose != rightArmPose || !attributes.isLeftHanded))
|
||||||
|
&& leftArmPose != ArmPose.BLOCK;
|
||||||
|
|
||||||
|
if (animateRight) {
|
||||||
rightArm.roll += cos;
|
rightArm.roll += cos;
|
||||||
rightArm.pitch += sin;
|
rightArm.pitch += sin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (leftArmPose != ArmPose.EMPTY) {
|
if (animateLeft) {
|
||||||
leftArm.roll += cos;
|
leftArm.roll += cos;
|
||||||
leftArm.pitch += sin;
|
leftArm.pitch += sin;
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,10 +90,6 @@ public class ModelUnicorn<T extends LivingEntity> extends ModelEarthPony<T> impl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void animateBreathing(float ticks) {
|
protected void animateBreathing(float ticks) {
|
||||||
if (attributes.isSleeping) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canCast()) {
|
if (canCast()) {
|
||||||
float cos = MathHelper.cos(ticks * 0.09F) * 0.05F + 0.05F;
|
float cos = MathHelper.cos(ticks * 0.09F) * 0.05F + 0.05F;
|
||||||
float sin = MathHelper.sin(ticks * 0.067F) * 0.05F;
|
float sin = MathHelper.sin(ticks * 0.067F) * 0.05F;
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.minelittlepony.model;
|
||||||
import com.minelittlepony.pony.IPony;
|
import com.minelittlepony.pony.IPony;
|
||||||
import com.minelittlepony.util.math.MathUtil;
|
import com.minelittlepony.util.math.MathUtil;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
import net.minecraft.util.AbsoluteHand;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
@ -30,6 +31,10 @@ public class ModelAttributes<T extends LivingEntity> {
|
||||||
* True if the pony is crouching.
|
* True if the pony is crouching.
|
||||||
*/
|
*/
|
||||||
public boolean isCrouching;
|
public boolean isCrouching;
|
||||||
|
/**
|
||||||
|
* True if the entity is left-handed.
|
||||||
|
*/
|
||||||
|
public boolean isLeftHanded;
|
||||||
/**
|
/**
|
||||||
* True if the model is sitting as in boats.
|
* True if the model is sitting as in boats.
|
||||||
*/
|
*/
|
||||||
|
@ -94,5 +99,6 @@ public class ModelAttributes<T extends LivingEntity> {
|
||||||
hasHeadGear = pony.isWearingHeadgear(entity);
|
hasHeadGear = pony.isWearingHeadgear(entity);
|
||||||
isSitting = pony.isRidingInteractive(entity);
|
isSitting = pony.isRidingInteractive(entity);
|
||||||
interpolatorId = entity.getUuid();
|
interpolatorId = entity.getUuid();
|
||||||
|
isLeftHanded = entity.getMainHand() == AbsoluteHand.LEFT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue