P3D-Legacy/P3D/Screens/OptionScreen.vb

783 lines
27 KiB
VB.net

Public Class OptionScreen
Inherits Screen
Dim TextSpeed As Integer = 2
Dim MouseSpeed As Integer = 12
Dim FOV As Single = 45.0F
Dim C As OverworldCamera
Dim Music As Integer = 50
Dim Sound As Integer = 50
Dim RenderDistance As Integer = 0
Dim GraphicStyle As Integer = 1
Dim ShowBattleAnimations As Integer = 0
Dim DiagonalMovement As Boolean = True
Dim Difficulty As Integer = 0
Dim BattleStyle As Integer = 0
Dim LoadOffsetMaps As Integer = 10
Dim ViewBobbing As Boolean = True
Dim ShowModels As Integer = 1
Dim Muted As Integer = 0
Dim GamePadEnabled As Boolean = True
Dim PreferMultiSampling As Boolean = True
Dim savedOptions As Boolean = True
Dim ScreenIndex As Integer = 0
Dim ControlList As New List(Of Control)
Shared YScroll As Integer = 0
Dim CanYScroll As Boolean = False
Dim YScrollLimit As Integer = 0
Dim CurrentPath As String = "Options"
Public Sub New(ByVal currentScreen As Screen)
Me.Identification = Identifications.OptionScreen
Me.PreScreen = currentScreen
Me.CanChat = False
Me.MouseVisible = True
Me.CanBePaused = False
Me.C = CType(Screen.Camera, OverworldCamera)
Me.FOV = C.FOV
Me.TextSpeed = TextBox.TextSpeed
Me.MouseSpeed = CInt(C.RotationSpeed * 10000)
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.Difficulty = Core.Player.DifficultyMode
Me.BattleStyle = Core.Player.BattleStyle
Me.ShowModels = CInt(Core.Player.ShowModelsInBattle)
Me.Muted = CInt(MediaPlayer.IsMuted.ToNumberString())
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
InitializeControls()
End Sub
Public Overrides Sub Draw()
Me.PreScreen.Draw()
Canvas.DrawImageBorder(TextureManager.GetTexture(TextureManager.GetTexture("GUI\Menus\Menu"), New Rectangle(0, 0, 48, 48)), 2, New Rectangle(60, 100, 800, 480))
Core.SpriteBatch.DrawString(FontManager.InGameFont, Me.CurrentPath, New Vector2(80, 130), Color.Black)
If savedOptions = False Then
Core.SpriteBatch.DrawString(FontManager.MiniFont, Localization.GetString("option_screen_warning"), New Vector2(90 + FontManager.InGameFont.MeasureString(Localization.GetString("option_screen_title")).X, 138), Color.DarkRed)
End If
For Each C As Control In ControlList
C.Draw()
Next
End Sub
Public Overrides Sub Update()
If CanYScroll = True Then
If Controls.Down(True, False, True, False, False) = True Then
YScroll += 1
End If
If Controls.Up(True, False, True, False, False) = True Then
YScroll -= 1
End If
YScroll = YScroll.Clamp(0, YScrollLimit)
Else
YScroll = 0
End If
For i = 0 To ControlList.Count
If i <= ControlList.Count - 1 Then
ControlList(i).Update()
End If
Next
If net.Pokemon3D.Game.Controls.Dismiss(True, True, True) = True Then
Close()
End If
End Sub
Private Sub InitializeControls()
Me.ControlList.Clear()
YScroll = 0
Select Case Me.ScreenIndex
Case 0 ' Main Options menu.
Me.ControlList.Add(New CommandButton(New Vector2(100, 200), 6, "Game", AddressOf SwitchToGame))
Me.ControlList.Add(New CommandButton(New Vector2(340, 200), 6, "Graphics", AddressOf SwitchToGraphics))
Me.ControlList.Add(New CommandButton(New Vector2(580, 200), 6, "Battle", AddressOf SwitchToBattle))
Me.ControlList.Add(New CommandButton(New Vector2(220, 320), 6, "Controls", AddressOf SwitchToControls))
Me.ControlList.Add(New CommandButton(New Vector2(460, 320), 6, "Volume", AddressOf SwitchToVolume))
Me.ControlList.Add(New CommandButton(New Vector2(120, 480), 6, "Apply", AddressOf Apply))
Me.ControlList.Add(New CommandButton(New Vector2(630, 480), 6, "Close", AddressOf Close))
Case 1 ' "Game" from the Options menu.
Me.ControlList.Add(New ScrollBar(New Vector2(100, 200), 400, "Text Speed", Me.TextSpeed, 1, 3, AddressOf ChangeTextspeed))
If CBool(GameModeManager.GetGameRuleValue("LockDifficulty", "0")) = False Then
Dim d As New Dictionary(Of Integer, String)
d.Add(0, "Easy")
d.Add(1, "Hard")
d.Add(2, "Super Hard")
Me.ControlList.Add(New ScrollBar(New Vector2(100, 250), 400, "Difficulty", Me.Difficulty, 0, 2, AddressOf ChangeDifficulty, d))
End If
Me.ControlList.Add(New ToggleButton(New Vector2(100, 300), 8, "View Bobbing", Me.ViewBobbing, AddressOf ToggleBobbing, {"Off", "On"}.ToList()))
Me.ControlList.Add(New CommandButton(New Vector2(364, 480), 6, "Back", AddressOf SwitchToMain))
Case 2 ' "Graphics" from the Options menu.
Me.ControlList.Add(New ScrollBar(New Vector2(100, 200), 400, "Field of View", CInt(Me.FOV), 45, 120, AddressOf ChangeFOV))
Dim d As New Dictionary(Of Integer, String)
d.Add(0, "Tiny")
d.Add(1, "Small")
d.Add(2, "Normal")
d.Add(3, "Far")
d.Add(4, "Extreme")
Me.ControlList.Add(New ScrollBar(New Vector2(100, 250), 400, "Render Distance", Me.RenderDistance, 0, 4, AddressOf ChangeRenderDistance, d))
Dim d1 As New Dictionary(Of Integer, String)
d1.Add(0, "Off")
Me.ControlList.Add(New ScrollBar(New Vector2(100, 300), 400, "Offset Map Quality", Me.LoadOffsetMaps, 0, 100, AddressOf ChangeOffsetMaps, d1))
Me.ControlList.Add(New ToggleButton(New Vector2(100, 350), 8, "Graphics", CBool(Me.GraphicStyle), AddressOf ToggleGraphicsStyle, {"Fast", "Fancy"}.ToList()))
Me.ControlList.Add(New ToggleButton(New Vector2(400, 350), 8, "Multi Sampling", Me.PreferMultiSampling, AddressOf ToggleMultiSampling, {"Off", "On"}.ToList()))
Me.ControlList.Add(New CommandButton(New Vector2(364, 480), 6, "Back", AddressOf SwitchToMain))
Case 3 ' "Battle" from the Options menu.
Me.ControlList.Add(New ToggleButton(New Vector2(100, 200), 8, "3D Models", CBool(ShowModels), AddressOf ToggleShowModels, {"Off", "On"}.ToList()))
Me.ControlList.Add(New ToggleButton(New Vector2(400, 200), 8, "Animations", CBool(Me.ShowBattleAnimations), AddressOf ToggleAnimations, {"Off", "On"}.ToList()))
Me.ControlList.Add(New ToggleButton(New Vector2(100, 320), 8, "Battle Style", CBool(Me.BattleStyle), AddressOf ToggleBattleStyle, {"Shift", "Set"}.ToList()))
Me.ControlList.Add(New CommandButton(New Vector2(364, 480), 6, "Back", AddressOf SwitchToMain))
Case 4 ' "Controls" from the Options menu.
Dim d As New Dictionary(Of Integer, String)
d.Add(1, "...Slow...")
d.Add(12, "Standard")
d.Add(38, "Super fast!")
d.Add(50, "SPEED OF LIGHT!")
Me.ControlList.Add(New ScrollBar(New Vector2(100, 200), 400, "Mouse Speed", Me.MouseSpeed, 1, 50, AddressOf ChangeMouseSpeed, d))
Me.ControlList.Add(New CommandButton(New Vector2(100, 250), 9, "Reset Key Bindings", AddressOf ResetKeyBindings))
Me.ControlList.Add(New ToggleButton(New Vector2(100, 370), 12, "Xbox 360 Gamepad", Me.GamePadEnabled, AddressOf ToggleXBOX360Controller, {"Disabled", "Enabled"}.ToList()))
Me.ControlList.Add(New CommandButton(New Vector2(364, 480), 6, "Back", AddressOf SwitchToMain))
Case 5 ' "Volume" from the Options menu.
Me.ControlList.Add(New ScrollBar(New Vector2(100, 200), 400, "Music Volume", Me.Music, 0, 100, AddressOf ChangeMusicVolume))
Me.ControlList.Add(New ScrollBar(New Vector2(100, 250), 400, "Sound Volume", Me.Sound, 0, 100, AddressOf ChangeSoundVolume))
Me.ControlList.Add(New ToggleButton(New Vector2(100, 300), 8, "Muted", CBool(Me.Muted), AddressOf ToggleMute, {"No", "Yes"}.ToList()))
Me.ControlList.Add(New CommandButton(New Vector2(364, 480), 6, "Back", AddressOf SwitchToMain))
End Select
End Sub
Private Sub Apply()
Save()
Close()
End Sub
Private Sub Close()
YScroll = 0
Core.SetScreen(Me.PreScreen)
End Sub
Private Sub Reset()
Me.FOV = 45.0F
Me.TextSpeed = 2
Me.MouseSpeed = 12
Me.Music = 50
Me.Sound = 50
Me.RenderDistance = 2
Me.GraphicStyle = 1
Me.ShowBattleAnimations = 2
Me.DiagonalMovement = False
Me.Difficulty = 0
Me.BattleStyle = 0
Me.LoadOffsetMaps = 10
Me.ViewBobbing = True
Me.ShowModels = 1
Me.Muted = 0
Me.GamePadEnabled = True
Me.PreferMultiSampling = True
End Sub
Private Sub Save()
C.CreateNewProjection(Me.FOV)
TextBox.TextSpeed = Me.TextSpeed
C.RotationSpeed = CSng(Me.MouseSpeed / 10000)
MusicManager.MasterVolume = CSng(Me.Music / 100)
SoundManager.Volume = CSng(Me.Sound / 100)
MusicManager.Mute(CBool(Me.Muted))
SoundManager.Mute(CBool(Me.Muted))
Core.GameOptions.RenderDistance = Me.RenderDistance
Core.GameOptions.GraphicStyle = Me.GraphicStyle
Screen.Level.World.Initialize(Screen.Level.EnvironmentType, Screen.Level.WeatherType)
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")
Me.PreScreen.Update()
End Sub
Public Overrides Sub ToggledMute()
If Me.ScreenIndex = 5 Then
Me.Muted = CInt(MediaPlayer.IsMuted)
InitializeControls()
End If
End Sub
#Region "ControlCommands"
#Region "Switch"
Private Sub SwitchToMain()
CurrentPath = "Options"
Me.ScreenIndex = 0
CanYScroll = False
YScrollLimit = 0
InitializeControls()
End Sub
Private Sub SwitchToGame()
CurrentPath = "Options > Game"
Me.ScreenIndex = 1
CanYScroll = False
YScrollLimit = 0
InitializeControls()
End Sub
Private Sub SwitchToGraphics()
CurrentPath = "Options > Graphics"
Me.ScreenIndex = 2
CanYScroll = False
YScrollLimit = 0
InitializeControls()
End Sub
Private Sub SwitchToBattle()
CurrentPath = "Options > Battle"
Me.ScreenIndex = 3
CanYScroll = False
YScrollLimit = 0
InitializeControls()
End Sub
Private Sub SwitchToControls()
CurrentPath = "Options > Controls"
Me.ScreenIndex = 4
CanYScroll = False
YScrollLimit = 0
InitializeControls()
End Sub
Private Sub SwitchToVolume()
CurrentPath = "Options > Volume"
Me.ScreenIndex = 5
CanYScroll = False
YScrollLimit = 0
InitializeControls()
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 = 0 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 ChangeMouseSpeed(ByVal c As ScrollBar)
Me.MouseSpeed = c.Value
End Sub
Private Sub ResetKeyBindings(ByVal c As CommandButton)
KeyBindings.CreateKeySave(True)
KeyBindings.LoadKeys()
End Sub
#End Region
#Region "SettingsVolume"
Private Sub ChangeMusicVolume(ByVal c As ScrollBar)
Me.Music = c.Value
ApplyMusicChange()
End Sub
Private Sub ChangeSoundVolume(ByVal c As ScrollBar)
Me.Sound = c.Value
ApplyMusicChange()
End Sub
Private Sub ToggleMute(ByVal c As ToggleButton)
If Me.Muted = 0 Then
Me.Muted = 1
Else
Me.Muted = 0
End If
ApplyMusicChange()
End Sub
Private Sub ApplyMusicChange()
MusicManager.Mute(CBool(Me.Muted))
SoundManager.Mute(CBool(Me.Muted))
MusicManager.MasterVolume = CSng(Me.Music / 100)
SoundManager.Volume = CSng(Me.Sound / 100)
End Sub
#End Region
#End Region
#Region "Controls"
MustInherit Class Control
Public MustOverride Sub Draw()
Public MustOverride Sub Update()
End Class
Class ToggleButton
Inherits Control
Private _position As Vector2 = New Vector2(0)
Private _size 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 Size As Integer
Get
Return Me._size
End Get
Set(value As Integer)
Me._size = 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)
Me.OnToggleTrigger = TriggerSub
End Sub
Public Sub New(ByVal Position As Vector2, ByVal Size As Integer, ByVal Text As String, ByVal Toggled As Boolean, ByVal TriggerSub As OnToggle)
Me.New(Position, Size, Text, Toggled, TriggerSub, New List(Of String))
End Sub
Public Sub New(ByVal Position As Vector2, ByVal Size As Integer, ByVal Text As String, ByVal Toggled As Boolean, ByVal TriggerSub As OnToggle, ByVal Settings As List(Of String))
Me._position = Position
Me._size = Size
Me._text = Text
Me._toggled = Toggled
Me.OnToggleTrigger = TriggerSub
Me.Settings = Settings
End Sub
Public Overrides Sub Draw()
If _toggled = True Then
Canvas.DrawImageBorder(TextureManager.GetTexture(TextureManager.GetTexture("GUI\Menus\Menu"), New Rectangle(0, 48, 48, 48)), 2, New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, 32 * _size, 64))
Else
Canvas.DrawImageBorder(TextureManager.GetTexture(TextureManager.GetTexture("GUI\Menus\Menu"), New Rectangle(0, 0, 48, 48)), 2, New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, 32 * _size, 64))
End If
Dim t As String = Me.Text
If Settings.Count = 2 Then
If Toggled = True Then
t &= ": " & Settings(1)
Else
t &= ": " & Settings(0)
End If
End If
Core.SpriteBatch.DrawString(FontManager.InGameFont, t, New Vector2(CInt(_position.X) + CInt(((Me._size * 32 + 20) / 2) - (FontManager.InGameFont.MeasureString(t).X / 2)), CInt(_position.Y) + 32 + YScroll), Color.Black)
End Sub
Public Overrides Sub Update()
Dim r As New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, 32 * _size, 96)
If r.Contains(MouseHandler.MousePosition) = True Then
If net.Pokemon3D.Game.Controls.Accept(True, False, False) = True Then
Me._toggled = Not Me._toggled
OnToggleTrigger(Me)
End If
End If
End Sub
End Class
Class CommandButton
Inherits Control
Private _position As Vector2 = New Vector2(0)
Private _size As Integer = 1
Private _text As String = ""
Public Property Position As Vector2
Get
Return _position
End Get
Set(value As Vector2)
Me._position = value
End Set
End Property
Public Property Size As Integer
Get
Return Me._size
End Get
Set(value As Integer)
Me._size = 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)
Me.OnClickTrigger = ClickSub
End Sub
Public Sub New(ByVal Position As Vector2, ByVal Size As Integer, ByVal Text As String, ByVal ClickSub As OnClick)
Me._position = Position
Me._size = Size
Me._text = Text
Me.OnClickTrigger = ClickSub
End Sub
Public Overrides Sub Draw()
Dim r As New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, Me._size * 32 + 32, 96)
If r.Contains(MouseHandler.MousePosition) = True Then
Canvas.DrawImageBorder(TextureManager.GetTexture(TextureManager.GetTexture("GUI\Menus\Menu"), New Rectangle(48, 0, 48, 48)), 2, New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, 32 * _size, 64))
Else
Canvas.DrawImageBorder(TextureManager.GetTexture(TextureManager.GetTexture("GUI\Menus\Menu"), New Rectangle(0, 0, 48, 48)), 2, New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, 32 * _size, 64))
End If
Core.SpriteBatch.DrawString(FontManager.InGameFont, Me._text, New Vector2(CInt(_position.X) + CInt(((Me._size * 32 + 20) / 2) - (FontManager.InGameFont.MeasureString(Me._text).X / 2)), CInt(_position.Y) + 32 + YScroll), Color.Black)
End Sub
Public Overrides Sub Update()
Dim r As New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, 32 * _size + 32, 96)
If r.Contains(MouseHandler.MousePosition) = True Then
If net.Pokemon3D.Game.Controls.Accept(True, False, False) = True Then
OnClickTrigger(Me)
End If
End If
End Sub
End Class
Class ScrollBar
Inherits Control
Private _size As Integer = 0
Private _value As Integer = 0
Private _max As Integer = 0
Private _min As Integer = 0
Private _position As Vector2 = New Vector2(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 Size As Integer
Get
Return Me._size
End Get
Set(value As Integer)
Me._size = 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 clicked As Boolean = False
Public Sub New(ByVal ChangeSub As OnChange)
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)
Me.New(Position, Size, Text, Value, Min, Max, ChangeSub, New Dictionary(Of Integer, String))
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))
Me._position = Position
Me._size = Size
Me._text = Text
Me._value = Value
Me._max = Max
Me._min = Min
Me.Settings = Settings
Me.OnChangeTrigger = ChangeSub
End Sub
Public Overrides Sub Draw()
Dim length As Integer = _size + 16
Dim height As Integer = 32
Canvas.DrawRectangle(New Rectangle(CInt(_position.X) - 2, CInt(_position.Y) - 2 + YScroll, length + 4, height + 4), Color.Black)
Dim c As Color = Color.White
If Me.clicked = True Then
c = New Color(101, 142, 255)
End If
Canvas.DrawRectangle(New Rectangle(CInt(_position.X), CInt(_position.Y) + YScroll, length, height), c)
Canvas.DrawRectangle(GetSliderRectangle, Color.Black)
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
c = Color.Gray
If Me.clicked = True Then
c = Color.White
End If
Core.SpriteBatch.DrawString(FontManager.MiniFont, t, New Vector2(Me.Position.X + CSng((Me.Size / 2) - (FontManager.MiniFont.MeasureString(t).X / 2)), Me._position.Y + 6), c)
End Sub
Public Overrides Sub Update()
If MouseHandler.ButtonDown(MouseHandler.MouseButtons.LeftButton) = True Then
If GetSliderRectangle().Contains(MouseHandler.MousePosition.X, MouseHandler.MousePosition.Y) = True And clicked = False Then
clicked = True
End If
Else
clicked = 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
End Sub
Private Function GetSliderRectangle() 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) + YScroll, 16, 32)
End Function
End Class
#End Region
End Class