Public Class NewOptionScreen Inherits Screen Dim TextSpeed As Integer = 2 Dim CameraSpeed As Integer = 12 Dim FOV As Single = 45.0F Dim Music As Integer = 50 Dim Sound As Integer = 50 Dim RenderDistance As Integer = 0 Dim GraphicStyle As Integer = 1 Dim ShowBattleAnimations As Integer = 1 Dim DiagonalMovement As Boolean = True Dim Difficulty As Integer = 0 Dim BattleStyle As Integer = 0 Dim LoadOffsetMaps As Integer = 1 Dim ViewBobbing As Boolean = True Dim ShowModels As Integer = 1 Dim Muted As Integer = 0 Dim GamePadEnabled As Boolean = True Dim RunMode As Boolean = True Dim PreferMultiSampling As Boolean = True Dim TempMusicVolume As Integer = 50 Dim TempSoundVolume As Integer = 50 Dim TempMuted As Integer = 0 Private _subMenu As Integer = 0 Private _screenSize As Size = New Size(CInt(windowSize.Width), CInt(windowSize.Height)) Private Property SelectPackNoiseDelay As Integer = 10 Private Languages As New List(Of String) Private LanguageNames As New List(Of String) Private currentLanguage As String = Localization.LanguageSuffix Private TempLanguage As String = Localization.LanguageSuffix Public Shared languageMenuIndex(3) As Integer Private PackNames As New List(Of String) Private EnabledPackNames As New List(Of String) Public Shared isSelectedEnabled As Boolean = False Private packsMenuIndex(3) As Integer Private packInfoIndex As Integer = 0 Dim savedOptions As Boolean = True Public Shared ScreenIndex As Integer = 0 Dim _nextIndex As Integer = 0 Dim ControlList As New List(Of Control) 'New stuff ''' ''' Texture from file: GUI\Menus\General ''' Private _texture As Texture2D ''' ''' Texture from file: GUI\Menus\Options ''' Private _menuTexture As Texture2D 'Interface animation state values: Private _interfaceFade As Single = 0F Private _closing As Boolean = False Private _opening As Boolean = False Private _enrollY As Single = 0F Private _itemIntro As Single = 0F Private _pageFade As Single = 1.0F Private _pageOpening As Boolean = False Private _pageClosing As Boolean = False 'cursor animation: Private _cursorPosition As Vector2 = New Vector2(CInt(Core.windowSize.Width / 2) - 400 + 90, CInt(Core.windowSize.Height / 2) - 200 + 80) Private _cursorDestPosition As Vector2 = New Vector2(CInt(Core.windowSize.Width / 2) - 400 + 90, CInt(Core.windowSize.Height / 2) - 200 + 80) Private _selectedScrollBar As Boolean = False Public Sub New(ByVal currentScreen As Screen, Optional ByVal Submenu As Integer = 0) 'New stuff _texture = TextureManager.GetTexture("GUI\Menus\General") _menuTexture = TextureManager.GetTexture("GUI\Menus\Options") ''' Me.Identification = Identifications.OptionScreen Me.PreScreen = currentScreen Me.CanChat = False Me.MouseVisible = True Me.CanBePaused = False Me._opening = True GetLanguages() GetPacks() If Camera Is Nothing Then Camera = New OverworldCamera() End If SetFunctionality() If Submenu > 0 AndAlso PreScreen.Identification = Identifications.MainMenuScreen Then _subMenu = Submenu Select Case _subMenu Case 1 SwitchToLanguage() Case 2 SwitchToAudio() Case 3 SwitchToControls() Case 4 SwitchToContentPacks() End Select Else _subMenu = 0 ScreenIndex = 0 End If End Sub Private Sub SetFunctionality() If PreScreen.Identification <> Identifications.MainMenuScreen Then Camera = CType(Screen.Camera, OverworldCamera) Me.FOV = Camera.FOV Me.TextSpeed = TextBox.TextSpeed Me.CameraSpeed = CInt(Camera.RotationSpeed * 10000) Me.Difficulty = Core.Player.DifficultyMode Me.RunMode = Core.Player.RunMode End If Me.TempMusicVolume = CInt(MusicManager.MasterVolume * 100) Me.TempSoundVolume = CInt(SoundManager.Volume * 100) Me.TempMuted = CInt(MusicManager.Muted.ToNumberString()) Me.Muted = CInt(MusicManager.Muted.ToNumberString()) Me.Music = CInt(MusicManager.MasterVolume * 100) Me.Sound = CInt(SoundManager.Volume * 100) Me.RenderDistance = Core.GameOptions.RenderDistance Me.GraphicStyle = Core.GameOptions.GraphicStyle Me.ShowBattleAnimations = Core.Player.ShowBattleAnimations Me.DiagonalMovement = Core.Player.DiagonalMovement Me.BattleStyle = Core.Player.BattleStyle Me.ShowModels = CInt(Core.Player.ShowModelsInBattle) If Core.GameOptions.LoadOffsetMaps = 0 Then Me.LoadOffsetMaps = 0 Else Me.LoadOffsetMaps = 101 - Core.GameOptions.LoadOffsetMaps End If Me.ViewBobbing = Core.GameOptions.ViewBobbing Me.GamePadEnabled = Core.GameOptions.GamePadEnabled Me.PreferMultiSampling = Core.GraphicsManager.PreferMultiSampling End Sub Public Overrides Sub Draw() PreScreen.Draw() DrawBackground() If ScreenIndex = 6 Then DrawLanguageMenu() End If If ScreenIndex = 7 Then DrawPacksMenu() End If If ScreenIndex = 8 Then DrawPackInformationMenu() End If DrawCurrentPage() DrawCursor() DrawMessage() TextBox.Draw() ChooseBox.Draw() End Sub #Region "LanguageMenu" Private Sub DrawLanguageMenu() For i = 0 To 3 Dim c As Color = New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade)) If i + languageMenuIndex(2) = languageMenuIndex(0) Then c = New Color(77, 147, 198, CInt(255 * _interfaceFade * _pageFade)) End If Canvas.DrawRectangle(New Rectangle(CInt(windowSize.Width / 2 - 258), CInt(Core.windowSize.Height / 2 - 128 + i * 50), 480, 48), c, False) Next Canvas.DrawScrollBar(New Vector2(CInt(windowSize.Width / 2 + 250), CInt(Core.windowSize.Height / 2 - 128)), Languages.Count, 4, languageMenuIndex(2), New Size(4, 200), False, New Color(77, 147, 198, CInt(255 * _interfaceFade * _pageFade)), New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade)), False) Dim x As Integer = Languages.Count - 1 x = CInt(MathHelper.Clamp(x, 0, 3)) For i = 0 To x Dim Name As String = LanguageNames(i + languageMenuIndex(2)) If i + languageMenuIndex(2) = languageMenuIndex(0) Then SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2 - 246), CInt(Core.windowSize.Height / 2 - 128 + 8 + 2 + i * 50)), New Color(0, 0, 0, CInt(255 * _interfaceFade * _pageFade))) SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2 - 248), CInt(Core.windowSize.Height / 2 - 128 + 8 + i * 50)), New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade))) Else SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2 - 248), CInt(Core.windowSize.Height / 2 - 128 + 8 + i * 50)), New Color(0, 0, 0, CInt(255 * _interfaceFade * _pageFade))) End If Next End Sub Private Sub UpdateLanguageMenu() Dim currentIndex As Integer = languageMenuIndex(0) If Controls.Up(True, True, True) = True Then languageMenuIndex(0) -= 1 If languageMenuIndex(0) - languageMenuIndex(2) < 0 Then languageMenuIndex(2) -= 1 End If End If If Controls.Down(True, True, True) = True Then languageMenuIndex(0) += 1 If languageMenuIndex(0) + languageMenuIndex(2) > 3 Then languageMenuIndex(2) += 1 End If End If If GameInstance.IsMouseVisible = True Then For i = 0 To 3 If New Rectangle(CInt(windowSize.Width / 2) - 258, CInt(Core.windowSize.Height / 2 - 128 + i * 50), 480, 48).Contains(MouseHandler.MousePosition) = True Then If MouseHandler.ButtonPressed(MouseHandler.MouseButtons.LeftButton) = True Then languageMenuIndex(0) = i + languageMenuIndex(2) End If End If Next End If languageMenuIndex(0) = CInt(MathHelper.Clamp(languageMenuIndex(0), 0, Languages.Count - 1)) languageMenuIndex(2) = CInt(MathHelper.Clamp(languageMenuIndex(2), 0, Languages.Count - 4)) If languageMenuIndex(0) <> currentIndex Then Localization.Load(Languages(languageMenuIndex(0))) End If End Sub Private Sub GetLanguages() Languages.Clear() LanguageNames.Clear() For Each file As String In IO.Directory.GetFiles(GameController.GamePath & "\Content\Localization\") If file.EndsWith(".dat") = True Then Dim content() As String = IO.File.ReadAllLines(file) file = IO.Path.GetFileNameWithoutExtension(file) If file.StartsWith("Tokens_") = True Then Dim TokenName As String = file.Remove(0, 7) Dim LanguageName As String = "" For Each line As String In content If line.StartsWith("language_name,") = True Then LanguageName = content(0).GetSplit(1) Languages.Add(TokenName) LanguageNames.Add(LanguageName) Exit For End If Next End If End If Next End Sub #End Region Private Sub GetPacks(Optional ByVal reload As Boolean = False) PackNames.Clear() If reload = False Then EnabledPackNames.Clear() EnabledPackNames.AddRange(Core.GameOptions.ContentPackNames) End If PackNames.AddRange(EnabledPackNames) If IO.Directory.Exists(GameController.GamePath & "\ContentPacks\") = True Then For Each ContentPackFolder As String In IO.Directory.GetDirectories(GameController.GamePath & "\ContentPacks\") Dim newContentPack As String = ContentPackFolder.Remove(0, (GameController.GamePath & "\ContentPacks\").Length) If PackNames.Contains(newContentPack) = False Then PackNames.Add(newContentPack) End If Next End If End Sub #Region "PacksMenu" Private Sub DrawPacksMenu() For i = 0 To 3 Dim c As Color = New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade)) If i + packsMenuIndex(2) = packsMenuIndex(0) Then c = New Color(77, 147, 198, CInt(255 * _interfaceFade * _pageFade)) If EnabledPackNames.Count > 0 Then If EnabledPackNames.Contains(PackNames(i + packsMenuIndex(2))) = True Then isSelectedEnabled = True Else isSelectedEnabled = False End If End If End If Canvas.DrawRectangle(New Rectangle(CInt(windowSize.Width / 2) - 328, CInt(Core.windowSize.Height / 2 - 128 + i * 50), 500, 48), c, False) Next Canvas.DrawScrollBar(New Vector2(CInt(windowSize.Width / 2) + 188, CInt(Core.windowSize.Height / 2 - 128)), PackNames.Count, 4, packsMenuIndex(2), New Size(4, 200), False, New Color(77, 147, 198, CInt(255 * _interfaceFade * _pageFade)), New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade)), False) Dim x As Integer = PackNames.Count - 1 x = CInt(MathHelper.Clamp(x, 0, 3)) Dim textColor As Color = New Color(0, 0, 0, CInt(255 * _interfaceFade * _pageFade)) If PackNames.Count > 0 Then For i = 0 To x Dim Name As String = PackNames(i + packsMenuIndex(2)) If EnabledPackNames.Contains(Name) = True Then If i + packsMenuIndex(2) = packsMenuIndex(0) Then SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2) - 320 + 2, CInt(Core.windowSize.Height / 2 - 120 + i * 50 + 2)), New Color(0, 0, 0, CInt(255 * _interfaceFade * _pageFade))) SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2) - 320, CInt(Core.windowSize.Height / 2 - 120 + i * 50)), New Color(181, 255, 82, CInt(255 * _interfaceFade * _pageFade))) Else SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2) - 320, CInt(Core.windowSize.Height / 2 - 120 + i * 50)), New Color(98, 205, 8, CInt(255 * _interfaceFade * _pageFade))) End If Else If i + packsMenuIndex(2) = packsMenuIndex(0) Then SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2) - 320 + 2, CInt(Core.windowSize.Height / 2 - 120 + i * 50 + 2)), textColor) SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2) - 320, CInt(Core.windowSize.Height / 2 - 120 + i * 50)), New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade))) Else SpriteBatch.DrawString(FontManager.InGameFont, Name, New Vector2(CInt(windowSize.Width / 2) - 320, CInt(Core.windowSize.Height / 2 - 120 + i * 50)), textColor) End If End If Next End If End Sub Private Sub UpdatePacksMenu() Dim currentIndex As Integer = packsMenuIndex(0) Dim currentControl As Control = Nothing For Each control As Control In ControlList If control._position = _cursorDestPosition Then currentControl = control Exit For End If Next If Controls.Up(True, True, True) = True Then If currentControl.ID > 4 Then packsMenuIndex(0) -= 1 If packsMenuIndex(0) - packsMenuIndex(2) < 0 Then packsMenuIndex(2) -= 1 End If If SelectPackNoiseDelay = 0 Then SoundManager.PlaySound("select", 0.0F, 0.0F, 0.5F, False) SelectPackNoiseDelay = 10 End If End If End If If Controls.Down(True, True, True) = True Then If currentControl.ID > 4 Then packsMenuIndex(0) += 1 If packsMenuIndex(0) + packsMenuIndex(2) > 3 Then packsMenuIndex(2) += 1 End If If SelectPackNoiseDelay = 0 Then SoundManager.PlaySound("select", 0.0F, 0.0F, 0.5F, False) SelectPackNoiseDelay = 10 End If End If End If If GameInstance.IsMouseVisible = True Then For i = 0 To 3 If New Rectangle(CInt(windowSize.Width / 2 - 328), CInt(windowSize.Height / 2 - 128 + i * 50), 500, 48).Contains(MouseHandler.MousePosition) = True Then If MouseHandler.ButtonPressed(MouseHandler.MouseButtons.LeftButton) = True Then packsMenuIndex(0) = i + packsMenuIndex(2) If SelectPackNoiseDelay = 0 Then SoundManager.PlaySound("select", 0.0F, 0.0F, 0.5F, False) SelectPackNoiseDelay = 10 End If End If End If Next End If packsMenuIndex(0) = CInt(MathHelper.Clamp(packsMenuIndex(0), 0, PackNames.Count - 1)) packsMenuIndex(2) = CInt(MathHelper.Clamp(packsMenuIndex(2), 0, PackNames.Count - 4)) If SelectPackNoiseDelay > 0 Then SelectPackNoiseDelay -= 1 End If End Sub Private Sub ButtonPackInformation() If PackNames.Count = 0 Then Exit Sub End If Dim packName As String = PackNames(packsMenuIndex(0)) PInfoSplash = Nothing Try If IO.File.Exists(GameController.GamePath & "\ContentPacks\" & packName & "\splash.png") = True Then Using stream As IO.Stream = IO.File.Open(GameController.GamePath & "\ContentPacks\" & packName & "\splash.png", IO.FileMode.OpenOrCreate) PInfoSplash = Texture2D.FromStream(GraphicsDevice, stream) End Using End If Catch ex As Exception Logger.Log(Logger.LogTypes.ErrorMessage, "MainMenuScreen.vb/ButtonPackInformation: An error occurred trying to load the splash image at """ & GameController.GamePath & "\ContentPacks\" & packName & "\splash.png" & """. This could have been caused by an invalid file header. (Exception: " & ex.Message & ")") End Try Dim contentPackPath As String = GameController.GamePath & "\ContentPacks\" & packName & "\" Dim s() As String = ContentPackManager.GetContentPackInfo(packName) If s.Length > 0 Then PInfoVersion = s(0).CropStringToWidth(FontManager.InGameFont, 540 - 16 - CInt(FontManager.InGameFont.MeasureString(Localization.GetString("option_screen_contentpacks_version")).X)) End If If s.Length > 1 Then PInfoAuthor = s(1).CropStringToWidth(FontManager.InGameFont, 540 - 16 - CInt(FontManager.InGameFont.MeasureString(Localization.GetString("option_screen_contentpacks_by")).X)) End If If s.Length > 2 Then PInfoDescription = s(2).CropStringToWidth(FontManager.InGameFont, 540) End If PInfoName = packName End Sub Private PInfoName As String = "" Private PInfoSplash As Texture2D = Nothing Private PInfoVersion As String = "" Private PInfoAuthor As String = "" Private PInfoDescription As String = "" Private Sub DrawPackInformationMenu() If Not PInfoSplash Is Nothing Then SpriteBatch.Draw(PInfoSplash, windowSize, Color.White) End If Dim CanvasTexture As Texture2D = TextureManager.GetTexture("GUI\Menus\Menu", New Rectangle(0, 0, 48, 48), "") Canvas.DrawRectangle(New Rectangle(CInt(windowSize.Width / 2) - CInt(FontManager.InGameFont.MeasureString(Localization.GetString("option_screen_contentpacks_name") & ": " & PInfoName).X / 2) - 32, CInt(Core.windowSize.Height / 2 - 144), CInt(FontManager.InGameFont.MeasureString(Localization.GetString("option_screen_contentpacks_name") & ": " & PInfoName).X) + 64, 64), New Color(77, 147, 198, CInt(255 * _interfaceFade * _pageFade))) SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("option_screen_contentpacks_name") & ": " & PInfoName, New Vector2(CInt(windowSize.Width / 2) - CInt(FontManager.InGameFont.MeasureString(Localization.GetString("option_screen_contentpacks_name") & ": " & PInfoName).X / 2) + 2, CInt(Core.windowSize.Height / 2 - 128 + 2)), New Color(0, 0, 0, CInt(255 * _interfaceFade * _pageFade))) SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("option_screen_contentpacks_name") & ": " & PInfoName, New Vector2(CInt(windowSize.Width / 2) - CInt(FontManager.InGameFont.MeasureString(Localization.GetString("option_screen_contentpacks_name") & ": " & PInfoName).X / 2), CInt(Core.windowSize.Height / 2 - 128)), New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade))) Canvas.DrawRectangle(New Rectangle(CInt(windowSize.Width / 2) - 278, CInt(Core.windowSize.Height / 2 - 72), 556, 196), New Color(255, 255, 255, CInt(255 * _interfaceFade * _pageFade))) SpriteBatch.DrawString(FontManager.InGameFont, Localization.GetString("option_screen_contentpacks_version") & ": " & PInfoVersion & Environment.NewLine & Localization.GetString("option_screen_contentpacks_by") & ": " & PInfoAuthor & Environment.NewLine & Localization.GetString("option_screen_contentpacks_description") & ": " & Environment.NewLine & PInfoDescription.Replace("
", Environment.NewLine).Replace("~", Environment.NewLine), New Vector2(CInt(windowSize.Width / 2) - 278 + 16, CInt(Core.windowSize.Height / 2 - 64)), New Color(0, 0, 0, CInt(255 * _interfaceFade * _pageFade))) End Sub Private Sub UpdatePackInformationMenu() If KeyBoardHandler.KeyPressed(KeyBindings.EscapeKey) Or KeyBoardHandler.KeyPressed(KeyBindings.BackKey1) Or KeyBoardHandler.KeyPressed(KeyBindings.BackKey2) Or MouseHandler.ButtonPressed(MouseHandler.MouseButtons.RightButton) Or ControllerHandler.ButtonPressed(Buttons.B) Then SwitchToContentPacks() End If End Sub Private Sub ButtonUp() If PackNames.Count > 0 Then If EnabledPackNames.Contains(PackNames(packsMenuIndex(0))) = True Then Dim idx As Integer = EnabledPackNames.IndexOf(PackNames(packsMenuIndex(0))) If idx > 0 Then Dim tempString As String = EnabledPackNames(idx - 1) EnabledPackNames(idx - 1) = EnabledPackNames(idx) EnabledPackNames(idx) = tempString GetPacks(True) End If End If End If End Sub Private Sub ButtonDown() If PackNames.Count > 0 Then If EnabledPackNames.Contains(PackNames(packsMenuIndex(0))) = True Then Dim idx As Integer = EnabledPackNames.IndexOf(PackNames(packsMenuIndex(0))) If idx < EnabledPackNames.Count - 1 Then Dim tempString As String = EnabledPackNames(idx + 1) EnabledPackNames(idx + 1) = EnabledPackNames(idx) EnabledPackNames(idx) = tempString GetPacks(True) End If End If End If End Sub Private Sub PackEnabledToggle(ByVal c As ToggleButton) If PackNames.Count > 0 Then If EnabledPackNames.Contains(PackNames(packsMenuIndex(0))) Then isSelectedEnabled = False c.Toggled = False ButtonToggle(PackNames(packsMenuIndex(0))) Else isSelectedEnabled = True c.Toggled = True ButtonToggle(PackNames(packsMenuIndex(0))) End If Else isSelectedEnabled = False c.Toggled = False End If End Sub Private Sub ButtonToggle(ByVal PackName As String) If PackNames.Count > 0 Then If EnabledPackNames.Contains(PackName) = True Then EnabledPackNames.Remove(PackName) GetPacks(True) Else EnabledPackNames.Add(PackName) GetPacks(True) End If Else GetPacks(True) End If End Sub Private Sub PacksApply() If PackNames.Count > 0 Then Core.GameOptions.ContentPackNames = EnabledPackNames.ToArray() Core.GameOptions.SaveOptions() FontManager.LoadFonts() MusicManager.PlayNoMusic() ContentPackManager.Clear() Water.WaterSpeed = 8 For Each s As String In Core.GameOptions.ContentPackNames ContentPackManager.Load(GameController.GamePath & "\ContentPacks\" & s & "\exceptions.dat") Next Core.OffsetMaps.Clear() Dim PressStart = Me.PreScreen.PreScreen Me.PreScreen = New NewMainMenuScreen(PressStart) Dim MainMenu As NewMainMenuScreen = CType(Me.PreScreen, NewMainMenuScreen) SetScreen(New NewOptionScreen(Me.PreScreen, 4)) MainMenu._fadeInMain = 1.0F MainMenu._fadeInOptions = 1.0F MainMenu._screenOffsetTarget.Y = 0 - 180 - 32 MainMenu._screenOffset.Y = MainMenu._screenOffsetTarget.Y MainMenu._screenOffsetTarget.X = 180 MainMenu._screenOffset.X = MainMenu._screenOffsetTarget.X MainMenu._optionsOffsetTarget.X = -360 MainMenu._optionsOffset.X = MainMenu._optionsOffsetTarget.X NewMainMenuScreen._selectedProfileTemp = 0 NewMainMenuScreen._selectedProfile = 3 NewMainMenuScreen._menuIndex = 2 SoundManager.PlaySound("save", False) MusicManager.Play("title") End If End Sub #End Region Private Sub DrawBackground() Dim mainBackgroundColor As Color = Color.White If _closing Then mainBackgroundColor = New Color(255, 255, 255, CInt(255 * _interfaceFade)) End If Dim halfWidth As Integer = CInt(Core.windowSize.Width / 2) Dim halfHeight As Integer = CInt(Core.windowSize.Height / 2) Canvas.DrawRectangle(New Rectangle(halfWidth - 400, halfHeight - 232, 260, 32), New Color(84, 198, 216, mainBackgroundColor.A)) Canvas.DrawRectangle(New Rectangle(halfWidth - 140, halfHeight - 216, 16, 16), New Color(84, 198, 216, mainBackgroundColor.A)) SpriteBatch.Draw(_texture, New Rectangle(halfWidth - 140, halfHeight - 232, 16, 16), New Rectangle(80, 0, 16, 16), mainBackgroundColor) SpriteBatch.Draw(_texture, New Rectangle(halfWidth - 124, halfHeight - 216, 16, 16), New Rectangle(80, 0, 16, 16), mainBackgroundColor) SpriteBatch.DrawString(FontManager.ChatFont, Localization.GetString("option_screen_title", "Options"), New Vector2(halfWidth - 390, halfHeight - 228), mainBackgroundColor) For y = 0 To CInt(_enrollY) Step 16 For x = 0 To 800 Step 16 SpriteBatch.Draw(_texture, New Rectangle(halfWidth - 400 + x, halfHeight - 200 + y, 16, 16), New Rectangle(64, 0, 4, 4), mainBackgroundColor) Next Next Dim modRes As Integer = CInt(_enrollY) Mod 16 If modRes > 0 Then For x = 0 To 800 Step 16 SpriteBatch.Draw(_texture, New Rectangle(halfWidth - 400 + x, CInt(_enrollY + (halfHeight - 200)), 16, modRes), New Rectangle(64, 0, 4, 4), mainBackgroundColor) Next End If End Sub Private Sub DrawCursor() Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "") Core.SpriteBatch.Draw(t, New Rectangle(CInt(_cursorPosition.X) + 60, CInt(_cursorPosition.Y) - 28, 48, 48), New Rectangle(0, 0, 16, 16), New Color(255, 255, 255, CInt(255 * Me._interfaceFade)), 0.0F, Vector2.Zero, SpriteEffects.None, 0.0F) End Sub Private Sub DrawCurrentPage() For Each C As Control In ControlList C.Draw() Next End Sub Private Sub DrawMessage() End Sub Public Overrides Sub Update() Me.PreScreen.Update() 'New stuff If _opening Then InitializeControls() _opening = False End If 'Refresh button positions If windowSize.Width <> _screenSize.Width Or windowSize.Height <> _screenSize.Height Then _screenSize = New Size(CInt(windowSize.Width), CInt(windowSize.Height)) InitializeControls() End If If _closing Then ' When the interface is closing, only update the closing animation ' Once the interface is completely closed, set to the previous screen. If _interfaceFade > 0F Then _interfaceFade = MathHelper.Lerp(0, _interfaceFade, 0.8F) If _interfaceFade < 0F Then _interfaceFade = 0F End If End If If _enrollY > 0 Then _enrollY = MathHelper.Lerp(0, _enrollY, 0.8F) If _enrollY <= 0 Then _enrollY = 0 End If End If If _enrollY <= 2.0F Then 'TODO: Set the interface state to PlayerTemp. SetScreen(PreScreen) End If Else 'Update intro animation: Dim maxWindowHeight As Integer = 400 If _enrollY < maxWindowHeight Then _enrollY = MathHelper.Lerp(maxWindowHeight, _enrollY, 0.8F) If _enrollY >= maxWindowHeight Then _enrollY = maxWindowHeight End If End If If _interfaceFade < 1.0F Then _interfaceFade = MathHelper.Lerp(1.0F, _interfaceFade, 0.95F) If _interfaceFade > 1.0F Then _interfaceFade = 1.0F End If End If If _itemIntro < 1.0F Then _itemIntro += 0.05F If _itemIntro > 1.0F Then _itemIntro = 1.0F End If End If 'Update the Dialogues: ChooseBox.Update() If ChooseBox.Showing = False Then TextBox.Update() End If If _pageClosing = True Then If _pageFade >= 0F Then _pageFade -= 0.07F If _pageFade <= 0F Then _pageFade = 0F _pageClosing = False _pageOpening = True ScreenIndex = _nextIndex InitializeControls() End If End If End If If _pageOpening = True Then If _pageFade <= 1.0F Then _pageFade += 0.07F If _pageFade >= 1.0F Then _pageFade = 1.0F _pageClosing = False _pageOpening = False End If End If End If If _cursorDestPosition.X <> _cursorPosition.X Or _cursorDestPosition.Y <> _cursorPosition.Y Then _cursorPosition.X = MathHelper.Lerp(_cursorDestPosition.X, _cursorPosition.X, 0.75F) _cursorPosition.Y = MathHelper.Lerp(_cursorDestPosition.Y, _cursorPosition.Y, 0.75F) If Math.Abs(_cursorDestPosition.X - _cursorPosition.X) < 0.1F Then _cursorPosition.X = _cursorDestPosition.X End If If Math.Abs(_cursorDestPosition.Y - _cursorPosition.Y) < 0.1F Then _cursorPosition.Y = _cursorDestPosition.Y End If End If If Not _selectedScrollBar Then If Controls.Up(True, True, False, True, True, True) = True Then SetCursorPosition("up") End If If Controls.Down(True, True, False, True, True, True) = True Then SetCursorPosition("down") End If If Controls.Right(True, True, False, True, True, True) = True Then SetCursorPosition("right") End If If Controls.Left(True, True, False, True, True, True) = True Then SetCursorPosition("left") End If If ScreenIndex <> 6 Then If Controls.Left(False, False, True, False, False, False) = True Then SetCursorPosition("previous") End If If Controls.Right(False, False, True, False, False, False) = True Then SetCursorPosition("next") End If End If If KeyBoardHandler.KeyPressed(KeyBindings.EscapeKey) Or KeyBoardHandler.KeyPressed(KeyBindings.BackKey1) Or KeyBoardHandler.KeyPressed(KeyBindings.BackKey2) Or MouseHandler.ButtonPressed(MouseHandler.MouseButtons.RightButton) Or ControllerHandler.ButtonPressed(Buttons.B) Then If _pageClosing = False And _pageOpening = False Then SoundManager.PlaySound("select") If ScreenIndex = 0 Or _subMenu <> 0 Then If ScreenIndex = 8 Then SwitchToContentPacks() Else _closing = True End If Else SwitchToMain() End If End If End If End If Select Case ScreenIndex Case 6 UpdateLanguageMenu() Case 7 UpdatePacksMenu() Case 8 UpdatePackInformationMenu() End Select For i = 0 To ControlList.Count If i <= ControlList.Count - 1 Then ControlList(i).Update(Me) End If Next End If End Sub Private Sub SetCursorPosition(ByVal direction As String) Dim ScrollControl As Control = Nothing Dim pos = GetButtonPosition(direction) Dim cPosition As Vector2 = New Vector2(pos.X, pos.Y) 'Dim cPosition As Vector2 = New Vector2(pos.X + 180, pos.Y - 42) For Each control As Control In ControlList If control._position = New Vector2(pos.X, pos.Y) Then If control.ControlType = "ScrollBar" Then ScrollControl = control Exit For End If End If Next If ScrollControl IsNot Nothing Then cPosition.X += 332 End If _cursorDestPosition = cPosition End Sub Private Function GetButtonPosition(ByVal direction As String) As Vector2 Dim EligibleControls As New List(Of Control) Dim currentControl As Control = Nothing For Each control As Control In ControlList If control.ControlType = "ScrollBar" Then If control._position.Y = _cursorDestPosition.Y Then currentControl = control Exit For End If Else If control._position = _cursorDestPosition Then currentControl = control Exit For End If End If Next For Each control As Control In ControlList Dim R2 As Vector2 = control._position Dim R1 As Vector2 = currentControl._position If R1 = R2 Then Continue For End If Select Case direction Case "up" If ScreenIndex = 0 Then Select Case currentControl.ID Case 4 If control.ID = 1 Then EligibleControls.Add(control) End If Case 5 If control.ID = 3 Then EligibleControls.Add(control) End If Case 6, 7 If control.ID = 4 Then EligibleControls.Add(control) End If Case 8 If control.ID = 5 Then EligibleControls.Add(control) End If End Select Else If ScreenIndex = 7 Then If currentControl.ID <= 4 Then If control.ID = currentControl.ID - 1 Then EligibleControls.Add(control) End If End If ElseIf ScreenIndex = 5 Then If currentControl.ID > 3 Then If control.ID = 3 Then EligibleControls.Add(control) End If ElseIf control.ID = currentControl.ID - 1 Then EligibleControls.Add(control) End If ElseIf Math.Abs(R2.X - R1.X) <= -(R2.Y - R1.Y) Then 'because Y axis points down EligibleControls.Add(control) End If End If Case "down" If ScreenIndex = 0 Then Select Case currentControl.ID Case 1, 2 If control.ID = 4 Then EligibleControls.Add(control) End If Case 3 If control.ID = 5 Then EligibleControls.Add(control) End If Case 4 If control.ID = 6 Then EligibleControls.Add(control) End If Case 5 If control.ID = 8 Then EligibleControls.Add(control) End If End Select ElseIf ScreenIndex = 5 Then If currentControl.ID < 4 Then If control.ID = currentControl.ID + 1 Then EligibleControls.Add(control) End If End If ElseIf Math.Abs(R2.X - R1.X) <= -(R1.Y - R2.Y) Then 'because Y axis points down EligibleControls.Add(control) End If Case "right" If ScreenIndex = 7 Then If currentControl.ID = 5 And control.ID = 6 Then EligibleControls.Add(control) ElseIf currentControl.ID = 6 And control.ID = 4 Then EligibleControls.Add(control) End If ElseIf control.ID = currentControl.ID + 1 Then EligibleControls.Add(control) End If Case "left" If ScreenIndex = 7 Then If currentControl.ID <= 4 And control.ID = 6 Then EligibleControls.Add(control) ElseIf currentControl.ID = 6 And control.ID = 5 Then EligibleControls.Add(control) End If ElseIf control.ID = currentControl.ID - 1 Then EligibleControls.Add(control) End If Case "next" If ScreenIndex = 7 And currentControl.ID < 4 Then If control.ID = currentControl.ID + 1 Then EligibleControls.Add(control) End If ElseIf ScreenIndex <> 7 Then If control.ID = currentControl.ID + 1 Then EligibleControls.Add(control) End If End If Case "previous" If ScreenIndex = 7 And currentControl.ID <= 4 Then If control.ID = currentControl.ID - 1 Then EligibleControls.Add(control) End If ElseIf ScreenIndex <> 7 Then If control.ID = currentControl.ID - 1 Then EligibleControls.Add(control) End If End If End Select Next Dim NextPosition As New Vector2(currentControl._position.X, currentControl._position.Y) Dim cDistance As Double = 99999D For Each control As Control In EligibleControls Dim R2 As Vector2 = control._position Dim R1 As Vector2 = currentControl._position Dim DeltaR As Vector2 = R2 - R1 Dim Distance As Double = DeltaR.Length If Distance < cDistance Then NextPosition = control._position cDistance = Distance End If Next Return NextPosition End Function Private Sub InitializeControls() Me.ControlList.Clear() Me._selectedScrollBar = False Dim halfWidth As Integer = CInt(Core.windowSize.Width / 2) Dim halfHeight As Integer = CInt(Core.windowSize.Height / 2) Dim Delta_X As Integer = halfWidth - 400 Dim Delta_Y As Integer = halfHeight - 200 Select Case ScreenIndex Case 0 ' Main Options menu. Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 90, Delta_Y + 80), 1, 64, Localization.GetString("option_screen_game", "Game"), AddressOf SwitchToGame, 1)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 310, Delta_Y + 80), 1, 64, Localization.GetString("option_screen_graphics", "Graphics"), AddressOf SwitchToGraphics, 2)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530, Delta_Y + 80), 1, 64, Localization.GetString("option_screen_battle", "Battle"), AddressOf SwitchToBattle, 3)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 200, Delta_Y + 168), 1, 64, Localization.GetString("option_screen_controls", "Controls"), AddressOf SwitchToControls, 4)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 420, Delta_Y + 168), 1, 64, Localization.GetString("option_screen_audio", "Audio"), AddressOf SwitchToAudio, 5)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 90 + 24, Delta_Y + 336), 1, 48, Localization.GetString("global_apply", "Apply"), AddressOf Apply, 6)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 286 + 24, Delta_Y + 336), 2, 48, Localization.GetString("option_screen_resetoptions", "Reset Options"), AddressOf Reset, 7)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 336), 1, 48, Localization.GetString("global_close", "Close"), AddressOf Close, 8)) Case 1 ' "Game" from the Options menu. Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 60), 400, Localization.GetString("option_screen_game_textspeed", "Text Speed"), Me.TextSpeed, 1, 3, AddressOf ChangeTextspeed, 1)) If CBool(GameModeManager.GetGameRuleValue("LockDifficulty", "0")) = False Then Dim d As New Dictionary(Of Integer, String) d.Add(0, Localization.GetString("option_screen_game_difficulty_easy", "Easy")) d.Add(1, Localization.GetString("option_screen_game_difficulty_hard", "Hard")) d.Add(2, Localization.GetString("option_screen_game_difficulty_superhard", "Super Hard")) Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 120), 400, Localization.GetString("option_screen_game_difficulty", "Difficulty"), Me.Difficulty, 0, 2, AddressOf ChangeDifficulty, d, 2)) End If Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100, Delta_Y + 180), 3, 64, Localization.GetString("option_screen_game_viewbobbing", "View Bobbing"), Me.ViewBobbing, AddressOf ToggleBobbing, {Localization.GetString("global_off", "Off"), Localization.GetString("global_on", "On")}.ToList(), 3)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf SwitchToMain, 4)) Case 2 ' "Graphics" from the Options menu. Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 40), 400, Localization.GetString("option_screen_graphics_fov", "Field of View"), CInt(Me.FOV), 45, 120, AddressOf ChangeFOV, 1)) Dim d As New Dictionary(Of Integer, String) d.Add(0, Localization.GetString("option_screen_graphics_renderdistance_tiny", "Tiny")) d.Add(1, Localization.GetString("option_screen_graphics_renderdistance_small", "Small")) d.Add(2, Localization.GetString("option_screen_graphics_renderdistance_normal", "Normal")) d.Add(3, Localization.GetString("option_screen_graphics_renderdistance_far","Far")) d.Add(4, Localization.GetString("option_screen_graphics_renderdistance_extreme", "Extreme")) Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 100), 400, Localization.GetString("option_screen_graphics_renderdistance", "Render Distance"), Me.RenderDistance, 0, 4, AddressOf ChangeRenderDistance, d, 2)) Dim d1 As New Dictionary(Of Integer, String) d1.Add(0, "Off") Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 160), 400, Localization.GetString("option_screen_graphics_offset_mapquality", "Offset Map Quality"), Me.LoadOffsetMaps, 0, 100, AddressOf ChangeOffsetMaps, d1, 3)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100, Delta_Y + 220), 3, 64, Localization.GetString("option_screen_graphics_graphics", "Graphics"), CBool(Me.GraphicStyle), AddressOf ToggleGraphicsStyle, {Localization.GetString("option_screen_graphics_graphics_fast", "Fast"), Localization.GetString("option_screen_graphics_graphics_fancy", "Fancy")}.ToList(), 4)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100, Delta_Y + 300), 3, 64, Localization.GetString("option_screen_graphics_multisampling", "Multi Sampling"), Me.PreferMultiSampling, AddressOf ToggleMultiSampling, {"Off", "On"}.ToList(), 5)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf SwitchToMain, 6)) Case 3 ' "Battle" from the Options menu. Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100 + 20, Delta_Y + 100), 2, 64, Localization.GetString("option_screen_battle_3dmodels", "3D Models"), CBool(ShowModels), AddressOf ToggleShowModels, {Localization.GetString("global_off", "Off"), Localization.GetString("global_on", "On")}.ToList(), 1)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 400 + 20, Delta_Y + 100), 2, 64, Localization.GetString("option_screen_battle_animations", "Animations"), CBool(Me.ShowBattleAnimations), AddressOf ToggleAnimations, {Localization.GetString("global_off", "Off"), Localization.GetString("global_on", "On")}.ToList(), 2)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100 + 20, Delta_Y + 200), 2, 64, Localization.GetString("option_screen_battle_battlestyle", "Battle Style"), CBool(Me.BattleStyle), AddressOf ToggleBattleStyle, {Localization.GetString("option_screen_battle_battlestyle_shift", "Shift"), Localization.GetString("option_screen_battle_battlestyle_set", "Set")}.ToList(), 3)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf SwitchToMain, 4)) Case 4 ' "Controls" from the Options menu. If PreScreen.Identification = Identifications.MainMenuScreen Then Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100, Delta_Y + 100), 5, 64, Localization.GetString("option_screen_controls_xboxgamepad", "Xbox Gamepad"), Me.GamePadEnabled, AddressOf ToggleXBOX360Controller, {"Disabled", "Enabled"}.ToList(), 1)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 100, Delta_Y + 200), 3, 64, Localization.GetString("option_screen_controls_resetkeybindings", "Reset Key Bindings"), AddressOf ResetKeyBindings, 2)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 90 + 24, Delta_Y + 336), 1, 48, Localization.GetString("global_apply", "Apply"), AddressOf ControlsApply, 3)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf Close, 4)) Else Dim d As New Dictionary(Of Integer, String) d.Add(1, Localization.GetString("option_screen_controls_cameraspeed_slow", "...Slow...")) d.Add(12, Localization.GetString("option_screen_controls_cameraspeed_medium", "Standard")) d.Add(38, Localization.GetString("option_screen_controls_cameraspeed_fast", "Super fast!")) d.Add(50, Localization.GetString("option_screen_controls_cameraspeed_fastest", "SPEED OF LIGHT!")) Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 60), 400, Localization.GetString("option_screen_controls_cameraspeed", "Camera Speed"), Me.CameraSpeed, 1, 50, AddressOf ChangeCameraSpeed, d, 1)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100, Delta_Y + 120), 5, 64, Localization.GetString("option_screen_controls_xboxgamepad", "Xbox Gamepad"), Me.GamePadEnabled, AddressOf ToggleXBOX360Controller, {"Disabled", "Enabled"}.ToList(), 2)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100, Delta_Y + 200), 5, 64, Localization.GetString("option_screen_controls_running", "Running"), Me.RunMode, AddressOf ToggleRunningToggle, {"Hold", "Toggle"}.ToList(), 3)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 100, Delta_Y + 280), 3, 64, Localization.GetString("option_screen_controls_resetkeybindings", "Reset Key Bindings"), AddressOf ResetKeyBindings, 4)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf SwitchToMain, 5)) End If Case 5 ' "Audio" from the Options menu. Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 60), 400, Localization.GetString("option_screen_audio_volume_music", "Music Volume"), Me.Music, 0, 100, AddressOf ChangeMusicVolume, 1)) Me.ControlList.Add(New ScrollBar(New Vector2(Delta_X + 100, Delta_Y + 120), 400, Localization.GetString("option_screen_audio_volume_sfx", "SoundFX Volume"), Me.Sound, 0, 100, AddressOf ChangeSoundVolume, 2)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 100, Delta_Y + 200), 1, 64, Localization.GetString("option_screen_audio_muted", "Muted"), CBool(Me.Muted), AddressOf ToggleMute, {"No", "Yes"}.ToList(), 3)) If PreScreen.Identification = Identifications.MainMenuScreen Then Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 90 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_apply", "Apply"), AddressOf AudioSave, 4)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf Close, 5)) Else Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf SwitchToMain, 4)) End If Case 6 ' "Language" from the Options menu. Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 90 + 24, Delta_Y + 336), 1, 48, Localization.GetString("global_apply", "Apply"), AddressOf LanguageApply, 1)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf Close, 2)) Case 7 ' "ContentPacks" from the Options menu. Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 604, Delta_Y + 64), 2, 48, Localization.GetString("option_screen_contentpacks_up"), AddressOf ButtonUp, 1)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 604, Delta_Y + 120), 2, 48, Localization.GetString("option_screen_contentpacks_down"), AddressOf ButtonDown, 2)) Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 604, Delta_Y + 176), 2, 48, "", isSelectedEnabled, AddressOf PackEnabledToggle, {Localization.GetString("global_enable"), Localization.GetString("global_disable")}.ToList(), 3)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 604, Delta_Y + 232), 2, 48, Localization.GetString("option_screen_contentpacks_information"), AddressOf SwitchToPackInformation, 4)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 90 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_apply", "Apply"), AddressOf PacksApply, 5)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 310 + 24, Delta_Y + 327), 1, 48, Localization.GetString("global_back", "Back"), AddressOf Close, 6)) Case 8 ' "Information" from the ContentPacks menu. Me.ControlList.Add(New ToggleButton(New Vector2(Delta_X + 90 + 24, Delta_Y + 336), 2, 48, Localization.GetString("global_enabled"), isSelectedEnabled, AddressOf PackEnabledToggle, {Localization.GetString("global_no"), Localization.GetString("global_yes")}.ToList(), 1)) Me.ControlList.Add(New CommandButton(New Vector2(Delta_X + 530 + 24, Delta_Y + 336), 1, 48, Localization.GetString("global_back", "Back"), AddressOf SwitchToContentPacks, 2)) End Select If ScreenIndex <> 7 Then If ControlList(0).ControlType = "ScrollBar" Then _cursorDestPosition = New Vector2(ControlList(0)._position.X + 332, ControlList(0)._position.Y) Else _cursorDestPosition = ControlList(0)._position End If Else If ControlList(0).ControlType = "ScrollBar" Then _cursorDestPosition = New Vector2(ControlList(4)._position.X + 332, ControlList(4)._position.Y) Else _cursorDestPosition = ControlList(4)._position End If End If End Sub Private Sub Apply() Save() Close() End Sub Private Sub Close() If PreScreen.Identification = Identifications.MainMenuScreen Then If currentLanguage <> TempLanguage Then Localization.Load(TempLanguage) End If If MusicManager.MasterVolume * 100 <> Me.TempMusicVolume Then MusicManager.MasterVolume = CSng(Me.TempMusicVolume / 100) End If If SoundManager.Volume * 100 <> Me.TempSoundVolume Then SoundManager.Volume = CSng(Me.TempSoundVolume / 100) End If If MusicManager.Muted <> CBool(Me.TempMuted) Or SoundManager.Muted <> CBool(Me.TempMuted) Then MusicManager.Muted = CBool(Me.TempMuted) SoundManager.Muted = CBool(Me.TempMuted) End If End If _closing = True End Sub Private Sub ControlsApply() Core.GameOptions.GamePadEnabled = Me.GamePadEnabled Core.GameOptions.SaveOptions() SoundManager.PlaySound("save") _closing = True End Sub Private Sub Reset() Me.FOV = 45.0F Me.TextSpeed = 2 Me.CameraSpeed = 12 Me.Music = 50 Me.Sound = 50 Me.RenderDistance = 2 Me.GraphicStyle = 1 Me.ShowBattleAnimations = 1 Me.DiagonalMovement = False Me.Difficulty = 0 Me.BattleStyle = 1 Me.LoadOffsetMaps = 100 Me.ViewBobbing = True Me.ShowModels = 1 Me.Muted = 0 Me.GamePadEnabled = True Me.PreferMultiSampling = True MusicManager.Muted = CBool(Me.Muted) SoundManager.Muted = CBool(Me.Muted) End Sub Private Sub Save() MusicManager.MasterVolume = CSng(Me.Music / 100) SoundManager.Volume = CSng(Me.Sound / 100) MusicManager.Muted = CBool(Me.Muted) SoundManager.Muted = CBool(Me.Muted) Core.GameOptions.RenderDistance = Me.RenderDistance Core.GameOptions.GraphicStyle = Me.GraphicStyle If PreScreen.Identification <> Identifications.MainMenuScreen Then Camera.CreateNewProjection(Me.FOV) TextBox.TextSpeed = Me.TextSpeed Camera.RotationSpeed = CSng(Me.CameraSpeed / 10000) Screen.Level.World.Initialize(Screen.Level.EnvironmentType, Screen.Level.WeatherType) Core.Player.RunMode = Me.RunMode Me.PreScreen.Update() End If Core.Player.ShowBattleAnimations = Me.ShowBattleAnimations Core.Player.DiagonalMovement = Me.DiagonalMovement Core.Player.DifficultyMode = Me.Difficulty Core.Player.BattleStyle = Me.BattleStyle Core.Player.ShowModelsInBattle = CBool(Me.ShowModels) Core.GameOptions.GamePadEnabled = Me.GamePadEnabled Core.GraphicsManager.PreferMultiSampling = Me.PreferMultiSampling If LoadOffsetMaps = 0 Then Core.GameOptions.LoadOffsetMaps = Me.LoadOffsetMaps Else Core.GameOptions.LoadOffsetMaps = 101 - Me.LoadOffsetMaps End If Core.GameOptions.ViewBobbing = Me.ViewBobbing Core.GameOptions.SaveOptions() SoundManager.PlaySound("save") End Sub Public Overrides Sub ToggledMute() If ScreenIndex = 5 Then Me.Muted = CInt(MusicManager.Muted) InitializeControls() End If End Sub #Region "ControlCommands" #Region "Switch" Private Sub SwitchToMain() Me._nextIndex = 0 Me._pageClosing = True End Sub Private Sub SwitchToGame() Me._nextIndex = 1 Me._pageClosing = True End Sub Private Sub SwitchToGraphics() Me._nextIndex = 2 Me._pageClosing = True End Sub Private Sub SwitchToBattle() Me._nextIndex = 3 Me._pageClosing = True End Sub Private Sub SwitchToControls() Me._nextIndex = 4 If PreScreen.Identification = Identifications.MainMenuScreen Then ScreenIndex = _nextIndex InitializeControls() Else Me._pageClosing = True End If End Sub Private Sub SwitchToAudio() Me._nextIndex = 5 If PreScreen.Identification = Identifications.MainMenuScreen Then ScreenIndex = _nextIndex InitializeControls() Else Me._pageClosing = True End If End Sub Private Sub SwitchToLanguage() GetLanguages() If Languages.Contains(currentLanguage) = True Then languageMenuIndex(0) = Languages.IndexOf(currentLanguage) TempLanguage = currentLanguage End If languageMenuIndex(1) = 0 languageMenuIndex(2) = 0 Me._nextIndex = 6 ScreenIndex = _nextIndex InitializeControls() End Sub Private Sub SwitchToContentPacks() If ScreenIndex <> 7 And ScreenIndex <> 8 Then GetPacks() packsMenuIndex(0) = 0 packsMenuIndex(1) = 0 packsMenuIndex(2) = 0 End If Me._nextIndex = 7 If ScreenIndex = 8 Then Me._pageClosing = True Else ScreenIndex = _nextIndex End If InitializeControls() End Sub Private Sub SwitchToPackInformation() If PackNames.Count > 0 Then Me._nextIndex = 8 Me._pageClosing = True End If ButtonPackInformation() End Sub #End Region #Region "SettingsGraphics" Private Sub ChangeFOV(ByVal c As ScrollBar) Me.FOV = c.Value End Sub Private Sub ChangeRenderDistance(ByVal c As ScrollBar) Me.RenderDistance = c.Value End Sub Private Sub ToggleGraphicsStyle(ByVal c As ToggleButton) If c.Toggled = True Then Me.GraphicStyle = 1 Else Me.GraphicStyle = 0 End If End Sub Private Sub ChangeOffsetMaps(ByVal c As ScrollBar) Me.LoadOffsetMaps = c.Value End Sub Private Sub ToggleMultiSampling(ByVal c As ToggleButton) Me.PreferMultiSampling = Not Me.PreferMultiSampling End Sub #End Region #Region "SettingsGame" Private Sub ToggleBobbing(ByVal c As ToggleButton) Me.ViewBobbing = Not Me.ViewBobbing End Sub Private Sub ChangeTextspeed(ByVal c As ScrollBar) Me.TextSpeed = c.Value End Sub Private Sub ChangeDifficulty(ByVal c As ScrollBar) Me.Difficulty = c.Value End Sub #End Region #Region "SettingsBattle" Private Sub ToggleShowModels(ByVal c As ToggleButton) If Me.ShowModels = 0 Then Me.ShowModels = 1 Else Me.ShowModels = 0 End If End Sub Private Sub ToggleAnimations(ByVal c As ToggleButton) If Me.ShowBattleAnimations <> 1 Then Me.ShowBattleAnimations = 1 Else Me.ShowBattleAnimations = 0 End If End Sub Private Sub ToggleBattleStyle(ByVal c As ToggleButton) If Me.BattleStyle = 0 Then Me.BattleStyle = 1 Else Me.BattleStyle = 0 End If End Sub #End Region #Region "SettingsControls" Private Sub ToggleXBOX360Controller(ByVal c As ToggleButton) Me.GamePadEnabled = Not Me.GamePadEnabled End Sub Private Sub ToggleRunningToggle(ByVal c As ToggleButton) Me.RunMode = Not Me.RunMode End Sub Private Sub ChangeCameraSpeed(ByVal c As ScrollBar) Me.CameraSpeed = c.Value End Sub Private Sub ResetKeyBindings(ByVal c As CommandButton) KeyBindings.CreateKeySave(True) KeyBindings.LoadKeys() End Sub #End Region #Region "SettingsAudio" Private Sub ChangeMusicVolume(ByVal c As ScrollBar) Me.Music = c.Value ApplyAudioChange() End Sub Private Sub ChangeSoundVolume(ByVal c As ScrollBar) Me.Sound = c.Value ApplyAudioChange() End Sub Private Sub ToggleMute(ByVal c As ToggleButton) If Me.Muted = 0 Then Me.Muted = 1 Else Me.Muted = 0 End If ApplyAudioChange() End Sub Private Sub ApplyAudioChange() MusicManager.Muted = CBool(Me.Muted) SoundManager.Muted = CBool(Me.Muted) MusicManager.MasterVolume = CSng(Me.Music / 100) SoundManager.Volume = CSng(Me.Sound / 100) End Sub Private Sub AudioSave() MusicManager.MasterVolume = CSng(Me.Music / 100) SoundManager.Volume = CSng(Me.Sound / 100) MusicManager.Muted = CBool(Me.Muted) SoundManager.Muted = CBool(Me.Muted) Core.GameOptions.SaveOptions() SoundManager.PlaySound("save") _closing = True End Sub #End Region #Region "SettingsLanguage" Private Sub LanguageApply() If currentLanguage <> Languages(languageMenuIndex(0)) Then currentLanguage = Languages(languageMenuIndex(0)) End If Localization.Load(currentLanguage) Core.GameOptions.SaveOptions() SoundManager.PlaySound("save") _closing = True End Sub #End Region #End Region #Region "Controls" MustInherit Class Control Public Property ControlType As String Public MustOverride Sub Draw() Public MustOverride Sub Update(ByRef s As NewOptionScreen) Public _position As Vector2 = New Vector2(0) Public _size As Integer = 1 Public Property ID As Integer Public Property Size As Integer Get Return Me._size End Get Set(value As Integer) Me._size = value End Set End Property Sub New() End Sub End Class Class ToggleButton Inherits Control Private _buttonWidth As Integer = 1 Private _text As String = "" Private _toggled As Boolean = False Public Property Position As Vector2 Get Return _position End Get Set(value As Vector2) Me._position = value End Set End Property Public Property ButtonWidth As Integer Get Return Me._buttonWidth End Get Set(value As Integer) Me._buttonWidth = value End Set End Property Public Property Text As String Get Return Me._text End Get Set(value As String) Me._text = value End Set End Property Public Property Toggled As Boolean Get Return Me._toggled End Get Set(value As Boolean) Me._toggled = value End Set End Property Public Delegate Sub OnToggle(ByVal T As ToggleButton) Public OnToggleTrigger As OnToggle Public Settings As New List(Of String) Public Sub New(ByVal TriggerSub As OnToggle) MyBase.New Me.OnToggleTrigger = TriggerSub End Sub Public Sub New(ByVal Position As Vector2, ByVal ButtonWidth As Integer, ByVal Size As Integer, ByVal Text As String, ByVal Toggled As Boolean, ByVal TriggerSub As OnToggle, ID As Integer) Me.New(Position, Size, ButtonWidth, Text, Toggled, TriggerSub, New List(Of String), ID) End Sub Public Sub New(ByVal Position As Vector2, ByVal ButtonWidth As Integer, ByVal Size As Integer, ByVal Text As String, ByVal Toggled As Boolean, ByVal TriggerSub As OnToggle, ByVal Settings As List(Of String), ID As Integer) MyBase.New Me._position = Position Me._buttonWidth = ButtonWidth Me.ControlType = "ToggleButton" Me.Size = Size Me._text = Text Me._toggled = Toggled Me.ID = ID Me.OnToggleTrigger = TriggerSub Me.Settings = Settings End Sub Public Overrides Sub Draw() Dim s As NewOptionScreen = CType(CurrentScreen, NewOptionScreen) Dim pos As Vector2 = Me.Position Dim c As Color = New Color(255, 255, 255, CInt(255 * s._interfaceFade * s._pageFade)) Dim size As Integer = Me.Size Dim ToggleDivider As String = ": " If Me.Text = "" Then ToggleDivider = "" End If Dim B As New Vector2 Dim t As String = Me.Text Dim textColor As New Color If Toggled Then t &= ToggleDivider & Settings(1) B.X = 16 B.Y = 32 textColor = (New Color(255, 255, 255, CInt(255 * s._interfaceFade * s._pageFade))) Else t &= ToggleDivider & Settings(0) B.X = 16 B.Y = 16 textColor = (New Color(0, 0, 0, CInt(255 * s._interfaceFade * s._pageFade))) End If Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X), CInt(pos.Y), size, size), New Rectangle(CInt(B.X), CInt(B.Y), 16, 16), c) Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X) + size, CInt(pos.Y), size * ButtonWidth, size), New Rectangle(CInt(B.X) + 16, CInt(B.Y), 16, 16), c) Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X) + size * (ButtonWidth + 1), CInt(pos.Y), size, size), New Rectangle(CInt(B.X), CInt(B.Y), 16, 16), c, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Dim fontWidth As Integer = CInt(FontManager.MainFont.MeasureString(t).X * 1.0) Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(CInt((pos.X + (size * (2 + ButtonWidth) - fontWidth) * 0.5F)), CInt(pos.Y) + CInt(16 * size / 64)), textColor, 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) End Sub Public Overrides Sub Update(ByRef s As NewOptionScreen) If ScreenIndex = 7 And Me.ID = 3 Then If isSelectedEnabled = False Then Me.Toggled = False Else Me.Toggled = True End If ElseIf ScreenIndex = 8 Then If isSelectedEnabled = False Then Me.Toggled = False Else Me.Toggled = True End If End If Dim r As New Rectangle(CInt(_position.X), CInt(_position.Y), (2 + ButtonWidth) * Size, Size) If r.Contains(MouseHandler.MousePosition) = True Then If P3D.Controls.Accept(True, False, False) = True Then Me._toggled = Not Me._toggled OnToggleTrigger(Me) SoundManager.PlaySound("select") End If End If If Controls.Accept(False, True, True) Then If Position = s._cursorDestPosition Then Me._toggled = Not Me._toggled OnToggleTrigger(Me) SoundManager.PlaySound("select") End If End If End Sub End Class Class CommandButton Inherits Control Private _buttonWidth As Integer = 1 Private _text As String = "" Private TextureY As Integer Public Property Position As Vector2 Get Return _position End Get Set(value As Vector2) Me._position = value End Set End Property Public Property ButtonWidth As Integer Get Return Me._buttonWidth End Get Set(value As Integer) Me._buttonWidth = value End Set End Property Public Property Text As String Get Return Me._text End Get Set(value As String) Me._text = value End Set End Property Public Delegate Sub OnClick(ByVal C As CommandButton) Public OnClickTrigger As OnClick Public Sub New(ByVal ClickSub As OnClick) MyBase.New Me.OnClickTrigger = ClickSub End Sub Public Sub New(ByVal Position As Vector2, ByVal ButtonWidth As Integer, ByVal Size As Integer, ByVal Text As String, ByVal ClickSub As OnClick, ByVal ID As Integer) MyBase.New Me._position = Position Me._buttonWidth = ButtonWidth Me.ControlType = "CommandButton" Me.Size = Size Me._text = Text Me.ID = ID Me.OnClickTrigger = ClickSub TextureY = 16 End Sub Public Overrides Sub Draw() Dim s As NewOptionScreen = CType(CurrentScreen, NewOptionScreen) Dim pos As Vector2 = Me.Position Dim c As Color = New Color(255, 255, 255, CInt(255 * s._interfaceFade * s._pageFade)) Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X), CInt(pos.Y), Size, Size), New Rectangle(16, TextureY, 16, 16), c) Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X) + Size, CInt(pos.Y), Size * ButtonWidth, Size), New Rectangle(32, TextureY, 16, 16), c) Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X) + Size * (ButtonWidth + 1), CInt(pos.Y), Size, Size), New Rectangle(16, TextureY, 16, 16), c, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Dim fontWidth As Integer = CInt(FontManager.MainFont.MeasureString(Text).X * 1.0) Core.SpriteBatch.DrawString(FontManager.MainFont, Text, New Vector2(CInt((pos.X + (Size * (2 + ButtonWidth) - fontWidth) * 0.5F)), CInt(pos.Y) + CInt(16 * Size / 64)), New Color(0, 0, 0, CInt(255 * s._interfaceFade * s._pageFade)), 0.0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0.0F) End Sub Public Overrides Sub Update(ByRef s As NewOptionScreen) Dim r As New Rectangle(CInt(_position.X), CInt(_position.Y), (2 + ButtonWidth) * Size, Size) Dim Click As Boolean = False If s._pageClosing = False And s._pageOpening = False Then If r.Contains(MouseHandler.MousePosition) = True Then If P3D.Controls.Accept(True, False, False) = True Then SoundManager.PlaySound("select") Click = True OnClickTrigger(Me) End If End If If Click = True Then TextureY = 32 End If If MouseHandler.ButtonUp(MouseHandler.MouseButtons.LeftButton) Then TextureY = 16 Click = False End If If Controls.Accept(False, True, True) = True Then If Position = s._cursorDestPosition Then SoundManager.PlaySound("select") OnClickTrigger(Me) End If End If If KeyBoardHandler.KeyDown(KeyBindings.EnterKey1) = True Or KeyBoardHandler.KeyDown(KeyBindings.EnterKey2) = True Or ControllerHandler.ButtonDown(Buttons.A) = True Then If Position = s._cursorDestPosition Then TextureY = 32 Else TextureY = 16 End If End If Else Click = False End If End Sub End Class Class ScrollBar Inherits Control Private _value As Integer = 0 Private _max As Integer = 0 Private _min As Integer = 0 Private _text As String = "" Private _drawPercentage As Boolean = False Public Property Position As Vector2 Get Return _position End Get Set(value As Vector2) Me._position = value End Set End Property Public Property Value As Integer Get Return Me._value End Get Set(value As Integer) Me._value = value End Set End Property Public Property Max As Integer Get Return Me._max End Get Set(value As Integer) Me._max = value End Set End Property Public Property Min As Integer Get Return Me._min End Get Set(value As Integer) Me._min = value End Set End Property Public Property Text As String Get Return Me._text End Get Set(value As String) Me._text = value End Set End Property Public Property DrawPercentage As Boolean Get Return Me._drawPercentage End Get Set(value As Boolean) Me._drawPercentage = value End Set End Property Public Delegate Sub OnChange(ByVal S As ScrollBar) Public OnChangeTrigger As OnChange Public Settings As New Dictionary(Of Integer, String) Dim Selected As Boolean = False Dim Clicked As Boolean = False Public Sub New(ByVal ChangeSub As OnChange) MyBase.New Me.OnChangeTrigger = ChangeSub End Sub Public Sub New(ByVal Position As Vector2, ByVal Size As Integer, ByVal Text As String, ByVal Value As Integer, ByVal Min As Integer, ByVal Max As Integer, ByVal ChangeSub As OnChange, ID As Integer) Me.New(Position, Size, Text, Value, Min, Max, ChangeSub, New Dictionary(Of Integer, String), ID) End Sub Public Sub New(ByVal Position As Vector2, ByVal Size As Integer, ByVal Text As String, ByVal Value As Integer, ByVal Min As Integer, ByVal Max As Integer, ByVal ChangeSub As OnChange, ByVal Settings As Dictionary(Of Integer, String), ID As Integer) MyBase.New Me._position = Position Me.Size = Size Me._text = Text Me._value = Value Me._max = Max Me._min = Min Me.ControlType = "ScrollBar" Me.Settings = Settings Me.OnChangeTrigger = ChangeSub Me.ID = ID End Sub Public Overrides Sub Draw() Dim length As Integer = Size + 16 Dim height As Integer = 36 Dim s As NewOptionScreen = CType(CurrentScreen, NewOptionScreen) Dim pos As Vector2 = Me.Position Dim c As Color = New Color(255, 255, 255, CInt(255 * s._interfaceFade * s._pageFade)) Dim BarRectangle1 As Rectangle Dim BarRectangle2 As Rectangle Dim SliderRectangle As Rectangle Dim TextColor As Color If Selected OrElse Clicked Then BarRectangle1 = New Rectangle(0, 60, 12, 12) BarRectangle2 = New Rectangle(12, 60, 12, 12) SliderRectangle = New Rectangle(6, 32, 6, 12) TextColor = New Color(25, 67, 91, CInt(255 * s._interfaceFade * s._pageFade)) Else BarRectangle1 = New Rectangle(0, 48, 12, 12) BarRectangle2 = New Rectangle(12, 48, 12, 12) SliderRectangle = New Rectangle(0, 32, 6, 12) TextColor = New Color(0, 0, 0, CInt(255 * s._interfaceFade * s._pageFade)) End If Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X), CInt(pos.Y), height, height), BarRectangle1, c) Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X) + 36, CInt(pos.Y), length - 72, height), BarRectangle2, c) Core.SpriteBatch.Draw(s._menuTexture, New Rectangle(CInt(pos.X) + length - 36, CInt(pos.Y), height, height), BarRectangle1, c, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F) Core.SpriteBatch.Draw(s._menuTexture, GetSliderBox, SliderRectangle, c) Dim t As String = Text & ": " If Settings.ContainsKey(Value) = True Then t &= Settings(Value) Else If Me._drawPercentage = True Then t &= CStr(Me._value / (Me._max - Me._min) * 100) Else t &= Me._value.ToString() End If End If Core.SpriteBatch.DrawString(FontManager.MainFont, t, New Vector2(Me.Position.X + CSng((400 / 2) - (FontManager.MainFont.MeasureString(t).X / 2)), Me._position.Y + 6 - 32), TextColor) End Sub Public Overrides Sub Update(ByRef s As NewOptionScreen) If MouseHandler.ButtonDown(MouseHandler.MouseButtons.LeftButton) Then If GetSliderBox().Contains(MouseHandler.MousePosition.X, MouseHandler.MousePosition.Y) And Clicked = False Then Clicked = True Selected = False s._selectedScrollBar = False End If If Clicked = True Then Dim x As Double = MouseHandler.MousePosition.X - Me._position.X If x < 0 Then x = 0D End If If x > Me.Size + 16 Then x = Me.Size + 16 End If Me.Value = CInt(x * ((Me._max - Min) / 100) * (100 / Me._size)) + Min Me.Value = Value.Clamp(Min, Max) OnChangeTrigger(Me) End If Else Clicked = False If Selected Then If Controls.Dismiss(False, True, True) OrElse Controls.Accept(False, True, True) Then Selected = False s._selectedScrollBar = False ElseIf Controls.Left(True) Then Me.Value = Me.Value - 1 Me.Value = Value.Clamp(Min, Max) OnChangeTrigger(Me) ElseIf Controls.Right(True) Then Me.Value = Me.Value + 1 Me.Value = Value.Clamp(Min, Max) OnChangeTrigger(Me) End If Else If Controls.Accept(False, True, True) Then If s._cursorDestPosition.Y = Me.Position.Y Then Selected = True s._selectedScrollBar = True End If End If End If End If End Sub Private Function GetSliderBox() As Rectangle Dim x As Integer = CInt(((100 / (Me._max - Min)) * (Me._value - Min)) * (Size / 100)) If Me._value = Min Then x = 0 Else If x = 0 And _value > 0 Then x = 1 End If End If Return New Rectangle(x + CInt(Me.Position.X), CInt(Me.Position.Y), 18, 36) End Function End Class #End Region End Class