315 lines
12 KiB
VB.net
315 lines
12 KiB
VB.net
Public Class NewMenuScreen
|
|
|
|
Inherits Screen
|
|
|
|
Private _menuOptions As New List(Of String)
|
|
Private _menuIndex As Integer = 0
|
|
|
|
Private _texture As Texture2D
|
|
|
|
'Intro animation:
|
|
Private _gradientFade As Integer = 0
|
|
Private _buttonFadeIndex As Integer = 0
|
|
Private _currentButtonFade As Integer = 0
|
|
Private _buttonIntroFinished As Boolean = False
|
|
|
|
'cursor animation:
|
|
Private _cursorPosition As Vector2 = New Vector2(0, 0)
|
|
Private _cursorDestPosition As Vector2 = New Vector2(0, 0)
|
|
|
|
Private _preScreenTexture As RenderTarget2D
|
|
Private _preScreenTarget As RenderTarget2D
|
|
|
|
|
|
Public Sub New(ByVal currentScreen As Screen)
|
|
Identification = Identifications.MenuScreen
|
|
PreScreen = currentScreen
|
|
IsDrawingGradients = True
|
|
|
|
MouseVisible = True
|
|
_preScreenTarget = New RenderTarget2D(GraphicsDevice, windowSize.Width, windowSize.Height, False, SurfaceFormat.Color, DepthFormat.Depth24Stencil8)
|
|
_texture = TextureManager.GetTexture("GUI\Menus\General")
|
|
|
|
ConstructMenu()
|
|
|
|
_menuIndex = Player.Temp.MenuIndex
|
|
SetCursorPosition(_menuIndex)
|
|
_cursorPosition = _cursorDestPosition
|
|
|
|
_blur = New Resources.GaussianEffect(windowSize.Width, windowSize.Height)
|
|
End Sub
|
|
|
|
Private Sub ConstructMenu()
|
|
If Core.Player.HasPokedex = True Then
|
|
_menuOptions.Add("Pokédex")
|
|
End If
|
|
|
|
If Screen.Level.IsBugCatchingContest = True Then
|
|
_menuOptions.AddRange({Screen.Level.BugCatchingContestData.GetSplit(2) & " x" & Core.Player.Inventory.GetItemAmount(177),
|
|
"Bag",
|
|
"|||" & Core.Player.Name, 'Trainer card
|
|
"End Contest"})
|
|
Else
|
|
If Core.Player.Pokemons.Count > 0 Then
|
|
_menuOptions.Add("Pokémon")
|
|
End If
|
|
_menuOptions.AddRange({"Bag",
|
|
"|||" & Core.Player.Name,
|
|
"Save"})
|
|
End If
|
|
|
|
_menuOptions.Add("Options")
|
|
End Sub
|
|
|
|
Private _blur As Resources.GaussianEffect
|
|
|
|
Private Sub DrawPrescreen()
|
|
If _preScreenTexture Is Nothing OrElse _preScreenTexture.IsContentLost Then
|
|
SpriteBatch.EndBatch()
|
|
|
|
Dim target As RenderTarget2D = _preScreenTarget
|
|
GraphicsDevice.SetRenderTarget(target)
|
|
GraphicsDevice.Clear(BackgroundColor)
|
|
|
|
SpriteBatch.BeginBatch()
|
|
|
|
PreScreen.Draw()
|
|
|
|
SpriteBatch.EndBatch()
|
|
|
|
GraphicsDevice.SetRenderTarget(Nothing)
|
|
|
|
SpriteBatch.BeginBatch()
|
|
|
|
_preScreenTexture = target
|
|
End If
|
|
|
|
SpriteBatch.Draw(_blur.Perform(_preScreenTexture), windowSize, Color.White)
|
|
End Sub
|
|
|
|
Public Overrides Sub Draw()
|
|
DrawPrescreen()
|
|
|
|
DrawGradients(_gradientFade)
|
|
|
|
If Me.IsCurrentScreen() = True Then
|
|
'Draw buttons:
|
|
If _gradientFade = 255 Then
|
|
If Core.Player.IsGameJoltSave = True Then
|
|
GameJolt.Emblem.Draw(GameJolt.API.username, Core.GameJoltSave.GameJoltID, Core.GameJoltSave.Points, Core.GameJoltSave.Gender, Core.GameJoltSave.Emblem, New Vector2(CSng(Core.windowSize.Width / 2 - 256), 30), 4, Core.GameJoltSave.DownloadedSprite)
|
|
End If
|
|
|
|
For i = 0 To _menuOptions.Count - 1
|
|
Dim text As String = _menuOptions(i).Replace("|||", "")
|
|
|
|
If _buttonIntroFinished = True Or _buttonFadeIndex > i Then
|
|
Dim pos = GetButtonPosition(i)
|
|
|
|
Core.SpriteBatch.Draw(_texture, New Rectangle(CInt(pos.X), CInt(pos.Y), 64, 64), New Rectangle(16, 16, 16, 16), Color.White)
|
|
Core.SpriteBatch.Draw(_texture, New Rectangle(CInt(pos.X) + 64, CInt(pos.Y), 64 * 4, 64), New Rectangle(32, 16, 16, 16), Color.White)
|
|
Core.SpriteBatch.Draw(_texture, New Rectangle(CInt(pos.X) + 64 * 5, CInt(pos.Y), 64, 64), New Rectangle(16, 16, 16, 16), Color.White, 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, text, New Vector2(CInt(pos.X) + 20, CInt(pos.Y) + 16), Color.Black, 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
|
|
Else
|
|
Dim pos = GetButtonPosition(i)
|
|
|
|
Core.SpriteBatch.Draw(_texture, New Rectangle(CInt(pos.X), CInt(pos.Y), 64, 64), New Rectangle(16, 16, 16, 16), New Color(255, 255, 255, _currentButtonFade))
|
|
Core.SpriteBatch.Draw(_texture, New Rectangle(CInt(pos.X) + 64, CInt(pos.Y), 64 * 4, 64), New Rectangle(32, 16, 16, 16), New Color(255, 255, 255, _currentButtonFade))
|
|
Core.SpriteBatch.Draw(_texture, New Rectangle(CInt(pos.X) + 64 * 5, CInt(pos.Y), 64, 64), New Rectangle(16, 16, 16, 16), New Color(255, 255, 255, _currentButtonFade), 0.0F, Vector2.Zero, SpriteEffects.FlipHorizontally, 0.0F)
|
|
|
|
Core.SpriteBatch.DrawString(FontManager.MainFont, text, New Vector2(CInt(pos.X) + 20, CInt(pos.Y) + 16), New Color(0, 0, 0, _currentButtonFade), 0.0F, Vector2.Zero, 1.25F, SpriteEffects.None, 0.0F)
|
|
|
|
Exit For
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
DrawCursor()
|
|
Else
|
|
_buttonFadeIndex = 0
|
|
_currentButtonFade = 0
|
|
_buttonIntroFinished = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DrawCursor()
|
|
If _buttonIntroFinished = True Or _buttonFadeIndex > _menuIndex Then
|
|
Dim t As Texture2D = TextureManager.GetTexture("GUI\Menus\General", New Rectangle(0, 0, 16, 16), "")
|
|
Core.SpriteBatch.Draw(t, New Rectangle(CInt(_cursorPosition.X), CInt(_cursorPosition.Y), 64, 64), Color.White)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SetCursorPosition(ByVal _buttonIndex As Integer)
|
|
Dim pos = GetButtonPosition(_buttonIndex)
|
|
Dim cPosition As Vector2 = New Vector2(pos.X + 180, pos.Y - 42)
|
|
_cursorDestPosition = cPosition
|
|
End Sub
|
|
|
|
Private Function GetButtonPosition(ByVal index As Integer) As Vector2
|
|
'button size: 384x64
|
|
'space between buttons horizontally: 150
|
|
'space between buttons vertically: 80
|
|
|
|
Dim X As Single = 0F
|
|
Dim Y As Single = 0F
|
|
|
|
If (index Mod 2) = 0 Then
|
|
X = Core.ScreenSize.Width / 2.0F - 384 - 75
|
|
Else
|
|
X = Core.ScreenSize.Width / 2.0F + 75
|
|
End If
|
|
|
|
Select Case Math.Floor(index / 2)
|
|
Case 0
|
|
Y = (Core.ScreenSize.Height / 2.0F) - 64 - 80 - 32
|
|
Case 1
|
|
Y = (Core.ScreenSize.Height / 2.0F) - 32
|
|
Case 2
|
|
Y = (Core.ScreenSize.Height / 2.0F) + 32 + 80
|
|
End Select
|
|
|
|
Return New Vector2(X, Y)
|
|
End Function
|
|
|
|
Public Overrides Sub Update()
|
|
If _gradientFade < 255 Then
|
|
_gradientFade += 25
|
|
If _gradientFade >= 255 Then
|
|
_gradientFade = 255
|
|
End If
|
|
Else
|
|
If _buttonIntroFinished = False Then
|
|
_currentButtonFade += 45
|
|
If _currentButtonFade >= 255 Then
|
|
_currentButtonFade = 0
|
|
_buttonFadeIndex += 1
|
|
If _buttonFadeIndex > _menuOptions.Count - 1 Then
|
|
_buttonIntroFinished = True
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
If _buttonIntroFinished = True Then
|
|
Player.Temp.MenuIndex = _menuIndex
|
|
|
|
Dim preMenuIndex As Integer = _menuIndex
|
|
|
|
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 Math.Abs(_cursorDestPosition.Y - _cursorPosition.Y) < 5.0F Then
|
|
If Controls.Accept(True, False, False) = True Then
|
|
For i = 0 To _menuOptions.Count - 1
|
|
Dim pos = GetButtonPosition(i)
|
|
If New Rectangle(CInt(pos.X), CInt(pos.Y), 64 * 6, 64).Contains(MouseHandler.MousePosition) Then
|
|
If _menuIndex = i Then
|
|
_cursorPosition.X = _cursorDestPosition.X
|
|
|
|
PressButton()
|
|
Else
|
|
_menuIndex = i
|
|
_cursorDestPosition = New Vector2(MouseHandler.MousePosition.X, MouseHandler.MousePosition.Y - 42)
|
|
preMenuIndex = _menuIndex 'Prevent the update of the mouse position below.
|
|
Exit For
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
If Controls.Accept(False, True, True) = True Then
|
|
_cursorPosition.X = _cursorDestPosition.X
|
|
|
|
PressButton()
|
|
End If
|
|
End If
|
|
|
|
If Controls.Up(True, True, False, True, True, True) = True Then
|
|
If _menuIndex > 1 Then
|
|
_menuIndex -= 2
|
|
End If
|
|
End If
|
|
If Controls.Down(True, True, False, True, True, True) = True Then
|
|
If _menuIndex < _menuOptions.Count - 2 Then
|
|
_menuIndex += 2
|
|
End If
|
|
End If
|
|
If Controls.Right(True, True, True, True, True, True) = True Then
|
|
If _menuIndex < _menuOptions.Count - 1 Then
|
|
_menuIndex += 1
|
|
End If
|
|
End If
|
|
If Controls.Left(True, True, True, True, True, True) = True Then
|
|
If _menuIndex > 0 Then
|
|
_menuIndex -= 1
|
|
End If
|
|
End If
|
|
|
|
If _menuIndex <> preMenuIndex Then
|
|
SetCursorPosition(_menuIndex)
|
|
End If
|
|
End If
|
|
|
|
If Controls.Dismiss() = True Then
|
|
Core.SetScreen(PreScreen)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub PressButton()
|
|
Select Case _menuOptions(_menuIndex)
|
|
Case "Pokédex"
|
|
Core.SetScreen(New TransitionScreen(Core.CurrentScreen, New PokedexSelectScreen(Me), Color.White, False))
|
|
Case "Pokémon"
|
|
SetScreen(New PartyScreen(Me))
|
|
Case "Bag"
|
|
Core.SetScreen(New NewInventoryScreen(Me))
|
|
Case "|||" & Core.Player.Name
|
|
Core.SetScreen(New NewTrainerScreen(Me))
|
|
Case "Save"
|
|
Core.SetScreen(New SaveScreen(Me))
|
|
Case "Options"
|
|
Core.SetScreen(New NewOptionScreen(Me))
|
|
Case "Exit"
|
|
Core.SetScreen(PreScreen)
|
|
Case Screen.Level.BugCatchingContestData.GetSplit(2) & " x" & Core.Player.Inventory.GetItemAmount(177)
|
|
Me.ShowBalls()
|
|
Case "End Contest"
|
|
Me.EndContest()
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub ShowBalls()
|
|
''' Requires new scripting system
|
|
'Dim s As Screen = Me.PreScreen
|
|
'Construct.Controller.GetInstance().RunFromFile(Screen.Level.BugCatchingContestData.GetSplit(1))
|
|
'Core.SetScreen(s)
|
|
|
|
Dim s As Screen = Me.PreScreen
|
|
CType(s, OverworldScreen).ActionScript.StartScript(Screen.Level.BugCatchingContestData.GetSplit(1), 0)
|
|
Core.SetScreen(s)
|
|
End Sub
|
|
|
|
Private Sub EndContest()
|
|
''' Requires new scripting system
|
|
'Dim s As Screen = Me.PreScreen
|
|
'Construct.Controller.GetInstance().RunFromFile(Screen.Level.BugCatchingContestData.GetSplit(0))
|
|
'Core.SetScreen(s)
|
|
|
|
Dim s As Screen = Me.PreScreen
|
|
CType(s, OverworldScreen).ActionScript.StartScript(Screen.Level.BugCatchingContestData.GetSplit(0), 0)
|
|
Core.SetScreen(s)
|
|
End Sub
|
|
|
|
Public Overrides Sub SizeChanged()
|
|
SetCursorPosition(_menuIndex)
|
|
_cursorPosition = _cursorDestPosition
|
|
End Sub
|
|
|
|
End Class |