mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 16:24:23 +01:00
Implement saddlebags as a separate component with more interesting animations
This commit is contained in:
parent
4123ee8c6e
commit
3ea22fd67c
4 changed files with 115 additions and 40 deletions
|
@ -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);
|
||||
|
|
|
@ -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 <T extends AbstractPonyModel & IModelPegasus> PegasusWings(T model, float yOffset, float stretch) {
|
||||
pegasus = model;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue