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 }