package mekanism.client.render.tileentity;
import java.util.HashMap;
import java.util.Map;
import mekanism.api.transmitters.TransmissionType;
import mekanism.client.MekanismClient;
import mekanism.client.model.ModelEnergyCube;
import mekanism.client.model.ModelEnergyCube.ModelEnergyCore;
import mekanism.client.render.MekanismRenderer;
import mekanism.common.Tier.EnergyCubeTier;
import mekanism.common.tile.TileEntityEnergyCube;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class RenderEnergyCube extends TileEntitySpecialRenderer<TileEntityEnergyCube>
{
public static int[][] COLORS = new int[][] {new int[] {100, 210, 125}, new int[] {215, 85, 70}, new int[] {80, 125, 230},
new int[] {154, 120, 200}, new int[] {0, 0, 0}};
private ModelEnergyCube model = new ModelEnergyCube();
private ModelEnergyCore core = new ModelEnergyCore();
public static Map<EnergyCubeTier, ResourceLocation> resources = new HashMap<EnergyCubeTier, ResourceLocation>();
public static ResourceLocation baseTexture = MekanismUtils.getResource(ResourceType.RENDER, "EnergyCube.png");
public static ResourceLocation coreTexture = MekanismUtils.getResource(ResourceType.RENDER, "EnergyCore.png");
static {
if(resources.isEmpty())
{
for(EnergyCubeTier tier : EnergyCubeTier.values())
{
resources.put(tier, MekanismUtils.getResource(ResourceType.RENDER, "EnergyCube" + tier.getBaseTier().getSimpleName() + ".png"));
}
}
}
@Override
public void renderTileEntityAt(TileEntityEnergyCube tileEntity, double x, double y, double z, float partialTick, int destroyStage)
{
GlStateManager.pushMatrix();
GlStateManager.translate((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F);
bindTexture(baseTexture);
switch(tileEntity.facing.ordinal())
{
case 0:
{
GlStateManager.rotate(90F, -1.0F, 0.0F, 0.0F);
GlStateManager.translate(0.0F, 1.0F, -1.0F);
break;
}
case 1:
{
GlStateManager.rotate(90F, 1.0F, 0.0F, 0.0F);
GlStateManager.translate(0.0F, 1.0F, 1.0F);
break;
}
case 2: GlStateManager.rotate(0, 0.0F, 1.0F, 0.0F); break;
case 3: GlStateManager.rotate(180, 0.0F, 1.0F, 0.0F); break;
case 4: GlStateManager.rotate(90, 0.0F, 1.0F, 0.0F); break;
case 5: GlStateManager.rotate(270, 0.0F, 1.0F, 0.0F); break;
}
GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F);
model.render(0.0625F, tileEntity.tier, rendererDispatcher.renderEngine, false);
for(EnumFacing side : EnumFacing.values())
{
bindTexture(baseTexture);
model.renderSide(0.0625F, side, tileEntity.configComponent.getOutput(TransmissionType.ENERGY, side).ioState, tileEntity.tier, rendererDispatcher.renderEngine);
}
GlStateManager.popMatrix();
if(tileEntity.getEnergy()/tileEntity.getMaxEnergy() > 0.1)
{
GlStateManager.pushMatrix();
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
bindTexture(coreTexture);
MekanismRenderer.blendOn();
MekanismRenderer.glowOn();
int[] c = COLORS[tileEntity.tier.getBaseTier().ordinal()];
GlStateManager.pushMatrix();
GlStateManager.scale(0.4F, 0.4F, 0.4F);
GL11.glColor4f((float)c[0]/255F, (float)c[1]/255F, (float)c[2]/255F, (float)(tileEntity.getEnergy() / tileEntity.getMaxEnergy()));
GlStateManager.translate(0, (float)Math.sin(Math.toRadians((MekanismClient.ticksPassed + partialTick) * 3)) / 7, 0);
GlStateManager.rotate((MekanismClient.ticksPassed + partialTick) * 4, 0, 1, 0);
GlStateManager.rotate(36F + (MekanismClient.ticksPassed + partialTick) * 4, 0, 1, 1);
core.render(0.0625F);
MekanismRenderer.resetColor();
GlStateManager.popMatrix();
MekanismRenderer.glowOff();
MekanismRenderer.blendOff();
GlStateManager.popMatrix();
}
MekanismRenderer.machineRenderer.renderTileEntityAt(tileEntity, x, y, z, partialTick, destroyStage);
}
}