diff --git a/src/main/java/com/minelittlepony/model/components/ModelWing.java b/src/main/java/com/minelittlepony/model/components/ModelWing.java index 2145f564..f7f6729d 100644 --- a/src/main/java/com/minelittlepony/model/components/ModelWing.java +++ b/src/main/java/com/minelittlepony/model/components/ModelWing.java @@ -6,25 +6,20 @@ import com.minelittlepony.model.AbstractPonyModel; import com.minelittlepony.render.PonyRenderer; public class ModelWing { - public PonyRenderer extended; - public PonyRenderer folded; - - private boolean mirror; + private PonyRenderer extended; + private PonyRenderer folded; public ModelWing(AbstractPonyModel pony, boolean mirror, float x, float y, float scale, int texY) { - this.mirror = mirror; - - folded = new PonyRenderer(pony, 56, texY) - .around(HEAD_RP_X, WING_FOLDED_RP_Y, WING_FOLDED_RP_Z); - extended = new PonyRenderer(pony, 56, texY + 3) - .around(HEAD_RP_X, WING_FOLDED_RP_Y, WING_FOLDED_RP_Z); + folded = new PonyRenderer(pony, 56, texY); + extended = new PonyRenderer(pony, 56, texY + 3); addClosedWing(x, y, scale); addFeathers(mirror, y, scale); } private void addClosedWing(float x, float y, float scale) { - folded.box(x, 5, 2, 2, 6, 2, scale) + folded.around(HEAD_RP_X, WING_FOLDED_RP_Y, WING_FOLDED_RP_Z) + .box(x, 5, 2, 2, 6, 2, scale) .box(x, 5, 4, 2, 8, 2, scale) .box(x, 5, 6, 2, 6, 2, scale) .rotateAngleX = ROTATE_90; @@ -32,7 +27,6 @@ public class ModelWing { private void addFeathers(boolean mirror, float y, float scale) { float r = mirror ? -1 : 1; - extended.cubeList.clear(); extended.around(r * LEFT_WING_EXT_RP_X, LEFT_WING_EXT_RP_Y + y, LEFT_WING_EXT_RP_Z); addFeather(0, r, y, 6, 0, 8, scale + 0.1F); addFeather(1, r, y, -1.2F, -0.2F, 8, scale + 0.2F) .rotateAngleX = -0.85F; @@ -52,9 +46,6 @@ public class ModelWing { public void render(boolean extend, float scale) { - extended.rotationPointX = (mirror ? -1 : 1) * LEFT_WING_EXT_RP_X; - extended.rotationPointY = LEFT_WING_EXT_RP_Y; - extended.rotateAngleY = 3; if (extend) { extended.render(scale); diff --git a/src/main/java/com/minelittlepony/model/components/PegasusWings.java b/src/main/java/com/minelittlepony/model/components/PegasusWings.java index a6da76c8..4f7c7690 100644 --- a/src/main/java/com/minelittlepony/model/components/PegasusWings.java +++ b/src/main/java/com/minelittlepony/model/components/PegasusWings.java @@ -12,8 +12,8 @@ public class PegasusWings implements IModelPart { private final IModelPegasus pegasus; - public final ModelWing leftWing; - public final ModelWing rightWing; + private final ModelWing leftWing; + private final ModelWing rightWing; public PegasusWings(T model, float yOffset, float stretch) { pegasus = model; diff --git a/src/main/java/com/minelittlepony/model/components/SaddleBags.java b/src/main/java/com/minelittlepony/model/components/SaddleBags.java new file mode 100644 index 00000000..3809ac46 --- /dev/null +++ b/src/main/java/com/minelittlepony/model/components/SaddleBags.java @@ -0,0 +1,99 @@ +package com.minelittlepony.model.components; + +import static com.minelittlepony.model.PonyModelConstants.*; + +import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.capabilities.IModel; +import com.minelittlepony.model.capabilities.IModelPart; +import com.minelittlepony.render.plane.PlaneRenderer; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.MathHelper; + +public class SaddleBags implements IModelPart { + + private PlaneRenderer leftBag; + private PlaneRenderer rightBag; + + private PlaneRenderer strap; + + private IModel model; + + public SaddleBags(AbstractPonyModel model) { + this.model = model; + + leftBag = new PlaneRenderer(model, 56, 19); + rightBag = new PlaneRenderer(model, 56, 19); + strap = new PlaneRenderer(model, 56, 19); + } + + @Override + public void init(float yOffset, float stretch) { + float y = -0.5F; + int x = 4; + int z = -2; + + strap.offset(-x, y + 0.2F, z + 3).around(0, 4, 4) + .tex(56, 31).addTopPlane(0, 0, 0, 8, 1, stretch) + .addTopPlane(0, 0, 1, 8, 1, stretch) + .addBackPlane(0, 0, 2, 8, 1, stretch) + .addFrontPlane(0, 0, 0, 8, 1, stretch); + + leftBag.offset(x, y, z).around(0, 4, 4) + .tex(56, 25).addBackPlane(0, 0, 0, 3, 6, stretch) + .tex(59, 25).addBackPlane(0, 0, 8, 3, 6, stretch) + .tex(56, 19).addWestPlane(3, 0, 0, 6, 8, stretch) + .addWestPlane(0, 0, 0, 6, 8, stretch) + .child(0).offset(z, y, -x).tex(56, 16) + .addTopPlane(0, 0, -3, 8, 3, stretch) + .tex(56, 22).flipZ().addBottomPlane(0, 6, -3, 8, 3, stretch) + .rotateAngleY = ROTATE_270; + + x += 3; + + rightBag.offset(-x, y, z).around(0, 4, 4) + .tex(56, 25).addBackPlane(0, 0, 0, 3, 6, stretch) + .tex(59, 25).addBackPlane(0, 0, 8, 3, 6, stretch) + .tex(56, 19).addWestPlane(3, 0, 0, 6, 8, stretch) + .addWestPlane(0, 0, 0, 6, 8, stretch) + .child(0).offset(z, y, x).tex(56, 16) + .flipZ().addTopPlane(0, 0, -3, 8, 3, stretch) + .tex(56, 22).flipZ().addBottomPlane(0, 6, -3, 8, 3, stretch) + .rotateAngleY = ROTATE_270; + + + } + + @Override + public void setRotationAndAngles(boolean rainboom, float move, float swing, float bodySwing, float ticks) { + float pi = PI * (float) Math.pow(swing, 16); + + float mve = move * 0.6662f; + float srt = swing / 4; + + bodySwing = MathHelper.cos(mve + pi) * srt; + + leftBag.rotateAngleX = bodySwing; + rightBag.rotateAngleX = bodySwing; + + leftBag.rotateAngleZ = bodySwing; + rightBag.rotateAngleZ = -bodySwing; + } + + @Override + public void renderPart(float scale) { + if (model.canFly()) { + GlStateManager.pushMatrix(); + GlStateManager.translate(0, 0.3F, 0); + } + + leftBag.render(scale); + rightBag.render(scale); + strap.render(scale); + + if (model.canFly()) { + GlStateManager.popMatrix(); + } + } + +} diff --git a/src/main/java/com/minelittlepony/model/ponies/ModelVillagerPony.java b/src/main/java/com/minelittlepony/model/ponies/ModelVillagerPony.java index 4ba32a80..5cfdf302 100644 --- a/src/main/java/com/minelittlepony/model/ponies/ModelVillagerPony.java +++ b/src/main/java/com/minelittlepony/model/ponies/ModelVillagerPony.java @@ -5,12 +5,15 @@ import net.minecraft.entity.monster.EntityZombieVillager; import net.minecraft.entity.passive.EntityVillager; import static com.minelittlepony.model.PonyModelConstants.*; +import com.minelittlepony.model.components.SaddleBags; import com.minelittlepony.model.player.ModelAlicorn; import com.minelittlepony.render.plane.PlaneRenderer; public class ModelVillagerPony extends ModelAlicorn { - public PlaneRenderer bag, apron, trinket; + public PlaneRenderer apron, trinket; + + public SaddleBags saddlebags; public ModelVillagerPony() { super(false); @@ -20,7 +23,7 @@ public class ModelVillagerPony extends ModelAlicorn { protected void shakeBody(float move, float swing, float bodySwing, float ticks) { super.shakeBody(move, swing, bodySwing, ticks); - bag.rotateAngleY = bodySwing; + saddlebags.setRotationAndAngles(rainboom, move, swing, bodySwing, ticks); apron.rotateAngleY = bodySwing; trinket.rotateAngleY = bodySwing; } @@ -32,7 +35,7 @@ public class ModelVillagerPony extends ModelAlicorn { int profession = getProfession(entity); if (profession > -1) { if (profession < 2) { - bag.render(scale); + saddlebags.renderPart(scale); } else if (profession == 2) { trinket.render(scale); } else if (profession > 2) { @@ -54,7 +57,7 @@ public class ModelVillagerPony extends ModelAlicorn { @Override protected void initTextures() { super.initTextures(); - bag = new PlaneRenderer(this, 56, 19); + saddlebags = new SaddleBags(this); apron = new PlaneRenderer(this, 56, 16); trinket = new PlaneRenderer(this, 0, 3); } @@ -63,25 +66,7 @@ public class ModelVillagerPony extends ModelAlicorn { protected void initPositions(float yOffset, float stretch) { super.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 - .flipZ().addTopPlane(2, -5, -2, 8, 3, stretch) //right bag top - .tex(56, 22).addBottomPlane(2, 1, -13, 8, 3, stretch) //left bag bottom - .flipZ().addBottomPlane(2, 1, -2, 8, 3, stretch) //right bag bottom - .rotateAngleY = 4.712389F; + saddlebags.init(yOffset, stretch); apron.offset(BODY_CENTRE_X, BODY_CENTRE_Y, BODY_CENTRE_Z) .around(HEAD_RP_X, HEAD_RP_Y + yOffset, HEAD_RP_Z)