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