    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}