mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-21 20:18:01 +01:00
Fix transformations when flying, swimming, sleeping, and using the elytra. Also fix player rotations in the inventory.
This commit is contained in:
parent
c65b543978
commit
efab9094e4
18 changed files with 117 additions and 193 deletions
|
@ -8,7 +8,6 @@ import com.minelittlepony.util.MathUtil;
|
|||
import java.util.*;
|
||||
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.Arm;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
@ -32,10 +31,6 @@ public class ModelAttributes {
|
|||
* from regular flying in that there are actual "wings" involved.
|
||||
*/
|
||||
public boolean isGliding;
|
||||
/**
|
||||
* True if the model is rotated 90degs (players)
|
||||
*/
|
||||
public boolean isHorizontal;
|
||||
/**
|
||||
* True if the model is using riptide (players)
|
||||
*/
|
||||
|
@ -123,6 +118,7 @@ public class ModelAttributes {
|
|||
isGoingFast = (isFlying && hasWings) || isGliding;
|
||||
isGoingFast &= zMotion > 0.4F;
|
||||
isGoingFast |= entity.isUsingRiptide();
|
||||
isGoingFast |= entity.isFallFlying();
|
||||
|
||||
motionLerp = MathUtil.clampLimit(zMotion * 30, 1);
|
||||
|
||||
|
@ -143,13 +139,12 @@ public class ModelAttributes {
|
|||
visualHeight = entity.getHeight() + 0.125F;
|
||||
isSitting = PonyPosture.isSitting(entity);
|
||||
isCrouching = !isSitting && mode == Mode.THIRD_PERSON && PonyPosture.isCrouching(pony, entity);
|
||||
isSleeping = entity.isSleeping();
|
||||
isSleeping = entity.isAlive() && entity.isSleeping();
|
||||
isFlying = mode == Mode.THIRD_PERSON && PonyPosture.isFlying(entity);
|
||||
isGliding = entity.isFallFlying();
|
||||
isSwimming = mode == Mode.THIRD_PERSON && PonyPosture.isSwimming(entity);
|
||||
isSwimmingRotated = isSwimming && (entity instanceof PlayerEntity || entity instanceof Swimmer);
|
||||
isSwimmingRotated = isSwimming;
|
||||
isRiptide = entity.isUsingRiptide();
|
||||
isHorizontal = isSwimming;
|
||||
isRidingInteractive = PonyPosture.isRidingAPony(entity);
|
||||
interpolatorId = entity.getUuid();
|
||||
isLeftHanded = entity.getMainArm() == Arm.LEFT;
|
||||
|
@ -161,10 +156,4 @@ public class ModelAttributes {
|
|||
THIRD_PERSON,
|
||||
OTHER
|
||||
}
|
||||
|
||||
/**
|
||||
* Special interface to mark entities that rotate horizontally when they swim.
|
||||
*/
|
||||
public interface Swimmer {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package com.minelittlepony.client.hdskins;
|
|||
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
|
||||
import com.minelittlepony.api.model.ModelAttributes;
|
||||
import com.minelittlepony.api.pony.IPony;
|
||||
import com.minelittlepony.api.pony.IPonyManager;
|
||||
import com.minelittlepony.client.IPreviewModel;
|
||||
|
@ -14,7 +13,7 @@ import java.util.UUID;
|
|||
/**
|
||||
* Dummy model used for the skin uploading screen.
|
||||
*/
|
||||
class DummyPony extends DummyPlayer implements IPreviewModel, ModelAttributes.Swimmer, IPonyManager.ForcedPony, EquineRenderManager.RegistrationHandler {
|
||||
class DummyPony extends DummyPlayer implements IPreviewModel, IPonyManager.ForcedPony, EquineRenderManager.RegistrationHandler {
|
||||
|
||||
public DummyPony(ClientWorld world, PlayerSkins<?> textures) {
|
||||
super(world, textures);
|
||||
|
|
|
@ -147,8 +147,6 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
|||
}
|
||||
|
||||
if (attributes.isSwimmingRotated) {
|
||||
head.setPivot(0, HEAD_RP_Y_SWIM, HEAD_RP_Z_SWIM);
|
||||
|
||||
rightLeg.pivotZ -= 1.5F;
|
||||
leftLeg.pivotZ -= 1.5F;
|
||||
}
|
||||
|
@ -270,15 +268,11 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
|||
headYaw = attributes.isSleeping ? (Math.abs(attributes.interpolatorId.getMostSignificantBits()) % 2.8F) - 1.9F : headYaw / 57.29578F;
|
||||
headPitch = attributes.isSleeping ? 0.1f : headPitch / 57.29578F;
|
||||
|
||||
if (attributes.isSwimming && attributes.motionPitch != 0) {
|
||||
headPitch -= 0.9F;
|
||||
}
|
||||
|
||||
float pitch = (float)Math.toRadians(attributes.motionPitch);
|
||||
head.setAngles(
|
||||
MathHelper.clamp(headPitch, -1.25f - pitch, 0.5f - pitch),
|
||||
attributes.isSwimmingRotated ? 0 : headYaw,
|
||||
attributes.isSwimmingRotated ? -headYaw : 0
|
||||
headYaw,
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -601,10 +595,6 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
|||
stack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(180));
|
||||
}
|
||||
|
||||
if (part == BodyPart.HEAD) {
|
||||
stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(attributes.motionPitch));
|
||||
}
|
||||
|
||||
PonyTransformation.forSize(getSize()).transform(this, part, stack);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,6 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
|||
|
||||
import java.util.Objects;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.Frustum;
|
||||
|
@ -31,7 +29,7 @@ import net.minecraft.util.Identifier;
|
|||
|
||||
public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T> & IPonyModel<T>> {
|
||||
|
||||
public ModelWrapper<T, M> playerModel;
|
||||
private ModelWrapper<T, M> playerModel;
|
||||
|
||||
private IPony pony;
|
||||
|
||||
|
@ -107,34 +105,14 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void applyPostureTransform(T player, MatrixStack stack, float yaw, float ticks) {
|
||||
((PonyPosture<T>) getPosture(player)).apply(player, getModel(), stack, yaw, ticks, 1);
|
||||
((PonyPosture<T>) PonyPosture.getPosture(getModel().getAttributes(), player)).apply(player, getModel(), stack, yaw, ticks, 1);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void applyPostureRiding(T player, MatrixStack stack, float yaw, float ticks) {
|
||||
((PonyPosture<T>) getPosture(player)).apply(player, getModel(), stack, yaw, ticks, -1);
|
||||
((PonyPosture<T>) PonyPosture.getPosture(getModel().getAttributes(), player)).apply(player, getModel(), stack, yaw, ticks, -1);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private PonyPosture<?> getPosture(T entity) {
|
||||
if (entity.isFallFlying()) {
|
||||
return PonyPosture.ELYTRA;
|
||||
}
|
||||
|
||||
if (entity.isAlive() && entity.isSleeping()) {
|
||||
return PonyPosture.STANDING;
|
||||
}
|
||||
|
||||
if (getModel().getAttributes().isHorizontal) {
|
||||
return PonyPosture.SWIMMING;
|
||||
}
|
||||
|
||||
if (getModel().getAttributes().isGoingFast && !getModel().getAttributes().isRiptide) {
|
||||
return PonyPosture.FLYING;
|
||||
}
|
||||
|
||||
return PonyPosture.FALLING;
|
||||
}
|
||||
|
||||
public M getModel() {
|
||||
return playerModel.body();
|
||||
|
@ -159,7 +137,7 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
|
|||
playerModel.applyMetadata(pony.metadata());
|
||||
}
|
||||
|
||||
public void updateModel(T entity, ModelAttributes.Mode mode) {
|
||||
public IPony updateModel(T entity, ModelAttributes.Mode mode) {
|
||||
pony = renderer.getEntityPony(entity);
|
||||
playerModel.applyMetadata(pony.metadata());
|
||||
|
||||
|
@ -176,11 +154,12 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
|
|||
}
|
||||
|
||||
getModel().updateLivingState(entity, pony, mode);
|
||||
|
||||
return pony;
|
||||
}
|
||||
|
||||
public IPony getPony(T entity) {
|
||||
updateModel(entity, ModelAttributes.Mode.THIRD_PERSON);
|
||||
return pony;
|
||||
return updateModel(entity, ModelAttributes.Mode.THIRD_PERSON);
|
||||
}
|
||||
|
||||
public Identifier getTexture(T entity) {
|
||||
|
|
|
@ -4,8 +4,7 @@ import com.minelittlepony.api.model.BodyPart;
|
|||
import com.minelittlepony.api.model.PonyModelConstants;
|
||||
import com.minelittlepony.api.model.gear.IGear;
|
||||
import com.minelittlepony.api.pony.IPony;
|
||||
import com.minelittlepony.client.model.IPonyModel;
|
||||
import com.minelittlepony.client.model.ModelWrapper;
|
||||
import com.minelittlepony.client.model.*;
|
||||
import com.minelittlepony.util.MathUtil;
|
||||
|
||||
import net.minecraft.client.render.entity.model.EntityModel;
|
||||
|
@ -14,11 +13,6 @@ import net.minecraft.entity.LivingEntity;
|
|||
|
||||
public interface IPonyRenderContext<T extends LivingEntity, M extends EntityModel<T> & IPonyModel<T>> extends PonyModelConstants, IGear.Context<T, M> {
|
||||
|
||||
/**
|
||||
* Gets the wrapped pony model for this renderer.
|
||||
*/
|
||||
ModelWrapper<T, M> getModelWrapper();
|
||||
|
||||
IPony getEntityPony(T entity);
|
||||
|
||||
EquineRenderManager<T, M> getInternalRenderer();
|
||||
|
@ -30,8 +24,8 @@ public interface IPonyRenderContext<T extends LivingEntity, M extends EntityMode
|
|||
if (!passengerPony.race().isHuman()) {
|
||||
float yaw = MathUtil.interpolateDegress((float)entity.prevY, (float)entity.getY(), ticks);
|
||||
|
||||
getModelWrapper().applyMetadata(entityPony.metadata());
|
||||
M model = getModelWrapper().body();
|
||||
getInternalRenderer().getModelWrapper().applyMetadata(entityPony.metadata());
|
||||
M model = getInternalRenderer().getModelWrapper().body();
|
||||
|
||||
model.transform(BodyPart.BACK, stack);
|
||||
|
||||
|
|
|
@ -107,11 +107,6 @@ public abstract class AbstractPonyRenderer<T extends MobEntity, M extends Entity
|
|||
stack.scale(scale, scale, scale);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelWrapper<T, M> getModelWrapper() {
|
||||
return manager.playerModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderLabelIfPresent(T entity, Text name, MatrixStack stack, VertexConsumerProvider renderContext, int maxDistance) {
|
||||
stack.push();
|
||||
|
|
|
@ -171,11 +171,6 @@ public class PlayerPonyRenderer extends PlayerEntityRenderer implements IPonyRen
|
|||
return manager.getTexture(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelWrapper<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> getModelWrapper() {
|
||||
return manager.playerModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EquineRenderManager<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>> getInternalRenderer() {
|
||||
return manager;
|
||||
|
|
|
@ -23,7 +23,7 @@ public class PlayerSeaponyRenderer extends PlayerPonyRenderer {
|
|||
super(context, slim, key);
|
||||
|
||||
normalPony = ModelType.getPlayerModel(Race.UNICORN).<AbstractClientPlayerEntity, ClientPonyModel<AbstractClientPlayerEntity>>create(slim);
|
||||
seapony = getModelWrapper();
|
||||
seapony = getInternalRenderer().getModelWrapper();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -43,7 +43,7 @@ public abstract class AbstractPonyFeature<T extends LivingEntity, M extends Enti
|
|||
return (C)context;
|
||||
}
|
||||
|
||||
public ModelWrapper<T, M> getModelWrapper() {
|
||||
return getContext().getModelWrapper();
|
||||
protected ModelWrapper<T, M> getModelWrapper() {
|
||||
return context.getInternalRenderer().getModelWrapper();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ public class ArmourFeature<T extends LivingEntity, M extends EntityModel<T> & IP
|
|||
|
||||
@Override
|
||||
public void render(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, T entity, float limbDistance, float limbAngle, float tickDelta, float age, float headYaw, float headPitch) {
|
||||
ModelWrapper<T, M> pony = getContext().getModelWrapper();
|
||||
ModelWrapper<T, M> pony = getModelWrapper();
|
||||
|
||||
for (EquipmentSlot i : EquipmentSlot.values()) {
|
||||
if (i.getType() == EquipmentSlot.Type.ARMOR) {
|
||||
|
|
|
@ -43,7 +43,7 @@ public class SkullFeature<T extends LivingEntity, M extends EntityModel<T> & IPo
|
|||
public void render(MatrixStack stack, VertexConsumerProvider renderContext, int lightUv, T entity, float limbDistance, float limbAngle, float tickDelta, float age, float headYaw, float headPitch) {
|
||||
ItemStack itemstack = entity.getEquippedStack(EquipmentSlot.HEAD);
|
||||
if (!itemstack.isEmpty()) {
|
||||
M model = getContext().getModelWrapper().body();
|
||||
M model = getModelWrapper().body();
|
||||
Item item = itemstack.getItem();
|
||||
|
||||
stack.push();
|
||||
|
|
|
@ -1,33 +1,95 @@
|
|||
package com.minelittlepony.client.transform;
|
||||
|
||||
import net.minecraft.client.network.AbstractClientPlayerEntity;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.math.*;
|
||||
|
||||
import com.minelittlepony.api.model.IModel;
|
||||
import com.minelittlepony.api.model.RenderPass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import com.minelittlepony.api.model.*;
|
||||
|
||||
public interface PonyPosture<T extends LivingEntity> {
|
||||
PonyPosture<LivingEntity> STANDING = (IModel model, LivingEntity entity, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float tickDelta) -> {
|
||||
model.getAttributes().motionPitch /= 10;
|
||||
model.getAttributes().motionLerp /= 10;
|
||||
model.getAttributes().motionRoll /= 10;
|
||||
};
|
||||
PonyPosture<LivingEntity> ELYTRA = (IModel model, LivingEntity entity, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float tickDelta) -> {
|
||||
stack.translate(0, entity.isInSneakingPose() ? -0.825F : -1, 0);
|
||||
};
|
||||
PonyPosture<LivingEntity> FLYING = new PostureFlight(1, 0);
|
||||
PonyPosture<LivingEntity> SWIMMING = new PostureFlight(2, -0.9F);
|
||||
PonyPosture<LivingEntity> FALLING = STANDING;
|
||||
|
||||
PonyPosture<LivingEntity> STANDING = new PostureStanding();;
|
||||
PonyPosture<LivingEntity> ELYTRA = new PostureElytra();
|
||||
PonyPosture<PlayerEntity> FLYING = new PostureFlight();
|
||||
PonyPosture<PlayerEntity> SWIMMING = new PostureSwimming();
|
||||
PonyPosture<LivingEntity> FALLING = new PostureFalling();
|
||||
|
||||
default boolean applies(LivingEntity entity) {
|
||||
return true;
|
||||
}
|
||||
|
||||
default void apply(T player, IModel model, MatrixStack stack, float yaw, float ticks, int invert) {
|
||||
if (RenderPass.getCurrent() == RenderPass.WORLD && applies(player)) {
|
||||
double motionX = player.getX() - player.prevX;
|
||||
double motionY = player.isOnGround() ? 0 : player.getY() - player.prevY;
|
||||
double motionZ = player.getZ() - player.prevZ;
|
||||
|
||||
transform(model, player, stack, motionX, invert * motionY, motionZ, yaw, ticks);
|
||||
@NotNull
|
||||
static PonyPosture<?> getPosture(ModelAttributes attributes, LivingEntity entity) {
|
||||
if (attributes.isGliding) {
|
||||
return ELYTRA;
|
||||
}
|
||||
|
||||
if (attributes.isSleeping) {
|
||||
return STANDING;
|
||||
}
|
||||
|
||||
if (attributes.isSwimming) {
|
||||
return SWIMMING;
|
||||
}
|
||||
|
||||
if (attributes.isGoingFast && !attributes.isRiptide) {
|
||||
return FLYING;
|
||||
}
|
||||
|
||||
return FALLING;
|
||||
}
|
||||
|
||||
void transform(IModel model, T entity, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float ticks);
|
||||
default void apply(T player, IModel model, MatrixStack stack, float yaw, float tickDelta, int invert) {
|
||||
|
||||
if (RenderPass.getCurrent() == RenderPass.GUI || RenderPass.getCurrent() == RenderPass.WORLD) {
|
||||
// this reverts the rotations done in PlayerEntityRenderer#setupTransforms
|
||||
if (player instanceof PlayerEntity) {
|
||||
float leaningPitch = player.getLeaningPitch(tickDelta);
|
||||
if (player.isFallFlying()) {
|
||||
|
||||
if (RenderPass.getCurrent() == RenderPass.GUI) {
|
||||
Vec3d vec3d = player.getRotationVec(tickDelta);
|
||||
Vec3d vec3d2 = ((AbstractClientPlayerEntity)player).lerpVelocity(tickDelta);
|
||||
double d = vec3d2.horizontalLengthSquared();
|
||||
double e = vec3d.horizontalLengthSquared();
|
||||
if (d > 0.0 && e > 0.0) {
|
||||
double l = (vec3d2.x * vec3d.x + vec3d2.z * vec3d.z) / Math.sqrt(d * e);
|
||||
double m = vec3d2.x * vec3d.z - vec3d2.z * vec3d.x;
|
||||
stack.multiply(RotationAxis.NEGATIVE_Y.rotation((float)(Math.signum(m) * Math.acos(l))));
|
||||
}
|
||||
}
|
||||
|
||||
float roll = (float)player.getRoll() + tickDelta;
|
||||
float targetRoll = MathHelper.clamp(roll * roll / 100F, 0, 1);
|
||||
if (!player.isUsingRiptide()) {
|
||||
stack.multiply(RotationAxis.NEGATIVE_X.rotationDegrees(targetRoll * (-90 - player.getPitch())));
|
||||
}
|
||||
|
||||
} else if (leaningPitch > 0) {
|
||||
if (player.isInSwimmingPose()) {
|
||||
stack.translate(0.0f, 1.0f, -0.3f);
|
||||
}
|
||||
float pitch = MathHelper.lerp(leaningPitch, 0, player.isTouchingWater() ? -90 - player.getPitch() : -90);
|
||||
stack.multiply(RotationAxis.NEGATIVE_X.rotationDegrees(pitch));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (RenderPass.getCurrent() != RenderPass.WORLD) {
|
||||
return;
|
||||
}
|
||||
|
||||
double motionX = player.getX() - player.prevX;
|
||||
double motionY = player.isOnGround() ? 0 : player.getY() - player.prevY;
|
||||
double motionZ = player.getZ() - player.prevZ;
|
||||
|
||||
transform(model, player, stack, motionX, invert * motionY, motionZ, yaw, tickDelta);
|
||||
}
|
||||
|
||||
void transform(IModel model, T entity, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float tickDelta);
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ public enum PonyTransformation {
|
|||
break;
|
||||
case HEAD:
|
||||
if (model.getAttributes().isCrouching) stack.translate(0, 0.1F, 0);
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.37F, 0.45F);
|
||||
break;
|
||||
case BACK:
|
||||
stack.translate(riderOffset.x, riderOffset.y, riderOffset.z);
|
||||
|
@ -49,13 +48,11 @@ public enum PonyTransformation {
|
|||
stack.translate(0, -0.2F, -0.05F);
|
||||
stack.scale(1, 1.3F, 1);
|
||||
if (model.getAttributes().isCrouching) stack.translate(-0.03F, 0.01F, 0.2F);
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.5F, 0.25F);
|
||||
break;
|
||||
case HEAD:
|
||||
stack.translate(0, -0.14F, -0.04F);
|
||||
if (model.getAttributes().isSleeping) stack.translate(0, 0, -0.1F);
|
||||
if (model.getAttributes().isCrouching) stack.translate(0, 0.15F, 0);
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.45F, 0.45F);
|
||||
break;
|
||||
case BODY:
|
||||
stack.translate(0, -0.2F, -0.04F);
|
||||
|
@ -86,13 +83,11 @@ public enum PonyTransformation {
|
|||
stack.translate(0, -0.2F, -0.07F);
|
||||
stack.scale(1, 1.3F, 1);
|
||||
if (model.getAttributes().isCrouching) stack.translate(-0.03F, -0.07F, 0.09F);
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.5F, 0.25F);
|
||||
break;
|
||||
case HEAD:
|
||||
stack.translate(0, -0.14F, -0.06F);
|
||||
if (model.getAttributes().isSleeping) stack.translate(0, 0, -0.1F);
|
||||
if (model.getAttributes().isCrouching) stack.translate(0, 0.15F, 0);
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.15F, 0.25F);
|
||||
break;
|
||||
case BODY:
|
||||
stack.translate(0, -0.2F, -0.04F);
|
||||
|
@ -116,7 +111,7 @@ public enum PonyTransformation {
|
|||
public void transform(IModel model, BodyPart part, MatrixStack stack) {
|
||||
if (model.getAttributes().isSwimming) stack.translate(0, -0.9F, 0);
|
||||
if (model.getAttributes().isCrouching) stack.translate(0, -0.2F, 0);
|
||||
if (model.getAttributes().isSleeping) stack.translate(0, -0.65F, -0.3F);
|
||||
if (model.getAttributes().isSleeping) stack.translate(0, -0.8F, -0.3F);
|
||||
if (model.isRiding()) stack.translate(0, -0.6F, -0.2F);
|
||||
|
||||
stack.translate(0, 0.2F, 0);
|
||||
|
@ -128,7 +123,6 @@ public enum PonyTransformation {
|
|||
if (model.getAttributes().isCrouching) stack.translate(-0.03F, -0.16F, 0.15F);
|
||||
break;
|
||||
case HEAD:
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.9F, 0.9F);
|
||||
stack.scale(1.3F, 1.3F, 1.3F);
|
||||
break;
|
||||
case LEGS:
|
||||
|
@ -158,7 +152,6 @@ public enum PonyTransformation {
|
|||
case HEAD:
|
||||
stack.translate(0, -0.11F, 0);
|
||||
if (model.getAttributes().isCrouching) stack.translate(0, 0.04F, 0);
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.17F, 0.25F);
|
||||
break;
|
||||
case BODY:
|
||||
case TAIL:
|
||||
|
@ -181,7 +174,7 @@ public enum PonyTransformation {
|
|||
public void transform(IModel model, BodyPart part, MatrixStack stack) {
|
||||
if (model.getAttributes().isSwimming) stack.translate(0, -0.6F, 0);
|
||||
if (model.getAttributes().isCrouching) stack.translate(0, -0.15F, 0);
|
||||
if (model.getAttributes().isSleeping) stack.translate(0, -0.4F, -0.3F);
|
||||
if (model.getAttributes().isSleeping) stack.translate(0, -0.45F, -0.3F);
|
||||
if (model.isRiding()) stack.translate(0, -0.4F, -0.2F);
|
||||
|
||||
switch (part) {
|
||||
|
@ -193,7 +186,6 @@ public enum PonyTransformation {
|
|||
case HEAD:
|
||||
stack.translate(0, -0.15F, 0);
|
||||
if (model.getAttributes().isCrouching) stack.translate(0, 0.04F, 0);
|
||||
if (model.getAttributes().isSwimmingRotated) stack.translate(0, 0.8F, 0.85F);
|
||||
stack.scale(1.15F, 1.15F, 1.15F);
|
||||
break;
|
||||
case BODY:
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
package com.minelittlepony.client.transform;
|
||||
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.math.RotationAxis;
|
||||
|
||||
import com.minelittlepony.api.model.IModel;
|
||||
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
|
||||
public class PostureElytra implements PonyPosture<LivingEntity> {
|
||||
@Override
|
||||
public void transform(IModel model, LivingEntity entity, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||
stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(90));
|
||||
stack.translate(0, model.getAttributes().isCrouching ? 0.2F : -1, 0);
|
||||
}
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
package com.minelittlepony.client.transform;
|
||||
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
|
||||
import com.minelittlepony.api.model.IModel;
|
||||
|
||||
public class PostureFalling implements PonyPosture<LivingEntity> {
|
||||
@Override
|
||||
public void transform(IModel model, LivingEntity entity, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||
model.getAttributes().motionPitch = 0;
|
||||
}
|
||||
}
|
|
@ -3,25 +3,29 @@ package com.minelittlepony.client.transform;
|
|||
import com.minelittlepony.api.model.IModel;
|
||||
import com.minelittlepony.common.util.animation.MotionCompositor;
|
||||
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.math.RotationAxis;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
|
||||
public class PostureFlight extends MotionCompositor implements PonyPosture<PlayerEntity> {
|
||||
@Override
|
||||
public boolean applies(LivingEntity entity) {
|
||||
return entity instanceof PlayerEntity;
|
||||
public class PostureFlight extends MotionCompositor implements PonyPosture<LivingEntity> {
|
||||
|
||||
private final float xScale;
|
||||
private final float yOffset;
|
||||
|
||||
public PostureFlight(float xScale, float yOffset) {
|
||||
this.xScale = xScale;
|
||||
this.yOffset = yOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(IModel model, PlayerEntity player, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||
model.getAttributes().motionPitch = (float) calculateIncline(player, motionX, motionY, motionZ);
|
||||
model.getAttributes().motionRoll = (float)calculateRoll(player, motionX, motionY, motionZ);
|
||||
public void transform(IModel model, LivingEntity player, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||
model.getAttributes().motionPitch = (float)calculateIncline(player, motionX, motionY, motionZ);
|
||||
model.getAttributes().motionRoll = (float)calculateRoll(player, motionX * xScale, motionY, motionZ * xScale);
|
||||
|
||||
model.getAttributes().motionRoll = model.getMetadata().getInterpolator(model.getAttributes().interpolatorId).interpolate("pegasusRoll", model.getAttributes().motionRoll, 10);
|
||||
|
||||
stack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(model.getAttributes().motionPitch));
|
||||
stack.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(model.getAttributes().motionRoll));
|
||||
stack.translate(0, yOffset, 0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
package com.minelittlepony.client.transform;
|
||||
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
|
||||
import com.minelittlepony.api.model.IModel;
|
||||
|
||||
public class PostureStanding implements PonyPosture<LivingEntity> {
|
||||
@Override
|
||||
public boolean applies(LivingEntity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(IModel model, LivingEntity entity, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package com.minelittlepony.client.transform;
|
||||
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
|
||||
import com.minelittlepony.api.model.IModel;
|
||||
|
||||
public class PostureSwimming extends PostureFlight {
|
||||
|
||||
@Override
|
||||
public double calculateRoll(LivingEntity entity, double motionX, double motionY, double motionZ) {
|
||||
motionX *= 2;
|
||||
motionZ *= 2;
|
||||
|
||||
return super.calculateRoll(entity, motionX, motionY, motionZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double calculateIncline(LivingEntity entity, double motionX, double motionY, double motionZ) {
|
||||
return 90; // mojang handles this
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(IModel model, PlayerEntity player, MatrixStack stack, double motionX, double motionY, double motionZ, float yaw, float ticks) {
|
||||
stack.translate(0, 0.9, -1);
|
||||
super.transform(model, player, stack, motionX, motionY, motionZ, yaw, ticks);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue