001 package net.minecraft.client.gui.achievement;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.client.Minecraft;
006 import net.minecraft.client.gui.Gui;
007 import net.minecraft.client.gui.ScaledResolution;
008 import net.minecraft.client.renderer.RenderHelper;
009 import net.minecraft.client.renderer.entity.RenderItem;
010 import net.minecraft.stats.Achievement;
011 import net.minecraft.util.StatCollector;
012 import org.lwjgl.opengl.GL11;
013 import org.lwjgl.opengl.GL12;
014
015 @SideOnly(Side.CLIENT)
016 public 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 }