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.GL11;
007    import org.lwjgl.opengl.GL12;
008    
009    @SideOnly(Side.CLIENT)
010    public class GuiAchievement extends Gui
011    {
012        /** Holds the instance of the game (Minecraft) */
013        private Minecraft theGame;
014    
015        /** Holds the latest width scaled to fit the game window. */
016        private int achievementWindowWidth;
017    
018        /** Holds the latest height scaled to fit the game window. */
019        private int achievementWindowHeight;
020        private String achievementGetLocalText;
021        private String achievementStatName;
022    
023        /** Holds the achievement that will be displayed on the GUI. */
024        private Achievement theAchievement;
025        private long achievementTime;
026    
027        /**
028         * Holds a instance of RenderItem, used to draw the achievement icons on screen (is based on ItemStack)
029         */
030        private RenderItem itemRender;
031        private boolean haveAchiement;
032    
033        public GuiAchievement(Minecraft par1Minecraft)
034        {
035            this.theGame = par1Minecraft;
036            this.itemRender = new RenderItem();
037        }
038    
039        /**
040         * Queue a taken achievement to be displayed.
041         */
042        public void queueTakenAchievement(Achievement par1Achievement)
043        {
044            this.achievementGetLocalText = StatCollector.translateToLocal("achievement.get");
045            this.achievementStatName = StatCollector.translateToLocal(par1Achievement.getName());
046            this.achievementTime = Minecraft.getSystemTime();
047            this.theAchievement = par1Achievement;
048            this.haveAchiement = false;
049        }
050    
051        /**
052         * Queue a information about a achievement to be displayed.
053         */
054        public void queueAchievementInformation(Achievement par1Achievement)
055        {
056            this.achievementGetLocalText = StatCollector.translateToLocal(par1Achievement.getName());
057            this.achievementStatName = par1Achievement.getDescription();
058            this.achievementTime = Minecraft.getSystemTime() - 2500L;
059            this.theAchievement = par1Achievement;
060            this.haveAchiement = true;
061        }
062    
063        /**
064         * Update the display of the achievement window to match the game window.
065         */
066        private void updateAchievementWindowScale()
067        {
068            GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight);
069            GL11.glMatrixMode(GL11.GL_PROJECTION);
070            GL11.glLoadIdentity();
071            GL11.glMatrixMode(GL11.GL_MODELVIEW);
072            GL11.glLoadIdentity();
073            this.achievementWindowWidth = this.theGame.displayWidth;
074            this.achievementWindowHeight = this.theGame.displayHeight;
075            ScaledResolution var1 = new ScaledResolution(this.theGame.gameSettings, this.theGame.displayWidth, this.theGame.displayHeight);
076            this.achievementWindowWidth = var1.getScaledWidth();
077            this.achievementWindowHeight = var1.getScaledHeight();
078            GL11.glClear(256);
079            GL11.glMatrixMode(GL11.GL_PROJECTION);
080            GL11.glLoadIdentity();
081            GL11.glOrtho(0.0D, (double)this.achievementWindowWidth, (double)this.achievementWindowHeight, 0.0D, 1000.0D, 3000.0D);
082            GL11.glMatrixMode(GL11.GL_MODELVIEW);
083            GL11.glLoadIdentity();
084            GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
085        }
086    
087        /**
088         * Updates the small achievement tooltip window, showing a queued achievement if is needed.
089         */
090        public void updateAchievementWindow()
091        {
092            if (this.theAchievement != null && this.achievementTime != 0L)
093            {
094                double var1 = (double)(Minecraft.getSystemTime() - this.achievementTime) / 3000.0D;
095    
096                if (!this.haveAchiement && (var1 < 0.0D || var1 > 1.0D))
097                {
098                    this.achievementTime = 0L;
099                }
100                else
101                {
102                    this.updateAchievementWindowScale();
103                    GL11.glDisable(GL11.GL_DEPTH_TEST);
104                    GL11.glDepthMask(false);
105                    double var3 = var1 * 2.0D;
106    
107                    if (var3 > 1.0D)
108                    {
109                        var3 = 2.0D - var3;
110                    }
111    
112                    var3 *= 4.0D;
113                    var3 = 1.0D - var3;
114    
115                    if (var3 < 0.0D)
116                    {
117                        var3 = 0.0D;
118                    }
119    
120                    var3 *= var3;
121                    var3 *= var3;
122                    int var5 = this.achievementWindowWidth - 160;
123                    int var6 = 0 - (int)(var3 * 36.0D);
124                    int var7 = this.theGame.renderEngine.getTexture("/achievement/bg.png");
125                    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
126                    GL11.glEnable(GL11.GL_TEXTURE_2D);
127                    GL11.glBindTexture(GL11.GL_TEXTURE_2D, var7);
128                    GL11.glDisable(GL11.GL_LIGHTING);
129                    this.drawTexturedModalRect(var5, var6, 96, 202, 160, 32);
130    
131                    if (this.haveAchiement)
132                    {
133                        this.theGame.fontRenderer.drawSplitString(this.achievementStatName, var5 + 30, var6 + 7, 120, -1);
134                    }
135                    else
136                    {
137                        this.theGame.fontRenderer.drawString(this.achievementGetLocalText, var5 + 30, var6 + 7, -256);
138                        this.theGame.fontRenderer.drawString(this.achievementStatName, var5 + 30, var6 + 18, -1);
139                    }
140    
141                    RenderHelper.enableGUIStandardItemLighting();
142                    GL11.glDisable(GL11.GL_LIGHTING);
143                    GL11.glEnable(GL12.GL_RESCALE_NORMAL);
144                    GL11.glEnable(GL11.GL_COLOR_MATERIAL);
145                    GL11.glEnable(GL11.GL_LIGHTING);
146                    this.itemRender.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.renderEngine, this.theAchievement.theItemStack, var5 + 8, var6 + 8);
147                    GL11.glDisable(GL11.GL_LIGHTING);
148                    GL11.glDepthMask(true);
149                    GL11.glEnable(GL11.GL_DEPTH_TEST);
150                }
151            }
152        }
153    }