mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-12-02 08:48:00 +01:00
172 lines
6.3 KiB
Java
172 lines
6.3 KiB
Java
|
package com.minelittlepony.model.pony;
|
||
|
|
||
|
import com.minelittlepony.model.PonyModelConstants;
|
||
|
import net.minecraft.client.model.ModelBase;
|
||
|
import net.minecraft.client.model.ModelRenderer;
|
||
|
import net.minecraft.entity.Entity;
|
||
|
import net.minecraft.util.EnumHandSide;
|
||
|
import net.minecraft.util.math.MathHelper;
|
||
|
|
||
|
public abstract class ModelIllagerPony extends ModelBase {
|
||
|
|
||
|
public boolean isUnicorn;
|
||
|
public int glowColor;
|
||
|
|
||
|
public ModelRenderer illagerHead;
|
||
|
public ModelRenderer illagerBody;
|
||
|
public ModelRenderer leftForeLeg;
|
||
|
public ModelRenderer rightForeLeg;
|
||
|
public ModelRenderer leftHindLeg;
|
||
|
public ModelRenderer rightHindLeg;
|
||
|
public ModelRenderer tail;
|
||
|
public ModelRenderer horn;
|
||
|
|
||
|
ModelIllagerPony() {
|
||
|
textureWidth = 64;
|
||
|
textureHeight = 64;
|
||
|
|
||
|
this.setTextureOffset("head.ear1", 24, 4);
|
||
|
this.setTextureOffset("head.ear2", 0, 4);
|
||
|
this.setTextureOffset("head.snuzzle.mare1", 48, 21);
|
||
|
this.setTextureOffset("head.snuzzle.mare2", 49, 20);
|
||
|
this.setTextureOffset("head.snuzzle.stallion", 48, 16);
|
||
|
|
||
|
illagerHead = new ModelRenderer(this, "head");
|
||
|
illagerHead.setRotationPoint(0F, 1F, -5F);
|
||
|
illagerHead.setTextureOffset(0, 0).addBox(-4F, -6F, -5F, 8, 8, 8);
|
||
|
// headwear
|
||
|
illagerHead.setTextureOffset(32, 0).addBox(-4F, -6F, -5F, 8, 8, 8, 0.5F);
|
||
|
illagerHead.addBox("ear1", 2F, -8F, 0F, 2, 2, 2);
|
||
|
illagerHead.addBox("ear2", -4F, -8F, 0F, 2, 2, 2);
|
||
|
illagerHead.addBox("snuzzle.mare1", -2F, -0F, -6F, 4, 2, 1);
|
||
|
illagerHead.addBox("snuzzle.mare2", -1F, -1F, -6F, 2, 1, 1);
|
||
|
illagerHead.addBox("snuzzle.stallion", -2F, -1F, -6F, 4, 3, 1);
|
||
|
|
||
|
horn = new ModelRenderer(this, 60, 3);
|
||
|
horn.addBox(-0.5F, -11.0F, -2F, 1, 4, 1);
|
||
|
horn.rotateAngleX = 0.5F;
|
||
|
|
||
|
this.illagerHead.addChild(horn);
|
||
|
|
||
|
ModelRenderer illagerNeck = new ModelRenderer(this, 0, 40);
|
||
|
illagerNeck.addBox(-2F, 0F, -6F, 4, 4, 4);
|
||
|
illagerNeck.rotateAngleX = PonyModelConstants.NECK_ROT_X;
|
||
|
|
||
|
illagerBody = new ModelRenderer(this);
|
||
|
illagerBody.setTextureOffset(0, 16).addBox(-4F, 4F, -5F, 8, 8, 16);
|
||
|
illagerBody.addChild(illagerNeck);
|
||
|
|
||
|
leftForeLeg = new ModelRenderer(this, 32, 16);
|
||
|
leftForeLeg.addBox(0F, 0F, -2F, 4, 12, 4).setRotationPoint(0F, 12F, -3F);
|
||
|
|
||
|
rightForeLeg = new ModelRenderer(this, 32, 48);
|
||
|
rightForeLeg.addBox(-2F, 0F, -2F, 4, 12, 4).setRotationPoint(-2F, 12F, -3F);
|
||
|
|
||
|
leftHindLeg = new ModelRenderer(this, 0, 16);
|
||
|
leftHindLeg.addBox(-2F, 0F, -2F, 4, 12, 4).setRotationPoint(2F, 12F, 8F);
|
||
|
|
||
|
rightHindLeg = new ModelRenderer(this, 0, 48);
|
||
|
rightHindLeg.addBox(-2F, 0F, -2F, 4, 12, 4).setRotationPoint(-2F, 12F, 8F);
|
||
|
|
||
|
ModelRenderer tailStub = new ModelRenderer(this, 52, 24);
|
||
|
tailStub.addBox(-0.5F, -1F, -0.5F, 2, 4, 2).setRotationPoint(0F, 0F, 2F);
|
||
|
tailStub.rotateAngleX = (float) Math.PI / -3;
|
||
|
|
||
|
|
||
|
this.setTextureOffset("tail.1qtr", 48, 24);
|
||
|
this.setTextureOffset("tail.half", 48, 32);
|
||
|
this.setTextureOffset("tail.3qtr", 48, 40);
|
||
|
this.setTextureOffset("tail.full", 48, 48);
|
||
|
|
||
|
tail = new ModelRenderer(this, "tail");
|
||
|
tail.setRotationPoint(0F, 4F, 11F);
|
||
|
tail.addBox("1qtr", -1.5F, -2F, 2F, 4, 4, 4);
|
||
|
tail.addBox("half", -1.5F, 2F, 2F, 4, 4, 4);
|
||
|
tail.addBox("3qtr", -1.5F, 6F, 2F, 4, 4, 4);
|
||
|
tail.addBox("full", -1.5F, 10F, 2F, 4, 4, 4);
|
||
|
tail.addChild(tailStub);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
|
||
|
setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn);
|
||
|
|
||
|
illagerHead.render(scale);
|
||
|
illagerBody.render(scale);
|
||
|
leftForeLeg.render(scale);
|
||
|
rightForeLeg.render(scale);
|
||
|
leftHindLeg.render(scale);
|
||
|
rightHindLeg.render(scale);
|
||
|
tail.render(scale);
|
||
|
|
||
|
// mr.render(scale);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) {
|
||
|
|
||
|
final float PI = (float) Math.PI;
|
||
|
|
||
|
float headRotateAngleY = netHeadYaw * PI / 180;
|
||
|
float headRotateAngleX = headPitch * PI / 180;
|
||
|
|
||
|
final float max = 0.5f;
|
||
|
final float min = -1.25f;
|
||
|
headRotateAngleX = Math.min(headRotateAngleX, max);
|
||
|
headRotateAngleX = Math.max(headRotateAngleX, min);
|
||
|
this.illagerHead.rotateAngleY = headRotateAngleY;
|
||
|
this.illagerHead.rotateAngleX = headRotateAngleX;
|
||
|
|
||
|
this.tail.rotateAngleZ = MathHelper.cos(limbSwing * 0.8F) * 0.2F * limbSwingAmount;
|
||
|
|
||
|
float bodySwingRotation = 0.0F;
|
||
|
if (this.swingProgress > -9990.0F) {
|
||
|
bodySwingRotation = MathHelper.sin(MathHelper.sqrt(this.swingProgress) * PI * 2.0F) * 0.2F;
|
||
|
}
|
||
|
|
||
|
this.illagerBody.rotateAngleY = bodySwingRotation * 0.2F;
|
||
|
this.illagerBody.rotateAngleY = bodySwingRotation * 0.2F;
|
||
|
|
||
|
|
||
|
this.tail.rotateAngleY = bodySwingRotation;
|
||
|
|
||
|
|
||
|
this.setLegs(limbSwing, limbSwingAmount);
|
||
|
this.tail.rotateAngleX = 0.5F * limbSwingAmount;
|
||
|
|
||
|
|
||
|
this.tail.rotateAngleX += MathHelper.sin(ageInTicks * 0.067F) * 0.05F;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
private void setLegs(float move, float swing) {
|
||
|
this.rotateLegs(move, swing);
|
||
|
// this.adjustLegs();
|
||
|
}
|
||
|
|
||
|
private void rotateLegs(float move, float swing) {
|
||
|
final float PI = (float) Math.PI;
|
||
|
float swag = (float) Math.pow(swing, 16.0D);
|
||
|
float raQuad = PI * swag * 0.5F;
|
||
|
float laQuad = PI * swag;
|
||
|
float rlQuad = PI * swag * 0.2F;
|
||
|
float llQuad = PI * swag * -0.4F;
|
||
|
|
||
|
|
||
|
this.rightForeLeg.rotateAngleX = MathHelper.cos(move * 0.6662F + (float) Math.PI + raQuad) * 0.45F * swing;
|
||
|
this.leftForeLeg.rotateAngleX = MathHelper.cos(move * 0.6662F + laQuad) * 0.45F * swing;
|
||
|
this.rightHindLeg.rotateAngleX = MathHelper.cos(move * 0.6662F + rlQuad) * 0.45F * swing;
|
||
|
this.leftHindLeg.rotateAngleX = MathHelper.cos(move * 0.6662F + PI + llQuad) * 0.45F * swing;
|
||
|
this.rightForeLeg.rotateAngleZ = 0.0F;
|
||
|
|
||
|
this.leftForeLeg.rotateAngleZ = 0.0F;
|
||
|
}
|
||
|
|
||
|
public ModelRenderer getArm(EnumHandSide side) {
|
||
|
return side == EnumHandSide.LEFT ? this.leftForeLeg : this.rightForeLeg;
|
||
|
}
|
||
|
}
|