001 package net.minecraft.src;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005
006 @SideOnly(Side.CLIENT)
007 public class GuiOptions extends GuiScreen
008 {
009 /**
010 * An array of options that can be changed directly from the options GUI.
011 */
012 private static final EnumOptions[] relevantOptions = new EnumOptions[] {EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY};
013
014 /**
015 * A reference to the screen object that created this. Used for navigating between screens.
016 */
017 private final GuiScreen parentScreen;
018
019 /** Reference to the GameSettings object. */
020 private final GameSettings options;
021
022 /** The title string that is displayed in the top-center of the screen. */
023 protected String screenTitle = "Options";
024
025 public GuiOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings)
026 {
027 this.parentScreen = par1GuiScreen;
028 this.options = par2GameSettings;
029 }
030
031 /**
032 * Adds the buttons (and other controls) to the screen in question.
033 */
034 public void initGui()
035 {
036 StringTranslate var1 = StringTranslate.getInstance();
037 int var2 = 0;
038 this.screenTitle = var1.translateKey("options.title");
039 EnumOptions[] var3 = relevantOptions;
040 int var4 = var3.length;
041
042 for (int var5 = 0; var5 < var4; ++var5)
043 {
044 EnumOptions var6 = var3[var5];
045
046 if (var6.getEnumFloat())
047 {
048 this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6)));
049 }
050 else
051 {
052 GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6));
053
054 if (var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled())
055 {
056 var7.enabled = false;
057 var7.displayString = StatCollector.translateToLocal("options.difficulty") + ": " + StatCollector.translateToLocal("options.difficulty.hardcore");
058 }
059
060 this.controlList.add(var7);
061 }
062
063 ++var2;
064 }
065
066 this.controlList.add(new GuiButton(101, this.width / 2 - 152, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.video")));
067 this.controlList.add(new GuiButton(100, this.width / 2 + 2, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.controls")));
068 this.controlList.add(new GuiButton(102, this.width / 2 - 152, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.language")));
069 this.controlList.add(new GuiButton(103, this.width / 2 + 2, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.chat.title")));
070 this.controlList.add(new GuiButton(104, this.width / 2 + 2, this.height / 6 + 144 - 6, 150, 20, var1.translateKey("options.snooper.view")));
071 this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done")));
072 }
073
074 /**
075 * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
076 */
077 protected void actionPerformed(GuiButton par1GuiButton)
078 {
079 if (par1GuiButton.enabled)
080 {
081 if (par1GuiButton.id < 100 && par1GuiButton instanceof GuiSmallButton)
082 {
083 this.options.setOptionValue(((GuiSmallButton)par1GuiButton).returnEnumOptions(), 1);
084 par1GuiButton.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(par1GuiButton.id));
085 }
086
087 if (par1GuiButton.id == 101)
088 {
089 this.mc.gameSettings.saveOptions();
090 this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options));
091 }
092
093 if (par1GuiButton.id == 100)
094 {
095 this.mc.gameSettings.saveOptions();
096 this.mc.displayGuiScreen(new GuiControls(this, this.options));
097 }
098
099 if (par1GuiButton.id == 102)
100 {
101 this.mc.gameSettings.saveOptions();
102 this.mc.displayGuiScreen(new GuiLanguage(this, this.options));
103 }
104
105 if (par1GuiButton.id == 103)
106 {
107 this.mc.gameSettings.saveOptions();
108 this.mc.displayGuiScreen(new ScreenChatOptions(this, this.options));
109 }
110
111 if (par1GuiButton.id == 104)
112 {
113 this.mc.gameSettings.saveOptions();
114 this.mc.displayGuiScreen(new GuiSnooper(this, this.options));
115 }
116
117 if (par1GuiButton.id == 200)
118 {
119 this.mc.gameSettings.saveOptions();
120 this.mc.displayGuiScreen(this.parentScreen);
121 }
122 }
123 }
124
125 /**
126 * Draws the screen and all the components in it.
127 */
128 public void drawScreen(int par1, int par2, float par3)
129 {
130 this.drawDefaultBackground();
131 this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215);
132 super.drawScreen(par1, par2, par3);
133 }
134 }