package micdoodle8.mods.galacticraft.core.client.screen; import micdoodle8.mods.galacticraft.api.client.IGameScreen; import micdoodle8.mods.galacticraft.api.client.IScreenManager; import micdoodle8.mods.galacticraft.core.Constants; import micdoodle8.mods.galacticraft.core.GalacticraftCore; import micdoodle8.mods.galacticraft.core.client.render.RenderPlanet; import micdoodle8.mods.galacticraft.core.network.PacketSimple; import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore; import micdoodle8.mods.galacticraft.core.util.GCCoreUtil; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.client.FMLClientHandler; import org.lwjgl.opengl.GL11; public class GameScreenBasic implements IGameScreen { private TextureManager renderEngine; private float frameA; private float frameBx; private float frameBy; private float textureAx = 0F; private float textureAy = 0F; private float textureBx = 1.0F; private float textureBy = 1.0F; public GameScreenBasic() { //This can be called from either server or client, so don't include //client-side only code on the server. if (GCCoreUtil.getEffectiveSide().isClient()) { renderEngine = FMLClientHandler.instance().getClient().renderEngine; } } @Override public void setFrameSize(float frameSize) { this.frameA = frameSize; } @Override public void render(int type, float ticks, float scaleX, float scaleY, IScreenManager scr) { frameBx = scaleX - frameA; frameBy = scaleY - frameA; if (scaleX == scaleY) { textureAx = 0F; textureAy = 0F; textureBx = 1.0F; textureBy = 1.0F; } else if (scaleX < scaleY) { textureAx = (1.0F - (scaleX / scaleY)) / 2; textureAy = 0F; textureBx = 1.0F - textureAx; textureBy = 1.0F; } else if (scaleY < scaleX) { textureAx = 0F; textureAy = (1.0F - (scaleY / scaleX)) / 2; textureBx = 1.0F; textureBy = 1.0F - textureAy; } switch (type) { case 0: drawBlackBackground(0.09F); // ClientProxyCore.overworldTextureLocal = null; break; case 1: if (scr instanceof DrawGameScreen && ((DrawGameScreen) scr).mapDone) { GL11.glBindTexture(GL11.GL_TEXTURE_2D, DrawGameScreen.reusableMap.getGlTextureId()); draw2DTexture(); } else if (ClientProxyCore.overworldTexturesValid) { GL11.glPushMatrix(); float centreX = scaleX / 2; float centreY = scaleY / 2; GL11.glTranslatef(centreX, centreY, 0F); RenderPlanet.renderPlanet(ClientProxyCore.overworldTextureWide.getGlTextureId(), Math.min(scaleX, scaleY) - 0.2F, ticks, 45F); GL11.glPopMatrix(); } else { this.renderEngine.bindTexture(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")); if (!ClientProxyCore.overworldTextureRequestSent) { GalacticraftCore.packetPipeline.sendToServer(new PacketSimple(PacketSimple.EnumSimplePacket.S_REQUEST_OVERWORLD_IMAGE, GCCoreUtil.getDimensionID(FMLClientHandler.instance().getClient().theWorld), new Object[] {})); ClientProxyCore.overworldTextureRequestSent = true; } draw2DTexture(); } break; } } private void draw2DTexture() { final Tessellator tess = Tessellator.getInstance(); WorldRenderer worldRenderer = tess.getWorldRenderer(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); worldRenderer.pos(frameA, frameBy, 0F).tex(textureAx, textureBy).endVertex(); worldRenderer.pos(frameBx, frameBy, 0F).tex(textureBx, textureBy).endVertex(); worldRenderer.pos(frameBx, frameA, 0F).tex(textureBx, textureAy).endVertex(); worldRenderer.pos(frameA, frameA, 0F).tex(textureAx, textureAy).endVertex(); tess.draw(); } private void drawBlackBackground(float greyLevel) { GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_TEXTURE_2D); final Tessellator tess = Tessellator.getInstance(); WorldRenderer worldRenderer = tess.getWorldRenderer(); GL11.glColor4f(greyLevel, greyLevel, greyLevel, 1.0F); worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); worldRenderer.pos(frameA, frameBy, 0.005F).endVertex(); worldRenderer.pos(frameBx, frameBy, 0.005F).endVertex(); worldRenderer.pos(frameBx, frameA, 0.005F).endVertex(); worldRenderer.pos(frameA, frameA, 0.005F).endVertex(); tess.draw(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glEnable(GL11.GL_TEXTURE_2D); } }