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 }