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 }