package pneumaticCraft.client.model;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import pneumaticCraft.client.gui.GuiPneumaticContainerBase;
import pneumaticCraft.common.tileentity.TileEntityAssemblyLaser;
import pneumaticCraft.lib.Textures;
public class ModelAssemblyLaser extends ModelBase implements IBaseModel{
//fields
ModelRenderer Base;
ModelRenderer BaseTurn;
ModelRenderer BaseTurn2;
ModelRenderer ArmBase1;
ModelRenderer ArmBase2;
ModelRenderer SupportMiddle;
ModelRenderer ArmMiddle1;
ModelRenderer ArmMiddle2;
ModelRenderer LaserBase;
ModelRenderer Laser;
public ModelAssemblyLaser(){
textureWidth = 64;
textureHeight = 64;
Base = new ModelRenderer(this, 0, 0);
Base.addBox(0F, 0F, 1F, 16, 1, 16);
Base.setRotationPoint(-8F, 23F, -9F);
Base.setTextureSize(64, 32);
Base.mirror = true;
setRotation(Base, 0F, 0F, 0F);
BaseTurn = new ModelRenderer(this, 0, 17);
BaseTurn.addBox(0F, 0F, 0F, 7, 1, 7);
BaseTurn.setRotationPoint(-3.5F, 22F, -3.5F);
BaseTurn.setTextureSize(64, 32);
BaseTurn.mirror = true;
setRotation(BaseTurn, 0F, 0F, 0F);
BaseTurn2 = new ModelRenderer(this, 28, 17);
BaseTurn2.addBox(0F, 0F, 0F, 4, 5, 4);
BaseTurn2.setRotationPoint(-2F, 17F, -2F);
BaseTurn2.setTextureSize(64, 32);
BaseTurn2.mirror = true;
setRotation(BaseTurn2, 0F, 0F, 0F);
ArmBase1 = new ModelRenderer(this, 0, 25);
ArmBase1.addBox(0F, 0F, 0F, 1, 2, 8);
ArmBase1.setRotationPoint(2F, 17F, -1F);
ArmBase1.setTextureSize(64, 32);
ArmBase1.mirror = true;
setRotation(ArmBase1, 0F, 0F, 0F);
ArmBase2 = new ModelRenderer(this, 0, 25);
ArmBase2.addBox(0F, 0F, 0F, 1, 2, 8);
ArmBase2.setRotationPoint(-3F, 17F, -1F);
ArmBase2.setTextureSize(64, 32);
ArmBase2.mirror = true;
setRotation(ArmBase2, 0F, 0F, 0F);
SupportMiddle = new ModelRenderer(this, 0, 57);
SupportMiddle.addBox(0F, 0F, 0F, 2, 1, 1);
SupportMiddle.setRotationPoint(-1F, 17.5F, 5.5F);
SupportMiddle.setTextureSize(64, 32);
SupportMiddle.mirror = true;
setRotation(SupportMiddle, 0F, 0F, 0F);
ArmMiddle1 = new ModelRenderer(this, 0, 35);
ArmMiddle1.addBox(0F, 0F, 0F, 1, 17, 2);
ArmMiddle1.setRotationPoint(-2F, 2F, 5F);
ArmMiddle1.setTextureSize(64, 32);
ArmMiddle1.mirror = true;
setRotation(ArmMiddle1, 0F, 0F, 0F);
ArmMiddle2 = new ModelRenderer(this, 0, 35);
ArmMiddle2.addBox(0F, 0F, 0F, 1, 17, 2);
ArmMiddle2.setRotationPoint(1F, 2F, 5F);
ArmMiddle2.setTextureSize(64, 32);
ArmMiddle2.mirror = true;
setRotation(ArmMiddle2, 0F, 0F, 0F);
LaserBase = new ModelRenderer(this, 8, 38);
LaserBase.addBox(0F, 0F, 0F, 2, 2, 3);
LaserBase.setRotationPoint(-1F, 2F, 4.5F);
LaserBase.setTextureSize(64, 32);
LaserBase.mirror = true;
setRotation(LaserBase, 0F, 0F, 0F);
Laser = new ModelRenderer(this, 54, 59);
Laser.addBox(0F, 0F, 0F, 1, 1, 32);
Laser.setRotationPoint(-0.5F, 2.5F, 1F);
Laser.setTextureSize(64, 32);
Laser.mirror = true;
setRotation(Laser, 0F, 0F, 0F);
}
@Override
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){
super.render(entity, f, f1, f2, f3, f4, f5);
setRotationAngles(f, f1, f2, f3, f4, f5, entity);
Base.render(f5);
BaseTurn.render(f5);
BaseTurn2.render(f5);
ArmBase1.render(f5);
ArmBase2.render(f5);
SupportMiddle.render(f5);
ArmMiddle1.render(f5);
ArmMiddle2.render(f5);
LaserBase.render(f5);
Laser.render(f5);
}
@Override
public void renderStatic(float size, TileEntity te){
}
@Override
public void renderDynamic(float size, TileEntity te, float partialTicks){
if(te instanceof TileEntityAssemblyLaser) {
TileEntityAssemblyLaser tile = (TileEntityAssemblyLaser)te;
float[] renderAngles = new float[5];
for(int i = 0; i < 5; i++) {
renderAngles[i] = tile.oldAngles[i] + (tile.angles[i] - tile.oldAngles[i]) * partialTicks;
}
renderModel(0.0625F, renderAngles, tile.isLaserOn);
} else {
renderModel(size, new float[]{0, 0, 35, 55, 0}, false);
}
}
public void renderModel(float size, float[] angles, boolean laserOn){
Base.render(size);
GL11.glPushMatrix();
GL11.glRotatef(angles[0], 0, 1, 0);
BaseTurn.render(size);
BaseTurn2.render(size);
GL11.glTranslated(0, 18 / 16F, 0);
GL11.glRotatef(angles[1], 1, 0, 0);
GL11.glTranslated(0, -18 / 16F, 0);
ArmBase1.render(size);
ArmBase2.render(size);
SupportMiddle.render(size);
GL11.glTranslated(0, 18 / 16F, 6 / 16F);
GL11.glRotatef(angles[2], 1, 0, 0);
GL11.glTranslated(0, -18 / 16F, -6 / 16F);
ArmMiddle1.render(size);
ArmMiddle2.render(size);
GL11.glTranslated(0, 3 / 16F, 6 / 16F);
GL11.glRotatef(angles[3], 1, 0, 0);
GL11.glTranslated(0, -3 / 16F, -6 / 16F);
LaserBase.render(size);
if(laserOn) {
GL11.glPushMatrix();
GL11.glTranslated(0, 2.75 / 16D, 1 / 16D);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glColor4d(1.0D, 0.1D, 0, 1);
// GL11.glTranslated(0, 3 / 16F, 0);
// GL11.glRotatef(angles[4], 0, 0, 1);
// GL11.glTranslated(0, -3 / 16F, 0);
Laser.render(size / 8);
GL11.glPopMatrix();
GL11.glColor4d(1, 1, 1, 1);
GL11.glEnable(GL11.GL_TEXTURE_2D);
}
double textSize = 1 / 150D;
GL11.glScaled(textSize, textSize, textSize);
GL11.glRotated(-90, 1, 0, 0);
GL11.glTranslated(0, 0, 18);
GL11.glDisable(GL11.GL_LIGHTING);
GuiPneumaticContainerBase.drawTexture(Textures.GUI_LASER_DANGER, -8, -65);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopMatrix();
}
private void setRotation(ModelRenderer model, float x, float y, float z){
model.rotateAngleX = x;
model.rotateAngleY = y;
model.rotateAngleZ = z;
}
@Override
public ResourceLocation getModelTexture(TileEntity tile){
return Textures.MODEL_ASSEMBLY_ROBOT_ORANGE;
}
@Override
public boolean rotateModelBasedOnBlockMeta(){
return false;
}
}