package net.minecraft.client.gui.achievement;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.stats.Achievement;
import net.minecraft.util.StatCollector;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
@SideOnly(Side.CLIENT)
public class GuiAchievement extends Gui
{
/** Holds the instance of the game (Minecraft) */
private Minecraft theGame;
/** Holds the latest width scaled to fit the game window. */
private int achievementWindowWidth;
/** Holds the latest height scaled to fit the game window. */
private int achievementWindowHeight;
private String achievementGetLocalText;
private String achievementStatName;
/** Holds the achievement that will be displayed on the GUI. */
private Achievement theAchievement;
private long achievementTime;
/**
* Holds a instance of RenderItem, used to draw the achievement icons on screen (is based on ItemStack)
*/
private RenderItem itemRender;
private boolean haveAchiement;
public GuiAchievement(Minecraft par1Minecraft)
{
this.theGame = par1Minecraft;
this.itemRender = new RenderItem();
}
/**
* Queue a taken achievement to be displayed.
*/
public void queueTakenAchievement(Achievement par1Achievement)
{
this.achievementGetLocalText = StatCollector.translateToLocal("achievement.get");
this.achievementStatName = StatCollector.translateToLocal(par1Achievement.getName());
this.achievementTime = Minecraft.getSystemTime();
this.theAchievement = par1Achievement;
this.haveAchiement = false;
}
/**
* Queue a information about a achievement to be displayed.
*/
public void queueAchievementInformation(Achievement par1Achievement)
{
this.achievementGetLocalText = StatCollector.translateToLocal(par1Achievement.getName());
this.achievementStatName = par1Achievement.getDescription();
this.achievementTime = Minecraft.getSystemTime() - 2500L;
this.theAchievement = par1Achievement;
this.haveAchiement = true;
}
/**
* Update the display of the achievement window to match the game window.
*/
private void updateAchievementWindowScale()
{
GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
this.achievementWindowWidth = this.theGame.displayWidth;
this.achievementWindowHeight = this.theGame.displayHeight;
ScaledResolution var1 = new ScaledResolution(this.theGame.gameSettings, this.theGame.displayWidth, this.theGame.displayHeight);
this.achievementWindowWidth = var1.getScaledWidth();
this.achievementWindowHeight = var1.getScaledHeight();
GL11.glClear(256);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0.0D, (double)this.achievementWindowWidth, (double)this.achievementWindowHeight, 0.0D, 1000.0D, 3000.0D);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
}
/**
* Updates the small achievement tooltip window, showing a queued achievement if is needed.
*/
public void updateAchievementWindow()
{
if (this.theAchievement != null && this.achievementTime != 0L)
{
double var1 = (double)(Minecraft.getSystemTime() - this.achievementTime) / 3000.0D;
if (!this.haveAchiement && (var1 < 0.0D || var1 > 1.0D))
{
this.achievementTime = 0L;
}
else
{
this.updateAchievementWindowScale();
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
double var3 = var1 * 2.0D;
if (var3 > 1.0D)
{
var3 = 2.0D - var3;
}
var3 *= 4.0D;
var3 = 1.0D - var3;
if (var3 < 0.0D)
{
var3 = 0.0D;
}
var3 *= var3;
var3 *= var3;
int var5 = this.achievementWindowWidth - 160;
int var6 = 0 - (int)(var3 * 36.0D);
int var7 = this.theGame.renderEngine.getTexture("/achievement/bg.png");
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, var7);
GL11.glDisable(GL11.GL_LIGHTING);
this.drawTexturedModalRect(var5, var6, 96, 202, 160, 32);
if (this.haveAchiement)
{
this.theGame.fontRenderer.drawSplitString(this.achievementStatName, var5 + 30, var6 + 7, 120, -1);
}
else
{
this.theGame.fontRenderer.drawString(this.achievementGetLocalText, var5 + 30, var6 + 7, -256);
this.theGame.fontRenderer.drawString(this.achievementStatName, var5 + 30, var6 + 18, -1);
}
RenderHelper.enableGUIStandardItemLighting();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glEnable(GL11.GL_COLOR_MATERIAL);
GL11.glEnable(GL11.GL_LIGHTING);
this.itemRender.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.renderEngine, this.theAchievement.theItemStack, var5 + 8, var6 + 8);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
}
}
}