package mekanism.client.render.tileentity;
import java.util.HashMap;
import java.util.Map;
import mekanism.client.render.FluidRenderer.RenderData;
import mekanism.client.render.FluidRenderer.ValveRenderData;
import mekanism.client.render.FluidRenderer;
import mekanism.client.render.MekanismRenderer;
import mekanism.client.render.MekanismRenderer.DisplayInteger;
import mekanism.client.render.MekanismRenderer.FluidType;
import mekanism.client.render.MekanismRenderer.Model3D;
import mekanism.common.content.tank.SynchronizedTankData.ValveData;
import mekanism.common.content.tank.TankUpdateProtocol;
import mekanism.common.tile.TileEntityBoilerCasing;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class RenderThermoelectricBoiler extends TileEntitySpecialRenderer<TileEntityBoilerCasing>
{
private static Map<RenderData, DisplayInteger[]> cachedLowerFluids = new HashMap<RenderData, DisplayInteger[]>();
private static Map<RenderData, DisplayInteger> cachedUpperFluids = new HashMap<RenderData, DisplayInteger>();
private static Map<ValveRenderData, DisplayInteger> cachedValveFluids = new HashMap<ValveRenderData, DisplayInteger>();
private Fluid STEAM = FluidRegistry.getFluid("steam");
private Fluid WATER = FluidRegistry.WATER;
@Override
public void renderTileEntityAt(TileEntityBoilerCasing tileEntity, double x, double y, double z, float partialTick, int destroyStage)
{
if(tileEntity.clientHasStructure && tileEntity.isRendering && tileEntity.structure != null && tileEntity.structure.renderLocation != null && tileEntity.structure.upperRenderLocation != null)
{
if(tileEntity.structure.waterStored != null && tileEntity.structure.waterStored.amount != 0)
{
RenderData data = new RenderData();
data.location = tileEntity.structure.renderLocation;
data.height = (tileEntity.structure.upperRenderLocation.yCoord-1)-tileEntity.structure.renderLocation.yCoord;
data.length = tileEntity.structure.volLength;
data.width = tileEntity.structure.volWidth;
data.fluidType = WATER;
bindTexture(MekanismRenderer.getBlocksTexture());
if(data.location != null && data.height >= 1 && tileEntity.structure.waterStored.getFluid() != null)
{
FluidRenderer.push();
FluidRenderer.translateToOrigin(data.location);
MekanismRenderer.glowOn(tileEntity.structure.waterStored.getFluid().getLuminosity());
MekanismRenderer.colorFluid(tileEntity.structure.waterStored.getFluid());
if(tileEntity.structure.waterStored.getFluid().isGaseous())
{
GL11.glColor4f(1F, 1F, 1F, Math.min(1, ((float)tileEntity.structure.waterStored.amount / (float)tileEntity.clientWaterCapacity)+MekanismRenderer.GAS_RENDER_BASE));
FluidRenderer.getTankDisplay(data).render();
}
else {
FluidRenderer.getTankDisplay(data, tileEntity.prevWaterScale).render();
}
MekanismRenderer.glowOff();
MekanismRenderer.resetColor();
FluidRenderer.pop();
for(ValveData valveData : tileEntity.valveViewing)
{
FluidRenderer.push();
FluidRenderer.translateToOrigin(valveData.location);
MekanismRenderer.glowOn(tileEntity.structure.waterStored.getFluid().getLuminosity());
FluidRenderer.getValveDisplay(ValveRenderData.get(data, valveData)).render();
MekanismRenderer.glowOff();
MekanismRenderer.resetColor();
FluidRenderer.pop();
}
}
}
if(tileEntity.structure.steamStored != null && tileEntity.structure.steamStored.amount > 0)
{
RenderData data = new RenderData();
data.location = tileEntity.structure.upperRenderLocation;
data.height = (tileEntity.structure.renderLocation.yCoord+tileEntity.structure.volHeight-2)-(tileEntity.structure.upperRenderLocation.yCoord);
data.length = tileEntity.structure.volLength;
data.width = tileEntity.structure.volWidth;
data.fluidType = STEAM;
bindTexture(MekanismRenderer.getBlocksTexture());
if(data.location != null && data.height >= 1 && tileEntity.structure.steamStored.getFluid() != null)
{
FluidRenderer.push();
FluidRenderer.translateToOrigin(data.location);
MekanismRenderer.glowOn(tileEntity.structure.steamStored.getFluid().getLuminosity());
MekanismRenderer.colorFluid(tileEntity.structure.steamStored.getFluid());
DisplayInteger display = FluidRenderer.getTankDisplay(data);
GL11.glColor4f(1F, 1F, 1F, Math.min(1, ((float)tileEntity.structure.steamStored.amount / (float)tileEntity.clientSteamCapacity)+MekanismRenderer.GAS_RENDER_BASE));
display.render();
MekanismRenderer.glowOff();
MekanismRenderer.resetColor();
FluidRenderer.pop();
}
}
}
}
private int getStages(int height)
{
return height*(TankUpdateProtocol.FLUID_PER_TANK/10);
}
}