From c556922286b18f0c95a205749eaf441f2b40383f Mon Sep 17 00:00:00 2001 From: PolyacovYury Date: Sat, 2 Jun 2018 19:24:07 +0300 Subject: [PATCH] Moved the bags to a separate class, enabling further addition of accessories --- .../model/components/PonyAccessory.java | 62 +++++++++++++++++++ .../model/player/ModelEarthPony.java | 46 +++----------- .../minelittlepony/pony/data/IPonyData.java | 5 ++ .../minelittlepony/pony/data/PonyData.java | 4 ++ 4 files changed, 81 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/minelittlepony/model/components/PonyAccessory.java diff --git a/src/main/java/com/minelittlepony/model/components/PonyAccessory.java b/src/main/java/com/minelittlepony/model/components/PonyAccessory.java new file mode 100644 index 00000000..a3276e38 --- /dev/null +++ b/src/main/java/com/minelittlepony/model/components/PonyAccessory.java @@ -0,0 +1,62 @@ +package com.minelittlepony.model.components; + +import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.render.plane.PlaneRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; + +import static com.minelittlepony.model.PonyModelConstants.*; + +public class PonyAccessory { + + private final AbstractPonyModel theModel; + + public PlaneRenderer bag; + + public PonyAccessory(T model) { + theModel = model; + + if (theModel.metadata.hasBags()) { + bag = new PlaneRenderer(theModel, 56, 19); + } + } + + public void setRotationAndAngles(float move, float swing, float ticks, float headYaw, float headPitch, float scale, Entity entity) { + float angleY = 0; + if (theModel.swingProgress > -9990.0F && !theModel.metadata.hasMagic()) { + angleY = MathHelper.sin(MathHelper.sqrt(theModel.swingProgress) * PI * 2) * 0.02F; + } + bag.rotateAngleY = angleY; + + } + + public void render(float scale) { + if (bag != null && theModel.metadata.hasBags()) { + bag.render(scale); + } + } + + public void initPositions(float yOffset, float stretch) { + if (bag != null && theModel.metadata.hasBags()) { + bag.offset(BODY_CENTRE_X, BODY_CENTRE_Y, BODY_CENTRE_Z) + .around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z) + .tex(56, 25).addBackPlane(-7, -5, -4, 3, 6, stretch) //right bag front + .addBackPlane(4, -5, -4, 3, 6, stretch) //left bag front + .tex(59, 25).addBackPlane(-7, -5, 4, 3, 6, stretch) //right bag back + .addBackPlane(4, -5, 4, 3, 6, stretch) //left bag back + .tex(56, 19).addWestPlane(-7, -5, -4, 6, 8, stretch) //right bag outside + .addWestPlane(7, -5, -4, 6, 8, stretch) //left bag outside + .addWestPlane(-4.01f, -5, -4, 6, 8, stretch) //right bag inside + .addWestPlane(4.01f, -5, -4, 6, 8, stretch) //left bag inside + .tex(56, 31).addTopPlane(-4, -4.5F, -1, 8, 1, stretch) //strap front + .addTopPlane(-4, -4.5F, 0, 8, 1, stretch) //strap back + .addBackPlane(-4, -4.5F, 0, 8, 1, stretch) + .addFrontPlane(-4, -4.5F, 0, 8, 1, stretch) + .child(0).tex(56, 16).addTopPlane(2, -5, -13, 8, 3, stretch) //left bag top + .addTopPlane(2, -5, -2, 8, 3, stretch) //right bag top + .tex(56, 22).flipZ().addBottomPlane(2, 1, -13, 8, 3, stretch) //left bag bottom + .flipZ().addBottomPlane(2, 1, -2, 8, 3, stretch) //right bag bottom + .rotateAngleY = 4.712389F; + } + } +} diff --git a/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java b/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java index f21c0ce2..bae60573 100644 --- a/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java +++ b/src/main/java/com/minelittlepony/model/player/ModelEarthPony.java @@ -1,20 +1,17 @@ package com.minelittlepony.model.player; import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.components.PonyAccessory; import com.minelittlepony.render.PonyRenderer; -import com.minelittlepony.render.plane.PlaneRenderer; import net.minecraft.entity.Entity; -import net.minecraft.util.math.MathHelper; - -import static com.minelittlepony.model.PonyModelConstants.*; public class ModelEarthPony extends AbstractPonyModel { private final boolean smallArms; public PonyRenderer bipedCape; - public PlaneRenderer bag; + public PonyAccessory accessory; public ModelEarthPony(boolean smallArms) { super(smallArms); @@ -28,12 +25,8 @@ public class ModelEarthPony extends AbstractPonyModel { if (bipedCape != null) { bipedCape.rotationPointY = isSneak ? 2 : isRiding ? -4 : 0; } - if (bag != null && metadata.hasBags()) { - float angleY = 0; - if (swingProgress > -9990.0F && !metadata.hasMagic()) { - angleY = MathHelper.sin(MathHelper.sqrt(swingProgress) * PI * 2) * 0.02F; - } - bag.rotateAngleY = angleY; + if (accessory != null && metadata.hasAccessory()) { + accessory.setRotationAndAngles(move, swing, ticks, headYaw, headPitch, scale, entity); } } @@ -42,16 +35,16 @@ public class ModelEarthPony extends AbstractPonyModel { super.renderBody(entity, move, swing, ticks, headYaw, headPitch, scale); bipedBody.postRender(this.scale); - if (bag != null && metadata.hasBags()) { - bag.render(scale); + if (accessory != null && metadata.hasAccessory()) { + accessory.render(scale); } } @Override protected void initTextures() { super.initTextures(); - if (metadata.hasBags()) { - bag = new PlaneRenderer(this, 56, 19); + if (metadata.hasAccessory()) { + accessory = new PonyAccessory(this); } } @@ -59,28 +52,9 @@ public class ModelEarthPony extends AbstractPonyModel { protected void initPositions(float yOffset, float stretch) { super.initPositions(yOffset, stretch); - if (bag == null || !metadata.hasBags()) { - return; + if (accessory != null && metadata.hasAccessory()) { + accessory.initPositions(yOffset, stretch); } - bag.offset(BODY_CENTRE_X, BODY_CENTRE_Y, BODY_CENTRE_Z) - .around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z) - .tex(56, 25).addBackPlane(-7, -5, -4, 3, 6, stretch) //right bag front - .addBackPlane(4, -5, -4, 3, 6, stretch) //left bag front - .tex(59, 25).addBackPlane(-7, -5, 4, 3, 6, stretch) //right bag back - .addBackPlane(4, -5, 4, 3, 6, stretch) //left bag back - .tex(56, 19).addWestPlane(-7, -5, -4, 6, 8, stretch) //right bag outside - .addWestPlane(7, -5, -4, 6, 8, stretch) //left bag outside - .addWestPlane(-4.01f, -5, -4, 6, 8, stretch) //right bag inside - .addWestPlane(4.01f, -5, -4, 6, 8, stretch) //left bag inside - .tex(56, 31).addTopPlane(-4, -4.5F, -1, 8, 1, stretch) //strap front - .addTopPlane(-4, -4.5F, 0, 8, 1, stretch) //strap back - .addBackPlane(-4, -4.5F, 0, 8, 1, stretch) - .addFrontPlane(-4, -4.5F, 0, 8, 1, stretch) - .child(0).tex(56, 16).addTopPlane(2, -5, -13, 8, 3, stretch) //left bag top - .addTopPlane(2, -5, -2, 8, 3, stretch) //right bag top - .tex(56, 22).flipZ().addBottomPlane(2, 1, -13, 8, 3, stretch) //left bag bottom - .flipZ().addBottomPlane(2, 1, -2, 8, 3, stretch) //right bag bottom - .rotateAngleY = 4.712389F; } protected float getLegOutset() { diff --git a/src/main/java/com/minelittlepony/pony/data/IPonyData.java b/src/main/java/com/minelittlepony/pony/data/IPonyData.java index f61066c7..f3330b03 100644 --- a/src/main/java/com/minelittlepony/pony/data/IPonyData.java +++ b/src/main/java/com/minelittlepony/pony/data/IPonyData.java @@ -36,6 +36,11 @@ public interface IPonyData extends IMetadataSection { */ boolean hasMagic(); + /** + * Returns true if and only if this metadata represents a pony that has bags. + */ + boolean hasAccessory(); + /** * Returns true if and only if this metadata represents a pony that has bags. */ diff --git a/src/main/java/com/minelittlepony/pony/data/PonyData.java b/src/main/java/com/minelittlepony/pony/data/PonyData.java index 06f5e9f0..9d9530d8 100644 --- a/src/main/java/com/minelittlepony/pony/data/PonyData.java +++ b/src/main/java/com/minelittlepony/pony/data/PonyData.java @@ -63,6 +63,10 @@ public class PonyData implements IPonyData { return glowColor; } + public boolean hasAccessory() { + return accessory != PonyAccessory.NONE; + } + public boolean hasBags() { return accessory == PonyAccessory.SADDLEBAGS; }