From 169ac3d3b97fbbe629e00f5111a8336c89b99d4b Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 20 Sep 2018 11:33:27 +0200 Subject: [PATCH] Apply rider position on a per-size basis and recursively translate riders higher up the stack --- .../com/minelittlepony/ducks/IRenderPony.java | 8 ++++++-- .../com/minelittlepony/model/BodyPart.java | 4 ++-- .../com/minelittlepony/render/RenderPony.java | 7 ++++++- .../transform/PonyTransformation.java | 19 +++++++++++++++++++ 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/minelittlepony/ducks/IRenderPony.java b/src/main/java/com/minelittlepony/ducks/IRenderPony.java index 6abb29a4..66885726 100644 --- a/src/main/java/com/minelittlepony/ducks/IRenderPony.java +++ b/src/main/java/com/minelittlepony/ducks/IRenderPony.java @@ -1,11 +1,12 @@ package com.minelittlepony.ducks; +import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.ModelWrapper; import com.minelittlepony.pony.data.IPony; import com.minelittlepony.render.RenderPony; import com.minelittlepony.util.math.MathUtil; -import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.EntityLivingBase; /** @@ -29,7 +30,10 @@ public interface IRenderPony { if (!passengerPony.getRace(false).isHuman()) { float yaw = MathUtil.interpolateDegress(entity.prevRenderYawOffset, entity.renderYawOffset, ticks); - GlStateManager.translate(0, 0, 0.3F); + getModelWrapper().apply(entityPony.getMetadata()); + AbstractPonyModel model = getModelWrapper().getBody(); + + model.transform(BodyPart.BACK); getInternalRenderer().applyPostureRiding(entity, entity.ticksExisted + ticks, yaw, ticks); } diff --git a/src/main/java/com/minelittlepony/model/BodyPart.java b/src/main/java/com/minelittlepony/model/BodyPart.java index 541a5fcd..12a7bdfe 100644 --- a/src/main/java/com/minelittlepony/model/BodyPart.java +++ b/src/main/java/com/minelittlepony/model/BodyPart.java @@ -5,6 +5,6 @@ public enum BodyPart { BODY, TAIL, NECK, - LEGS; - + LEGS, + BACK; } diff --git a/src/main/java/com/minelittlepony/render/RenderPony.java b/src/main/java/com/minelittlepony/render/RenderPony.java index 1bc4b98e..2ed196b8 100644 --- a/src/main/java/com/minelittlepony/render/RenderPony.java +++ b/src/main/java/com/minelittlepony/render/RenderPony.java @@ -44,16 +44,21 @@ public class RenderPony { GlStateManager.scale(s, s, s); enableModelRenderProfile(); + translateRider(entity, ticks); + } + + protected void translateRider(EntityLivingBase entity, float ticks) { if (entity.isRiding()) { Entity ridingEntity = entity.getRidingEntity(); if (ridingEntity instanceof EntityLivingBase) { + translateRider((EntityLivingBase)ridingEntity, ticks); IRenderPony renderer = MineLittlePony.getInstance().getRenderManager().getPonyRenderer((EntityLivingBase)ridingEntity); if (renderer != null) { // negate vanilla translations so the rider begins at the ridees feet. - GlStateManager.translate(0, entity.getYOffset() + ridingEntity.getMountedYOffset(), 0); + GlStateManager.translate(0, (ridingEntity.posY - entity.posY), 0); @SuppressWarnings("unchecked") IPony riderPony = renderer.getEntityPony((EntityLivingBase)ridingEntity); diff --git a/src/main/java/com/minelittlepony/transform/PonyTransformation.java b/src/main/java/com/minelittlepony/transform/PonyTransformation.java index 25e8da54..b3b0777b 100644 --- a/src/main/java/com/minelittlepony/transform/PonyTransformation.java +++ b/src/main/java/com/minelittlepony/transform/PonyTransformation.java @@ -22,6 +22,9 @@ public enum PonyTransformation { case HEAD: if (model.isCrouching()) translate(0, 0.1F, 0); break; + case BACK: + translate(0, 3, 0.5F); + break; default: } } @@ -54,6 +57,9 @@ public enum PonyTransformation { translate(0, -0.14F, 0); scale(1.15F, 1.12F, 1.15F); break; + case BACK: + translate(0, 2.3F, 0.3F); + break; } } }, @@ -79,6 +85,9 @@ public enum PonyTransformation { translate(0, 0.1F, 0); scale(1, 0.81F, 1); break; + case BACK: + translate(0, 4.5F, 0.6F); + break; default: } } @@ -109,6 +118,9 @@ public enum PonyTransformation { scale(1, 1.18F, 1); if (model.isGoingFast()) translate(0, 0.05F, 0); break; + case BACK: + translate(0, 2F, 0.6F); + break; } } }, @@ -139,9 +151,16 @@ public enum PonyTransformation { scale(1, 1.18F, 1); if (model.isGoingFast()) translate(0, 0.05F, 0); break; + case BACK: + translate(0, 4.3F, 0.6F); + break; } } }; + + + + public abstract void transform(IModel model, BodyPart part); }