package pneumaticCraft.client.model;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import pneumaticCraft.common.tileentity.TileEntityPressureChamberInterface;
import pneumaticCraft.lib.Textures;
public class ModelPressureChamberInterface extends ModelBase implements IBaseModel{
// fields
ModelRenderer Shape1;
ModelRenderer Shape2;
ModelRenderer Shape3;
ModelRenderer Shape4;
ModelRenderer Shape5;
ModelRenderer Shape6;
ModelRenderer Shape7;
ModelRenderer Shape8;
ModelRenderer Input;
ModelRenderer Output;
private final RenderItem customRenderItem;
public ModelPressureChamberInterface(){
textureWidth = 128;
textureHeight = 128;
Shape1 = new ModelRenderer(this, 0, 0);
Shape1.addBox(0F, 0F, 0F, 13, 3, 16);
Shape1.setRotationPoint(-5F, 21F, -8F);
Shape1.setTextureSize(128, 128);
Shape1.mirror = true;
setRotation(Shape1, 0F, 0F, 0F);
Shape2 = new ModelRenderer(this, 0, 19);
Shape2.addBox(0F, 0F, 0F, 3, 13, 16);
Shape2.setRotationPoint(5F, 8F, -8F);
Shape2.setTextureSize(128, 128);
Shape2.mirror = true;
setRotation(Shape2, 0F, 0F, 0F);
Shape3 = new ModelRenderer(this, 58, 0);
Shape3.addBox(0F, 0F, 0F, 13, 3, 16);
Shape3.setRotationPoint(-8F, 8F, -8F);
Shape3.setTextureSize(128, 128);
Shape3.mirror = true;
setRotation(Shape3, 0F, 0F, 0F);
Shape4 = new ModelRenderer(this, 38, 19);
Shape4.addBox(0F, 0F, 0F, 3, 13, 16);
Shape4.setRotationPoint(-8F, 11F, -8F);
Shape4.setTextureSize(128, 128);
Shape4.mirror = true;
setRotation(Shape4, 0F, 0F, 0F);
Shape5 = new ModelRenderer(this, 0, 48);
Shape5.addBox(0F, 0F, 0F, 2, 2, 16);
Shape5.setRotationPoint(-5F, 11F, -8F);
Shape5.setTextureSize(128, 128);
Shape5.mirror = true;
setRotation(Shape5, 0F, 0F, 0F);
Shape6 = new ModelRenderer(this, 36, 48);
Shape6.addBox(0F, 0F, 0F, 2, 2, 16);
Shape6.setRotationPoint(3F, 11F, -8F);
Shape6.setTextureSize(128, 128);
Shape6.mirror = true;
setRotation(Shape6, 0F, 0F, 0F);
Shape7 = new ModelRenderer(this, 0, 66);
Shape7.addBox(0F, 0F, 0F, 2, 2, 16);
Shape7.setRotationPoint(-5F, 19F, -8F);
Shape7.setTextureSize(128, 128);
Shape7.mirror = true;
setRotation(Shape7, 0F, 0F, 0F);
Shape8 = new ModelRenderer(this, 36, 66);
Shape8.addBox(0F, 0F, 0F, 2, 2, 16);
Shape8.setRotationPoint(3F, 19F, -8F);
Shape8.setTextureSize(128, 128);
Shape8.mirror = true;
setRotation(Shape8, 0F, 0F, 0F);
Input = new ModelRenderer(this, 0, 84);
Input.addBox(0F, 0F, 0F, 10, 10, 2);
Input.setRotationPoint(-5F, 11F, -7.2F);
Input.setTextureSize(128, 128);
Input.mirror = true;
setRotation(Input, 0F, 0F, 0F);
Output = new ModelRenderer(this, 24, 84);
Output.addBox(0F, 0F, 0F, 10, 10, 2);
Output.setRotationPoint(-5F, 11F, 5.2F);
Output.setTextureSize(128, 128);
Output.mirror = true;
setRotation(Output, 0F, 0F, 0F);
setRotation(Output, 0F, 0F, 0F);
// EE3 snippet, to initialize an EntityItem which doesn't bob.
customRenderItem = new RenderItem(){
@Override
public boolean shouldBob(){
return false;
};
};
customRenderItem.setRenderManager(RenderManager.instance);
}
@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);
Shape1.render(f5);
Shape2.render(f5);
Shape3.render(f5);
Shape4.render(f5);
Shape5.render(f5);
Shape6.render(f5);
Shape7.render(f5);
Shape8.render(f5);
Input.render(f5);
Output.render(f5);
}
public void renderModel(float size, float inputDoor, float outputDoor){
Shape1.render(size);
Shape2.render(size);
Shape3.render(size);
Shape4.render(size);
Shape5.render(size);
Shape6.render(size);
Shape7.render(size);
Shape8.render(size);
GL11.glPushMatrix();
GL11.glTranslatef((1F - (float)Math.cos(inputDoor * Math.PI)) * 0.37F, 0, 0);
Input.render(size);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslatef((1F - (float)Math.cos(outputDoor * Math.PI)) * 0.37F, 0, 0);
Output.render(size);
GL11.glPopMatrix();
}
private void setRotation(ModelRenderer model, float x, float y, float z){
model.rotateAngleX = x;
model.rotateAngleY = y;
model.rotateAngleZ = z;
}
@Override
public void renderStatic(float size, TileEntity te){
}
@Override
public ResourceLocation getModelTexture(TileEntity tile){
return Textures.MODEL_PRESSURE_CHAMBER_INTERFACE;
}
@Override
public boolean rotateModelBasedOnBlockMeta(){
return true;
}
@Override
public void renderDynamic(float size, TileEntity te, float partialTicks){
if(te instanceof TileEntityPressureChamberInterface) {
TileEntityPressureChamberInterface tile = (TileEntityPressureChamberInterface)te;
float renderInputProgress = tile.oldInputProgress + (tile.inputProgress - tile.oldInputProgress) * partialTicks;
float renderOutputProgress = tile.oldOutputProgress + (tile.outputProgress - tile.oldOutputProgress) * partialTicks;
renderModel(size, renderInputProgress / TileEntityPressureChamberInterface.MAX_PROGRESS, renderOutputProgress / TileEntityPressureChamberInterface.MAX_PROGRESS);
if(tile.getStackInSlot(0) != null) {
GL11.glTranslated(0, 17 / 16F, 0);
GL11.glScalef(1.0F, -1F, -1F);
// GL11.glRotatef(rotationAngle, 0.0F, 1.0F, 0.0F);
boolean fancySetting = RenderManager.instance.options.fancyGraphics;
RenderManager.instance.options.fancyGraphics = true;
EntityItem ghostItem = new EntityItem(te.getWorldObj(), 0, 0, 0, tile.getStackInSlot(0));
ghostItem.hoverStart = 0;
customRenderItem.doRender(ghostItem, 0, 0, 0, 0, 0);
RenderManager.instance.options.fancyGraphics = fancySetting;
}
} else {
renderModel(size, 0, 0);
}
}
}