/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.client.render;
import mods.railcraft.common.blocks.machine.beta.TileChestRailcraft;
import net.minecraft.client.model.ModelChest;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.util.ResourceLocation;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class RenderChest extends TileEntitySpecialRenderer implements IInvRenderer {
/**
* The Ender Chest Chest's model.
*/
private final ModelChest chestModel = new ModelChest();
private final TileChestRailcraft itemTile;
private final ResourceLocation texture;
public RenderChest(String texture, TileChestRailcraft itemTile) {
this.texture = new ResourceLocation(texture);
this.itemTile = itemTile;
}
/**
* Helps to render Ender Chest.
*/
public void renderChest(TileChestRailcraft tile, double x, double y, double z, float time) {
int facing = tile.getFacing().ordinal();
bindTexture(texture);
GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F);
GL11.glScalef(1.0F, -1.0F, -1.0F);
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
short rotation = 0;
switch (facing) {
case 2:
rotation = 180;
break;
case 3:
rotation = 0;
break;
case 4:
rotation = 90;
break;
case 5:
rotation = -90;
break;
}
GL11.glRotatef((float) rotation, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
float lidAngle = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * time;
lidAngle = 1.0F - lidAngle;
lidAngle = 1.0F - lidAngle * lidAngle * lidAngle;
this.chestModel.chestLid.rotateAngleX = -(lidAngle * (float) Math.PI / 2.0F);
this.chestModel.renderAll();
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glPopAttrib();
GL11.glPopMatrix();
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float time) {
this.renderChest((TileChestRailcraft) tile, x, y, z, time);
}
@Override
public void renderItem(RenderBlocks renderBlocks, ItemStack item, ItemRenderType renderType) {
TileEntityRendererDispatcher.instance.renderTileEntityAt(this.itemTile, 0.0D, 0.0D, 0.0D, 0.0F);
}
}