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