package net.minecraft.src;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiOptionButton;
import net.minecraft.client.gui.GuiOptionSlider;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiVideoSettings;
import net.minecraft.client.gui.GuiYesNo;
import net.minecraft.client.gui.GuiYesNoCallback;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.GameSettings;
public class GuiOtherSettingsOF extends GuiScreen implements GuiYesNoCallback
{
private GuiScreen prevScreen;
protected String title = "Other Settings";
private GameSettings settings;
private static GameSettings.Options[] enumOptions = new GameSettings.Options[] {GameSettings.Options.LAGOMETER, GameSettings.Options.PROFILER, GameSettings.Options.WEATHER, GameSettings.Options.TIME, GameSettings.Options.USE_FULLSCREEN, GameSettings.Options.FULLSCREEN_MODE, GameSettings.Options.AUTOSAVE_TICKS};
private int lastMouseX = 0;
private int lastMouseY = 0;
private long mouseStillTime = 0L;
public GuiOtherSettingsOF(GuiScreen guiscreen, GameSettings gamesettings)
{
this.prevScreen = guiscreen;
this.settings = gamesettings;
}
/**
* Adds the buttons (and other controls) to the screen in question.
*/
public void initGui()
{
int i = 0;
GameSettings.Options[] aenumoptions = enumOptions;
int j = aenumoptions.length;
for (int k = 0; k < j; ++k)
{
GameSettings.Options enumoptions = aenumoptions[k];
int x = this.width / 2 - 155 + i % 2 * 160;
int y = this.height / 6 + 21 * (i / 2) - 10;
if (!enumoptions.getEnumFloat())
{
this.buttonList.add(new GuiOptionButton(enumoptions.returnEnumOrdinal(), x, y, enumoptions, this.settings.getKeyBinding(enumoptions)));
}
else
{
this.buttonList.add(new GuiOptionSlider(enumoptions.returnEnumOrdinal(), x, y, enumoptions));
}
++i;
}
this.buttonList.add(new GuiButton(210, this.width / 2 - 100, this.height / 6 + 168 + 11 - 44, "Reset Video Settings..."));
this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168 + 11, I18n.format("gui.done", new Object[0])));
}
protected void actionPerformed(GuiButton guibutton)
{
if (guibutton.enabled)
{
if (guibutton.id < 200 && guibutton instanceof GuiOptionButton)
{
this.settings.setOptionValue(((GuiOptionButton)guibutton).returnEnumOptions(), 1);
guibutton.displayString = this.settings.getKeyBinding(GameSettings.Options.getEnumOptions(guibutton.id));
}
if (guibutton.id == 200)
{
this.mc.gameSettings.saveOptions();
this.mc.displayGuiScreen(this.prevScreen);
}
if (guibutton.id == 210)
{
this.mc.gameSettings.saveOptions();
GuiYesNo scaledresolution = new GuiYesNo(this, "Reset all video settings to their default values?", "", 9999);
this.mc.displayGuiScreen(scaledresolution);
}
if (guibutton.id != GameSettings.Options.CLOUD_HEIGHT.ordinal())
{
ScaledResolution scaledresolution1 = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight);
int i = scaledresolution1.getScaledWidth();
int j = scaledresolution1.getScaledHeight();
this.setWorldAndResolution(this.mc, i, j);
}
}
}
public void confirmClicked(boolean flag, int i)
{
if (flag)
{
this.mc.gameSettings.resetSettings();
}
this.mc.displayGuiScreen(this);
}
/**
* Draws the screen and all the components in it. Args : mouseX, mouseY, renderPartialTicks
*/
public void drawScreen(int x, int y, float f)
{
this.drawDefaultBackground();
this.drawCenteredString(this.fontRendererObj, this.title, this.width / 2, 20, 16777215);
super.drawScreen(x, y, f);
if (Math.abs(x - this.lastMouseX) <= 5 && Math.abs(y - this.lastMouseY) <= 5)
{
short activateDelay = 700;
if (System.currentTimeMillis() >= this.mouseStillTime + (long)activateDelay)
{
int x1 = this.width / 2 - 150;
int y1 = this.height / 6 - 5;
if (y <= y1 + 98)
{
y1 += 105;
}
int x2 = x1 + 150 + 150;
int y2 = y1 + 84 + 10;
GuiButton btn = this.getSelectedButton(x, y);
if (btn != null)
{
String s = this.getButtonName(btn.displayString);
String[] lines = this.getTooltipLines(s);
if (lines == null)
{
return;
}
this.drawGradientRect(x1, y1, x2, y2, -536870912, -536870912);
for (int i = 0; i < lines.length; ++i)
{
String line = lines[i];
this.fontRendererObj.func_175063_a(line, (float)(x1 + 5), (float)(y1 + 5 + i * 11), 14540253);
}
}
}
}
else
{
this.lastMouseX = x;
this.lastMouseY = y;
this.mouseStillTime = System.currentTimeMillis();
}
}
private String[] getTooltipLines(String btnName)
{
return btnName.equals("Autosave") ? new String[] {"Autosave interval", "Default autosave interval (2s) is NOT RECOMMENDED.", "Autosave causes the famous Lag Spike of Death."}: (btnName.equals("Lagometer") ? new String[] {"Shows the lagometer on the debug screen (F3).", "* Orange - Memory garbage collection", "* Cyan - Tick", "* Blue - Scheduled executables", "* Purple - Chunk upload", "* Red - Chunk updates", "* Yellow - Visibility check", "* Green - Render terrain"}: (btnName.equals("Debug Profiler") ? new String[] {"Debug Profiler", " ON - debug profiler is active, slower", " OFF - debug profiler is not active, faster", "The debug profiler collects and shows debug information", "when the debug screen is open (F3)"}: (btnName.equals("Time") ? new String[] {"Time", " Default - normal day/night cycles", " Day Only - day only", " Night Only - night only", "The time setting is only effective in CREATIVE mode", "and for local worlds."}: (btnName.equals("Weather") ? new String[] {"Weather", " ON - weather is active, slower", " OFF - weather is not active, faster", "The weather controls rain, snow and thunderstorms.", "Weather control is only possible for local worlds."}: (btnName.equals("Fullscreen") ? new String[] {"Fullscreen", " ON - use fullscreen mode", " OFF - use window mode", "Fullscreen mode may be faster or slower than", "window mode, depending on the graphics card."}: (btnName.equals("Fullscreen Mode") ? new String[] {"Fullscreen mode", " Default - use desktop screen resolution, slower", " WxH - use custom screen resolution, may be faster", "The selected resolution is used in fullscreen mode (F11).", "Lower resolutions should generally be faster."}: (btnName.equals("3D Anaglyph") ? new String[] {"3D mode used with red-cyan 3D glasses."}: null)))))));
}
private String getButtonName(String displayString)
{
int pos = displayString.indexOf(58);
return pos < 0 ? displayString : displayString.substring(0, pos);
}
private GuiButton getSelectedButton(int i, int j)
{
for (int k = 0; k < this.buttonList.size(); ++k)
{
GuiButton btn = (GuiButton)this.buttonList.get(k);
int btnWidth = GuiVideoSettings.getButtonWidth(btn);
int btnHeight = GuiVideoSettings.getButtonHeight(btn);
boolean flag = i >= btn.xPosition && j >= btn.yPosition && i < btn.xPosition + btnWidth && j < btn.yPosition + btnHeight;
if (flag)
{
return btn;
}
}
return null;
}
}