package zmaster587.advancedRocketry.client.render.multiblocks;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import zmaster587.libVulpes.block.RotatableBlock;
import zmaster587.libVulpes.render.RenderHelper;
import zmaster587.libVulpes.tile.multiblock.TileMultiblockMachine;
public class RendererElectrolyser extends TileEntitySpecialRenderer{
IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("advancedrocketry:models/electrolyser.obj"));
ResourceLocation texture = new ResourceLocation("advancedrocketry:textures/models/electrolyser.png");
@Override
public void renderTileEntityAt(TileEntity tile, double x,
double y, double z, float f) {
TileMultiblockMachine multiBlockTile = (TileMultiblockMachine)tile;
if(!multiBlockTile.canRender())
return;
GL11.glPushMatrix();
//Initial setup
int bright = tile.getWorldObj().getLightBrightnessForSkyBlocks(tile.xCoord, tile.yCoord + 1, tile.zCoord,0);
int brightX = bright % 65536;
int brightY = bright / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightX, brightY);
//Rotate and move the model into position
GL11.glTranslated(x+.5f, y, z + 0.5f);
ForgeDirection front = RotatableBlock.getFront(tile.getBlockMetadata());
GL11.glRotatef((front.offsetZ == 1 ? 180 : 0) - front.offsetX*90f, 0, 1, 0);
bindTexture(texture);
model.renderAll();
//Lightning effect
if(multiBlockTile.isRunning()) {
Tessellator tess = Tessellator.instance;
double width = 0.01;
//Isn't precision fun?
double ySkew = 0.1*MathHelper.sin((tile.getWorldObj().getTotalWorldTime() & 0xffff)*2f);
double xSkew = 0.1*MathHelper.sin((200 + tile.getWorldObj().getTotalWorldTime() & 0xffff)*3f);
double yPos = 1.4;
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_SRC_ALPHA);
tess.startDrawingQuads();
tess.setColorRGBA_F(0.64f, 0.64f, 1f, 0.4f);
double xMin = -0.3f;
double xMax = -.15f;
double zMin = 1f;
double zMax = 1;
RenderHelper.renderCrossXZ(tess, width, xMin, yPos, zMin, xMax, yPos + ySkew, zMax + xSkew);
//tess.addVertex(xMin, yMax, zMin);
//tess.addVertex(xMax, yMax + ySkew, zMin);
//tess.addVertex(xMax, yMin + ySkew, zMin);
//tess.addVertex(xMin, yMin, zMin);
xMax += 0.15;
xMin += 0.15;
RenderHelper.renderCrossXZ(tess, width, xMin, yPos + ySkew, zMin + xSkew, xMax, yPos - ySkew, zMax - xSkew);
xMax += 0.15;
xMin += 0.15;
RenderHelper.renderCrossXZ(tess, width, xMin, yPos - ySkew, zMin - xSkew, xMax, yPos + ySkew, zMax + xSkew);
xMax += 0.15;
xMin += 0.15;
RenderHelper.renderCrossXZ(tess, width, xMin, yPos + ySkew, zMin + xSkew, xMax, yPos, zMax);
tess.draw();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_BLEND);
}
GL11.glPopMatrix();
}
}