/*
* 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.client.render.RenderFakeBlock.RenderInfo;
import mods.railcraft.common.blocks.machine.gamma.EnumMachineGamma;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import org.lwjgl.opengl.GL11;
import mods.railcraft.common.blocks.machine.gamma.TileLiquidLoader;
import mods.railcraft.common.blocks.machine.gamma.TileLoaderLiquidBase;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.IIcon;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class RenderLiquidLoader extends TileEntitySpecialRenderer {
private static final float PIPE_OFFSET = 5 * RenderTools.PIXEL;
private static final RenderInfo backDrop = new RenderInfo();
private static final RenderInfo pipe = new RenderInfo();
public RenderLiquidLoader() {
backDrop.minX = 0.011f;
backDrop.minY = 0.01f;
backDrop.minZ = 0.011f;
backDrop.maxX = 0.989f;
backDrop.maxY = 0.99f;
backDrop.maxZ = 0.989f;
pipe.texture = EnumMachineGamma.pipeTexture;
pipe.minX = PIPE_OFFSET;
pipe.minZ = PIPE_OFFSET;
pipe.maxX = 1 - PIPE_OFFSET;
pipe.maxY = RenderTools.PIXEL;
pipe.maxZ = 1 - PIPE_OFFSET;
backDrop.texture = new IIcon[1];
}
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) {
TileLoaderLiquidBase base = (TileLoaderLiquidBase) tile;
GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_BLEND);
// GL11.glEnable(GL11.GL_CULL_FACE);
backDrop.texture[0] = base.getMachineType().getTexture(7);
bindTexture(TextureMap.locationBlocksTexture);
RenderFakeBlock.renderBlock(backDrop, base.getWorld(), x, y, z, false, true);
GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F);
GL11.glScalef(1f, 0.6f, 1f);
IFluidTank tank = base.getTankManager().get(0);
FluidStack fluidStack = tank.getFluid();
if (fluidStack != null && fluidStack.amount > 0) {
int[] displayLists = FluidRenderer.getLiquidDisplayLists(fluidStack);
if (displayLists != null) {
GL11.glPushMatrix();
if (FluidRenderer.getFluidTexture(fluidStack, false) != null) {
float cap = tank.getCapacity();
float level = (float) Math.min(fluidStack.amount, cap) / cap;
bindTexture(FluidRenderer.getFluidSheet(fluidStack));
FluidRenderer.setColorForFluidStack(fluidStack);
GL11.glCallList(displayLists[(int) (level * (float) (FluidRenderer.DISPLAY_STAGES - 1))]);
}
GL11.glPopMatrix();
}
}
// GL11.glScalef(0.994f, 1.05f, 0.994f);
GL11.glPopAttrib();
GL11.glPopMatrix();
if (tile.getClass() == TileLiquidLoader.class) {
TileLiquidLoader loader = (TileLiquidLoader) tile;
pipe.minY = RenderTools.PIXEL - loader.getPipeLenght();
RenderFakeBlock.renderBlock(pipe, loader.getWorld(), x, y, z, false, true);
}
}
}