package com.agilemods.materiamuto.client.render.tile;
import com.agilemods.materiamuto.client.lib.Model;
import com.agilemods.materiamuto.client.lib.Texture;
import com.agilemods.materiamuto.client.render.lib.RenderUtil;
import com.agilemods.materiamuto.common.tile.TileAlchemicalChest;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
@SideOnly(Side.CLIENT)
public class RenderTileAlchemicalChest extends TileEntitySpecialRenderer {
public void renderChestAt(TileAlchemicalChest tile, double x, double y, double z, float partial) {
ForgeDirection direction;
if (tile.getWorldObj() != null) {
direction = tile.orientation;
} else {
direction = ForgeDirection.EAST;
}
GL11.glPushMatrix();
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
short angle = 0;
if (direction != null) {
if (direction == ForgeDirection.NORTH) {
angle = 0;
} else if (direction == ForgeDirection.SOUTH) {
angle = 180;
} else if (direction == ForgeDirection.WEST) {
angle = 90;
} else if (direction == ForgeDirection.EAST) {
angle = -90;
}
}
GL11.glRotatef(angle, 0.0F, 1.0F, 0.0F);
float adjustedLidAngle = tile.prevLidAngle + (tile.lidAngle - tile.prevLidAngle) * partial;
adjustedLidAngle = 1.0F - adjustedLidAngle;
adjustedLidAngle = 1.0F - adjustedLidAngle * adjustedLidAngle * adjustedLidAngle;
Texture.ALCHEMICAL_CHEST.bindTexture();
GL11.glTranslated(0, 0.0625, 0.4375);
GL11.glRotated((adjustedLidAngle * 90), 1, 0, 0);
GL11.glTranslated(0, -0.0625, -0.4375);
Model.ALCHEMICAL_CHESET.renderOnly("top", "latch");
GL11.glTranslated(0, 0.0625, 0.4375);
GL11.glRotated(-(adjustedLidAngle * 90), 1, 0, 0);
GL11.glTranslated(0, -0.0625, -0.4375);
Model.ALCHEMICAL_CHESET.renderAllExcept("top", "latch");
if (tile.getWorldObj() != null) {
RenderUtil.enableBrightRendering();
GL11.glScaled(1.001, 1.001, 1.001);
float pulse = (float) ((MathHelper.sin(((float) tile.getWorldObj().getTotalWorldTime()) / 20.0F) + 1.25F) * 0.5);
GL11.glColor4f(pulse + 0.15F, pulse + 0.15F, pulse + 0.15F, pulse + 0.15F);
Texture.ALCHEMICAL_CHEST_OVERLAY.bindTexture();
GL11.glTranslated(0, 0.0625, 0.4375);
GL11.glRotated((adjustedLidAngle * 90), 1, 0, 0);
GL11.glTranslated(0, -0.0625, -0.4375);
Model.ALCHEMICAL_CHESET.renderOnly("top", "latch");
GL11.glTranslated(0, 0.0625, 0.4375);
GL11.glRotated(-(adjustedLidAngle * 90), 1, 0, 0);
GL11.glTranslated(0, -0.0625, -0.4375);
Model.ALCHEMICAL_CHESET.renderAllExcept("top", "latch");
RenderUtil.disableBrightRendering();
}
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partial) {
renderChestAt((TileAlchemicalChest) tile, x, y, z, partial);
}
}