package zmaster587.advancedRocketry.client.render; import org.lwjgl.opengl.GL11; import zmaster587.advancedRocketry.tile.TileRocketBuilder; import zmaster587.libVulpes.render.RenderHelper; 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.AxisAlignedBB; import net.minecraft.util.ResourceLocation; public class RendererRocketBuilder extends TileEntitySpecialRenderer { private ResourceLocation grid = new ResourceLocation("advancedrocketry:textures/models/grid.png"); private ResourceLocation girder = new ResourceLocation("advancedrocketry:textures/models/girder.png"); private ResourceLocation round_h = new ResourceLocation("advancedrocketry:textures/models/round_h.png"); @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) { TileRocketBuilder renderTile = (TileRocketBuilder)tile; AxisAlignedBB bb; //If the rocketbuilder is scanning and a valid bounding box for the rocket exists if(renderTile.isScanning() && (bb = renderTile.getBBCache()) != null) { double xOffset = bb.minX - tile.xCoord; double yOffset = bb.maxY - tile.yCoord + 1; double zOffset = bb.minZ - tile.zCoord; //Get size of the BB double xSize = bb.maxX - bb.minX+1; double zSize = bb.maxZ - bb.minZ+1; double yLocation = -(bb.maxY - bb.minY + 1.12)*renderTile.getNormallizedProgress(); Tessellator tess = Tessellator.instance; double xMin = xOffset; double yMin = yOffset + yLocation; double zMin = zOffset; double xMax = xOffset + 0.5; double yMax = yOffset + yLocation+ 0.25; double zMax = zOffset + zSize; double uMin = 0; double vMin = 0; double uMax = 1; double vMax = 1; GL11.glPushMatrix(); GL11.glTranslated(x,y,z); //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); //Draw Supports GL11.glColor4f(0.78f, 0.5f, 0.34f, 1f); bindTexture(girder); GL11.glDepthMask(true); tess.startDrawingQuads(); float size = 0.25f; vMax = yMin/size; RenderHelper.renderCubeWithUV(tess, xOffset, 0d, zOffset, xOffset + size, yOffset + yLocation, zOffset + size, uMin, uMax, 0d, vMax); RenderHelper.renderCubeWithUV(tess, xOffset + xSize - size, 0d, zOffset, xOffset + xSize , yOffset + yLocation, zOffset + size, uMin, uMax, vMin, vMax); RenderHelper.renderCubeWithUV(tess, xOffset + xSize - size, 0d, zOffset + zSize - size, xOffset + xSize, yOffset + yLocation, zOffset + zSize, uMin, uMax, vMin, vMax); RenderHelper.renderCubeWithUV(tess, xOffset, 0d, zOffset + zSize - size, xOffset + size, yOffset + yLocation, zOffset + zSize, uMin, uMax, vMin, vMax); tess.draw(); //Draw scanning grid GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_FOG); GL11.glEnable(GL11.GL_BLEND); if(renderTile.isBuilding()) GL11.glColor4f(1, 0.5f, 0.5f, .05f); else GL11.glColor4f(0.5f, 1, 0.5f, .05f); GL11.glDepthMask(false); GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.0f); GL11.glBlendFunc( GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA ); bindTexture(grid); float min = 0; float maxU = (float)(1*xSize); float maxV = (float)(1*zSize); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 0xf0, 0xf0); tess.startDrawing(7); for(int i = 0; i < 20; i++) { //BOTTOM double offset = i/80d; tess.addVertexWithUV(xOffset, yOffset + yLocation+offset, zOffset, min ,min); tess.addVertexWithUV(xOffset + xSize, yOffset + yLocation+offset, zOffset, maxU, min); tess.addVertexWithUV(xOffset + xSize, yOffset + yLocation+offset, zOffset + zSize,maxU , maxV); tess.addVertexWithUV(xOffset, yOffset + yLocation+offset, zOffset + zSize,min, maxV); //TOP tess.addVertexWithUV(xOffset + xSize, yOffset + yLocation+offset, zOffset,maxU, min); tess.addVertexWithUV(xOffset, yOffset + yLocation+offset, zOffset, min ,min); tess.addVertexWithUV(xOffset, yOffset + yLocation+offset, zOffset + zSize,min, maxV); tess.addVertexWithUV(xOffset + xSize, yOffset + yLocation+offset, zOffset + zSize,maxU , maxV); } tess.draw(); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_FOG); GL11.glDepthMask(true); GL11.glColor4f(1f, 1f, 1f, 1f); bindTexture(round_h); uMax = 1f; vMax = 1f; //Draw "beam emitters" //West block OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightX, brightY); tess.startDrawingQuads(); RenderHelper.renderBottomFaceWithUV(tess, yMin, xMin, zMin, xMax, zMax, uMin, uMax, vMin, vMax); RenderHelper.renderWestFaceWithUV(tess, xMin, yMin, zMin, yMax, zMax, uMin, uMax, vMin, vMax); RenderHelper.renderSouthFaceWithUV(tess, zMax, xMin, yMin, xMax, yMax, uMin, uMax, vMin, vMax); RenderHelper.renderNorthFaceWithUV(tess, zMin, xMin, yMin, xMax, yMax, uMin, uMax, vMin, vMax); RenderHelper.renderTopFaceWithUV(tess, yMax, xMin, zMin, xMax, zMax, uMin, uMax, vMin, vMax); tess.draw(); GL11.glDisable(GL11.GL_TEXTURE_2D); //Set ignore light then draw the glowy bits OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 0xf0, 0xf0); tess.startDrawingQuads(); if(renderTile.isBuilding()) GL11.glColor4f(3f, 1f, 1f, 1f); else GL11.glColor4f(1f, 3f, 1f, 1f); RenderHelper.renderEastFace(tess, xMax, yMin, zMin, yMax, zMax); //Change mins/maxes then render east block xMin = xOffset + xSize - 0.5; xMax = xOffset + xSize; RenderHelper.renderWestFace(tess, xMin, yMin, zMin, yMax, zMax); tess.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightX, brightY); GL11.glColor4f(1f, 1f, 1f, 1f); tess.startDrawingQuads(); RenderHelper.renderBottomFaceWithUV(tess, yMin, xMin, zMin, xMax, zMax, uMin, uMax, vMin, vMax); RenderHelper.renderEastFaceWithUV(tess, xMax, yMin, zMin, yMax, zMax, uMin, uMax, vMin, vMax); RenderHelper.renderSouthFaceWithUV(tess, zMax, xMin, yMin, xMax, yMax, uMin, uMax, vMin, vMax); RenderHelper.renderNorthFaceWithUV(tess, zMin, xMin, yMin, xMax, yMax, uMin, uMax, vMin, vMax); RenderHelper.renderTopFaceWithUV(tess, yMax, xMin, zMin, xMax, zMax, uMin, uMax, vMin, vMax); tess.draw(); GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.1f); GL11.glDepthMask(false); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glPopMatrix(); } } }