001 package net.minecraft.src; 002 003 import cpw.mods.fml.common.Side; 004 import cpw.mods.fml.common.asm.SideOnly; 005 import net.minecraft.client.Minecraft; 006 import org.lwjgl.opengl.Display; 007 import org.lwjgl.opengl.GL11; 008 009 @SideOnly(Side.CLIENT) 010 public class LoadingScreenRenderer implements IProgressUpdate 011 { 012 private String field_73727_a = ""; 013 014 /** A reference to the Minecraft object. */ 015 private Minecraft mc; 016 017 /** 018 * The text currently displayed (i.e. the argument to the last call to printText or func_73722_d) 019 */ 020 private String currentlyDisplayedText = ""; 021 private long field_73723_d = Minecraft.getSystemTime(); 022 private boolean field_73724_e = false; 023 024 public LoadingScreenRenderer(Minecraft par1Minecraft) 025 { 026 this.mc = par1Minecraft; 027 } 028 029 /** 030 * this string, followed by "working..." and then the "% complete" are the 3 lines shown. This resets progress to 0, 031 * and the WorkingString to "working...". 032 */ 033 public void resetProgressAndMessage(String par1Str) 034 { 035 this.field_73724_e = false; 036 this.func_73722_d(par1Str); 037 } 038 039 /** 040 * "Saving level", or the loading,or downloading equivelent 041 */ 042 public void displayProgressMessage(String par1Str) 043 { 044 this.field_73724_e = true; 045 this.func_73722_d(par1Str); 046 } 047 048 public void func_73722_d(String par1Str) 049 { 050 this.currentlyDisplayedText = par1Str; 051 052 if (!this.mc.running) 053 { 054 if (!this.field_73724_e) 055 { 056 throw new MinecraftError(); 057 } 058 } 059 else 060 { 061 ScaledResolution var2 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); 062 GL11.glClear(256); 063 GL11.glMatrixMode(GL11.GL_PROJECTION); 064 GL11.glLoadIdentity(); 065 GL11.glOrtho(0.0D, var2.getScaledWidth_double(), var2.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); 066 GL11.glMatrixMode(GL11.GL_MODELVIEW); 067 GL11.glLoadIdentity(); 068 GL11.glTranslatef(0.0F, 0.0F, -200.0F); 069 } 070 } 071 072 /** 073 * This is called with "Working..." by resetProgressAndMessage 074 */ 075 public void resetProgresAndWorkingMessage(String par1Str) 076 { 077 if (!this.mc.running) 078 { 079 if (!this.field_73724_e) 080 { 081 throw new MinecraftError(); 082 } 083 } 084 else 085 { 086 this.field_73723_d = 0L; 087 this.field_73727_a = par1Str; 088 this.setLoadingProgress(-1); 089 this.field_73723_d = 0L; 090 } 091 } 092 093 /** 094 * Updates the progress bar on the loading screen to the specified amount. Args: loadProgress 095 */ 096 public void setLoadingProgress(int par1) 097 { 098 if (!this.mc.running) 099 { 100 if (!this.field_73724_e) 101 { 102 throw new MinecraftError(); 103 } 104 } 105 else 106 { 107 long var2 = Minecraft.getSystemTime(); 108 109 if (var2 - this.field_73723_d >= 100L) 110 { 111 this.field_73723_d = var2; 112 ScaledResolution var4 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); 113 int var5 = var4.getScaledWidth(); 114 int var6 = var4.getScaledHeight(); 115 GL11.glClear(256); 116 GL11.glMatrixMode(GL11.GL_PROJECTION); 117 GL11.glLoadIdentity(); 118 GL11.glOrtho(0.0D, var4.getScaledWidth_double(), var4.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); 119 GL11.glMatrixMode(GL11.GL_MODELVIEW); 120 GL11.glLoadIdentity(); 121 GL11.glTranslatef(0.0F, 0.0F, -200.0F); 122 GL11.glClear(16640); 123 Tessellator var7 = Tessellator.instance; 124 int var8 = this.mc.renderEngine.getTexture("/gui/background.png"); 125 GL11.glBindTexture(GL11.GL_TEXTURE_2D, var8); 126 float var9 = 32.0F; 127 var7.startDrawingQuads(); 128 var7.setColorOpaque_I(4210752); 129 var7.addVertexWithUV(0.0D, (double)var6, 0.0D, 0.0D, (double)((float)var6 / var9)); 130 var7.addVertexWithUV((double)var5, (double)var6, 0.0D, (double)((float)var5 / var9), (double)((float)var6 / var9)); 131 var7.addVertexWithUV((double)var5, 0.0D, 0.0D, (double)((float)var5 / var9), 0.0D); 132 var7.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); 133 var7.draw(); 134 135 if (par1 >= 0) 136 { 137 byte var10 = 100; 138 byte var11 = 2; 139 int var12 = var5 / 2 - var10 / 2; 140 int var13 = var6 / 2 + 16; 141 GL11.glDisable(GL11.GL_TEXTURE_2D); 142 var7.startDrawingQuads(); 143 var7.setColorOpaque_I(8421504); 144 var7.addVertex((double)var12, (double)var13, 0.0D); 145 var7.addVertex((double)var12, (double)(var13 + var11), 0.0D); 146 var7.addVertex((double)(var12 + var10), (double)(var13 + var11), 0.0D); 147 var7.addVertex((double)(var12 + var10), (double)var13, 0.0D); 148 var7.setColorOpaque_I(8454016); 149 var7.addVertex((double)var12, (double)var13, 0.0D); 150 var7.addVertex((double)var12, (double)(var13 + var11), 0.0D); 151 var7.addVertex((double)(var12 + par1), (double)(var13 + var11), 0.0D); 152 var7.addVertex((double)(var12 + par1), (double)var13, 0.0D); 153 var7.draw(); 154 GL11.glEnable(GL11.GL_TEXTURE_2D); 155 } 156 157 this.mc.fontRenderer.drawStringWithShadow(this.currentlyDisplayedText, (var5 - this.mc.fontRenderer.getStringWidth(this.currentlyDisplayedText)) / 2, var6 / 2 - 4 - 16, 16777215); 158 this.mc.fontRenderer.drawStringWithShadow(this.field_73727_a, (var5 - this.mc.fontRenderer.getStringWidth(this.field_73727_a)) / 2, var6 / 2 - 4 + 8, 16777215); 159 Display.update(); 160 161 try 162 { 163 Thread.yield(); 164 } 165 catch (Exception var14) 166 { 167 ; 168 } 169 } 170 } 171 } 172 173 /** 174 * called when there is no more progress to be had, both on completion and failure 175 */ 176 public void onNoMoreProgress() {} 177 }