Main Menu Work In Progress 28-09-2021

When selecting the Options button at the Main Menu, the top row moves up, revealing the Options row beneath it

When selecting the Options button at the Main Menu, the options row fades in now

The Options row now has the right amount of selectable buttons (4, not 5)

When selecting the Options button at the Main Menu, the top row doesn't reset position now

The distance between Options buttons is now the same as the top row
This commit is contained in:
JappaWakka 2021-09-28 15:34:12 +02:00
parent b0ca5ab1d9
commit ee42876afa
1 changed files with 153 additions and 63 deletions

View File

@ -248,14 +248,24 @@ Public Class NewMainMenuScreen
Inherits Screen Inherits Screen
Private _screenOffset As Vector2 = New Vector2(0, 0) 'Position of the main menu relative to the _screenOrigin Private _screenOffset As Vector2 = New Vector2(0, 0) 'Position of the top row relative to the _screenOrigin
Private _screenOffsetTarget As Vector2 = New Vector2(0, 0) 'Target where the main menu needs to move to Private _screenOffsetTarget As Vector2 = New Vector2(0, 0) 'Target where the top needs to move to
Private _screenOrigin As Vector2 = New Vector2(CSng(ScreenSize.Width / 2 - 80 - 180), CSng(ScreenSize.Height / 2 - 80)) 'Center of the game window. It's adjusted when resizing the window. Private _screenOrigin As Vector2 = New Vector2(CSng(ScreenSize.Width / 2 - 80 - 180), CSng(ScreenSize.Height / 2 - 80)) 'Center of the game window. It's adjusted when resizing the window.
Private _mainOffset As Vector2 = _screenOffset
Private _optionsOffset As Vector2 = New Vector2(0, 0) 'Position of the options row relative to the _screenOrigin
Private _optionsOffsetTarget As Vector2 = New Vector2(0, 0) 'Target where the options row needs to move to
Private _gameJoltOffset As Vector2 = New Vector2(0, 0) 'Position of the gamejolt row relative to the _screenOrigin
Private _gameJoltOffsetTarget As Vector2 = New Vector2(0, 0) 'Target where the gamejolt needs to move to
Private _loading As Boolean = True Private _loading As Boolean = True
Private _fadeInMain As Single = 0F Private _fadeInMain As Single = 0F
Private _fadeInOptions As Single = 0F Private _fadeInOptions As Single = 0F
Private _fadeInGameJolt As Single = 0F Private _fadeInGameJolt As Single = 0F
Private _GameJoltOpacity As Single = 0F
Private _expandDisplay As Single = 0F Private _expandDisplay As Single = 0F
Private _closingDisplay As Boolean = False Private _closingDisplay As Boolean = False
Private _displayTextFade As Single = 0F Private _displayTextFade As Single = 0F
@ -268,8 +278,9 @@ Public Class NewMainMenuScreen
Private _MainProfiles As New List(Of GameProfile) Private _MainProfiles As New List(Of GameProfile)
Private _GameJoltProfiles As New List(Of GameProfile) Private _GameJoltProfiles As New List(Of GameProfile)
Private _OptionProfiles As New List(Of GameProfile) Private _OptionsProfiles As New List(Of GameProfile)
Private _selectedProfile As Integer = 1 Public Shared _selectedProfile As Integer = 1
Public Shared _selectedProfileTemp As Integer = _selectedProfile
Private _GameJoltButtonIndex As Integer = 0 'This is to tell which button on a GameJolt profile is selected: the profile itself or the gender & reset buttons Private _GameJoltButtonIndex As Integer = 0 'This is to tell which button on a GameJolt profile is selected: the profile itself or the gender & reset buttons
Public Shared _menuIndex As Integer = 0 '0 = Game Profiles, 1 = GameJolt Submenu, 2 = Options Submenu, 3 = GameJolt Options Submenu Public Shared _menuIndex As Integer = 0 '0 = Game Profiles, 1 = GameJolt Submenu, 2 = Options Submenu, 3 = GameJolt Options Submenu
@ -286,10 +297,18 @@ Public Class NewMainMenuScreen
_menuTexture = TextureManager.GetTexture("GUI\Menus\MainMenu") _menuTexture = TextureManager.GetTexture("GUI\Menus\MainMenu")
_oldMenuTexture = TextureManager.GetTexture("GUI\Menus\Menu") _oldMenuTexture = TextureManager.GetTexture("GUI\Menus\Menu")
_screenOffset.X = 0 _screenOffset = New Vector2(0, 0)
_screenOffsetTarget.X = _screenOffset.X _screenOffsetTarget = _screenOffset
_screenOffset.Y = 0
_screenOffsetTarget.Y = _screenOffset.Y _mainOffset = _screenOffset
_optionsOffset = New Vector2(0, 0)
_optionsOffsetTarget = _optionsOffset
_gameJoltOffset = New Vector2(0, 0)
_gameJoltOffsetTarget = _gameJoltOffset
_selectedProfile = 1
_sliderTarget = GetSliderTarget(_selectedProfile) _sliderTarget = GetSliderTarget(_selectedProfile)
_sliderPosition = _sliderTarget _sliderPosition = _sliderTarget
@ -301,15 +320,23 @@ Public Class NewMainMenuScreen
Public Overrides Sub Update() Public Overrides Sub Update()
PreScreen.Update() PreScreen.Update()
If _loading = False Then If _loading = False Then
'Shift the top row horizontally
_mainOffset.X = _screenOffset.X
'Shift the main menu vertically 'Shift the main menu vertically
Select Case _menuIndex Select Case _menuIndex
Case 0 Case 0
_screenOffsetTarget.Y = 0 _screenOffsetTarget.Y = 0
Case 1, 2 _optionsOffsetTarget.X = _screenOffsetTarget.X
Case 1
_screenOffsetTarget.Y = -180 - 32
_optionsOffsetTarget.X = _gameJoltOffsetTarget.X
Case 2
_screenOffsetTarget.Y = -180 - 32 _screenOffsetTarget.Y = -180 - 32
Case 3 Case 3
_screenOffsetTarget.Y = -320 - 32 _screenOffsetTarget.Y = -320 - 32
End Select End Select
'Fade in Options row
If _menuIndex = 2 Or _menuIndex = 3 Then If _menuIndex = 2 Or _menuIndex = 3 Then
If _fadeInOptions < 1.0F Then If _fadeInOptions < 1.0F Then
_fadeInOptions = MathHelper.Lerp(1.0F, _fadeInOptions, 0.93F) _fadeInOptions = MathHelper.Lerp(1.0F, _fadeInOptions, 0.93F)
@ -318,14 +345,16 @@ Public Class NewMainMenuScreen
End If End If
End If End If
Else Else
If _fadeInOptions > 1.0F Then If _fadeInOptions > 0.0F Then
_fadeInOptions = MathHelper.Lerp(0.0F, _fadeInOptions, -0.93F) _fadeInOptions = MathHelper.Lerp(0.0F, _fadeInOptions, 0.93F)
If _fadeInOptions + 0.01F <= 0.0F Then If _fadeInOptions - 0.01F <= 0.0F Then
_fadeInOptions = 0.0F _fadeInOptions = 0.0F
End If End If
End If End If
End If End If
If _fadeInMain < 1.0F Then
'Fade in the Top row
If _fadeInMain < 1.0F Then
_fadeInMain = MathHelper.Lerp(1.0F, _fadeInMain, 0.93F) _fadeInMain = MathHelper.Lerp(1.0F, _fadeInMain, 0.93F)
If _fadeInMain + 0.01F >= 1.0F Then If _fadeInMain + 0.01F >= 1.0F Then
_fadeInMain = 1.0F _fadeInMain = 1.0F
@ -383,16 +412,39 @@ Public Class NewMainMenuScreen
Next Next
End If End If
If CurrentScreen.Identification = Screen.Identifications.MainMenuScreen Then If CurrentScreen.Identification = Screen.Identifications.MainMenuScreen Then
If Controls.Right(True) And _selectedProfile < _MainProfiles.Count - 1 Then Select Case _menuIndex
_selectedProfile += 1 Case 0
_screenOffsetTarget.X -= 180 If Controls.Right(True) And _selectedProfile < _MainProfiles.Count - 1 Then
_GameJoltButtonIndex = 0 _selectedProfile += 1
End If _screenOffsetTarget.X -= 180
If Controls.Left(True) And _selectedProfile > 0 Then _GameJoltButtonIndex = 0
_selectedProfile -= 1 End If
_screenOffsetTarget.X += 180 If Controls.Left(True) And _selectedProfile > 0 Then
_GameJoltButtonIndex = 0 _selectedProfile -= 1
End If _screenOffsetTarget.X += 180
_GameJoltButtonIndex = 0
End If
Case 1
If Controls.Right(True) And _selectedProfile < _GameJoltProfiles.Count - 1 Then
_selectedProfile += 1
_gameJoltOffsetTarget.X -= 180
_GameJoltButtonIndex = 0
End If
If Controls.Left(True) And _selectedProfile > 0 Then
_selectedProfile -= 1
_gameJoltOffsetTarget.X += 180
_GameJoltButtonIndex = 0
End If
Case 2, 3
If Controls.Right(True) And _selectedProfile < _OptionsProfiles.Count - 1 Then
_selectedProfile += 1
_optionsOffsetTarget.X -= 180
End If
If Controls.Left(True) And _selectedProfile > 0 Then
_selectedProfile -= 1
_optionsOffsetTarget.X += 180
End If
End Select
End If End If
If _MainProfiles(_selectedProfile).IsGameJolt AndAlso _MainProfiles(_selectedProfile).Loaded Then If _MainProfiles(_selectedProfile).IsGameJolt AndAlso _MainProfiles(_selectedProfile).Loaded Then
@ -405,8 +457,14 @@ Public Class NewMainMenuScreen
_GameJoltButtonIndex = Clamp(_GameJoltButtonIndex, 0, 3) _GameJoltButtonIndex = Clamp(_GameJoltButtonIndex, 0, 3)
End If End If
_selectedProfile = _selectedProfile.Clamp(0, _MainProfiles.Count - 1) Select Case _menuIndex
Case 0
_selectedProfile = _selectedProfile.Clamp(0, _MainProfiles.Count - 1)
Case 1
_selectedProfile = _selectedProfile.Clamp(0, _GameJoltProfiles.Count - 1)
Case 2, 3
_selectedProfile = _selectedProfile.Clamp(0, _OptionsProfiles.Count - 1)
End Select
If _fadeInMain = 1.0F Then If _fadeInMain = 1.0F Then
If Controls.Accept(False, True, True) Then If Controls.Accept(False, True, True) Then
Select Case _GameJoltButtonIndex Select Case _GameJoltButtonIndex
@ -454,29 +512,34 @@ Public Class NewMainMenuScreen
End If End If
Case 1, 2 Case 1, 2
_menuIndex = 0 _menuIndex = 0
_selectedProfile = _selectedProfileTemp
_sliderTarget = GetSliderTarget(_selectedProfile)
Case 3 Case 3
_menuIndex = 1 _menuIndex = 1
_selectedProfile = _selectedProfileTemp
_sliderTarget = GetSliderTarget(_selectedProfile)
End Select End Select
End If End If
If _fadeInMain = 1.0F Then If _fadeInMain = 1.0F Then
If _closingDisplay Then If _closingDisplay Then
If _expandDisplay > 0.0F Then If _expandDisplay > 0.0F Then
_expandDisplay = MathHelper.Lerp(0.0F, _expandDisplay, 0.9F) _expandDisplay = MathHelper.Lerp(0.0F, _expandDisplay, 0.9F)
If _expandDisplay - 0.01F <= 0.0F Then If _expandDisplay - 0.01F <= 0.0F Then
_expandDisplay = 0.0F _expandDisplay = 0.0F
End If
End If End If
Else End If
If _expandDisplay < 1.0F Then Else
_expandDisplay = MathHelper.Lerp(1.0F, _expandDisplay, 0.9F) If _expandDisplay < 1.0F Then
If _expandDisplay + 0.01F >= 1.0F Then _expandDisplay = MathHelper.Lerp(1.0F, _expandDisplay, 0.9F)
_expandDisplay = 1.0F If _expandDisplay + 0.01F >= 1.0F Then
End If _expandDisplay = 1.0F
End If End If
End If End If
End If End If
End If End If
UpdateScreenOffset() End If
UpdateScreenOffset()
UpdateOptionsOffset()
End If End If
End If End If
End Sub End Sub
@ -545,6 +608,32 @@ Public Class NewMainMenuScreen
End If End If
End If End If
End Sub End Sub
Private Sub UpdateOptionsOffset()
If _optionsOffset.X > _optionsOffsetTarget.X Then
_optionsOffset.X = MathHelper.Lerp(_optionsOffsetTarget.X, _optionsOffset.X, 0.93F)
If _optionsOffset.X - 0.01F <= _optionsOffsetTarget.X Then
_optionsOffset.X = _optionsOffsetTarget.X
End If
End If
If _optionsOffset.X < _optionsOffsetTarget.X Then
_optionsOffset.X = MathHelper.Lerp(_optionsOffsetTarget.X, _optionsOffset.X, 0.93F)
If _optionsOffset.X + 0.01F >= _optionsOffsetTarget.X Then
_optionsOffset.X = _optionsOffsetTarget.X
End If
End If
If _optionsOffset.Y > _optionsOffsetTarget.Y Then
_optionsOffset.Y = MathHelper.Lerp(_optionsOffsetTarget.Y, _optionsOffset.Y, 0.93F)
If _optionsOffset.Y - 0.01F <= _optionsOffsetTarget.Y Then
_optionsOffset.Y = _optionsOffsetTarget.Y
End If
End If
If _optionsOffset.Y < _optionsOffsetTarget.Y Then
_optionsOffset.Y = MathHelper.Lerp(_optionsOffsetTarget.Y, _optionsOffset.Y, 0.93F)
If _optionsOffset.Y + 0.01F >= _optionsOffsetTarget.Y Then
_optionsOffset.Y = _optionsOffsetTarget.Y
End If
End If
End Sub
Public Overrides Sub Draw() Public Overrides Sub Draw()
PreScreen.Draw() PreScreen.Draw()
@ -579,13 +668,13 @@ Public Class NewMainMenuScreen
Dim textSize As Vector2 = FontManager.InGameFont.MeasureString("Please wait..") Dim textSize As Vector2 = FontManager.InGameFont.MeasureString("Please wait..")
GetFontRenderer().DrawString(FontManager.InGameFont, "Please wait" & LoadingDots.Dots, New Vector2(windowSize.Width / 2.0F - textSize.X / 2.0F, windowSize.Height / 2.0F - textSize.Y / 2.0F + 100), Color.White) GetFontRenderer().DrawString(FontManager.InGameFont, "Please wait" & LoadingDots.Dots, New Vector2(windowSize.Width / 2.0F - textSize.X / 2.0F, windowSize.Height / 2.0F - textSize.Y / 2.0F + 100), Color.White)
Else Else
DrawMainProfiles()
Select Case _menuIndex Select Case _menuIndex
Case 2 Case 2
DrawOptionProfiles(False) DrawOptionsProfiles(False)
Case 3 Case 3
DrawOptionProfiles(True) DrawOptionsProfiles(True)
End Select End Select
DrawMainProfiles()
End If End If
End If End If
End Sub End Sub
@ -624,18 +713,14 @@ Public Class NewMainMenuScreen
End Sub End Sub
Private Sub DrawMainProfiles() Private Sub DrawMainProfiles()
Dim MoveOffset As Single = 0
If _menuIndex = 0 Then
MoveOffset = _screenOffset.X
End If
For x = 0 To _MainProfiles.Count - 1 For x = 0 To _MainProfiles.Count - 1
' Draw main profiles. ' Draw main profiles.
Dim xmain As Boolean = x = _selectedProfile Dim xmain As Boolean = x = _selectedProfile
If _menuIndex <> 0 Then If _menuIndex <> 0 Then
xmain = False xmain = False
End If End If
Dim xOffset As Single = _screenOrigin.X + MoveOffset + x * 180 + ((x + 1) * 100 * (1 - _fadeInMain)) Dim xOffset As Single = _screenOrigin.X + _mainOffset.X + x * 180 + ((x + 1) * 100 * (1 - _fadeInMain))
_MainProfiles(x).Draw(New Vector2(CInt(xOffset), CInt(_screenOrigin.Y + _screenOffset.Y)), CInt(_fadeInMain * 255), (xmain), _menuTexture) _MainProfiles(x).Draw(New Vector2(CInt(xOffset), CInt(_screenOrigin.Y + _screenOffset.Y)), CInt(_fadeInMain * 255), (xmain), _menuTexture)
If _MainProfiles(x).IsGameJolt AndAlso _MainProfiles(x).Loaded AndAlso (xmain) Then If _MainProfiles(x).IsGameJolt AndAlso _MainProfiles(x).Loaded AndAlso (xmain) Then
@ -646,7 +731,7 @@ Public Class NewMainMenuScreen
If _fadeInMain = 1.0F And _menuIndex = 0 Then If _fadeInMain = 1.0F And _menuIndex = 0 Then
' Draw arrow. ' Draw arrow.
If _MainProfiles(_selectedProfile).IsGameJolt = False Then If _MainProfiles(_selectedProfile).IsGameJolt = False Then
SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(_screenOrigin.X + _sliderPosition - 16), CInt(_screenOrigin.Y + 170), 32, 16), New Rectangle(0, 16, 32, 16), Color.White) SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(_screenOrigin.X + _sliderPosition - 16), CInt(_screenOrigin.Y + 170), 32, 16), New Rectangle(0, 16, 32, 16), New Color(0, 0, 0, CInt(_fadeInMain * 255)))
Else Else
SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(_screenOrigin.X + _sliderPosition - 16), CInt(_screenOrigin.Y + 170), 32, 16), New Rectangle(32, 16, 32, 16), Color.White) SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(_screenOrigin.X + _sliderPosition - 16), CInt(_screenOrigin.Y + 170), 32, 16), New Rectangle(32, 16, 32, 16), Color.White)
End If End If
@ -709,25 +794,28 @@ Public Class NewMainMenuScreen
End If End If
End Sub End Sub
Private Sub DrawOptionProfiles(IsGameJoltOptions As Boolean) Private Sub DrawOptionsProfiles(IsGameJoltOptions As Boolean)
' Draw profiles. ' Draw profiles.
For x = 0 To _OptionProfiles.Count - 1 For x = 0 To _OptionsProfiles.Count - 1
Dim xOffset As Single = _screenOrigin.X + _screenOffset.X + x * 180 + ((x + 1) * 100) Dim xOffset As Single = _screenOrigin.X + _optionsOffset.X + x * 180
_OptionProfiles(x).Draw(New Vector2(CInt(xOffset), CInt(_screenOrigin.Y)), CInt(_fadeInOptions * 255), (x = _selectedProfile), _menuTexture) _OptionsProfiles(x).Draw(New Vector2(CInt(xOffset), CInt(_screenOrigin.Y)), CInt(_fadeInOptions * 255), (x = _selectedProfile), _menuTexture)
Next Next
If _fadeInOptions = 1.0F Then ' Draw arrow.
' Draw arrow. If _menuIndex <> 0 Then
If _menuIndex <> 0 Then SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(_screenOrigin.X + _sliderPosition - 16), CInt(_screenOrigin.Y + 170), 32, 16), New Rectangle(32, 16, 32, 16), New Color(0, 0, 0, CInt(_fadeInOptions * 255)))
SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(_screenOrigin.X + _sliderPosition - 16), CInt(_screenOrigin.Y + 170), 32, 16), New Rectangle(32, 16, 32, 16), Color.White)
End If
End If End If
End Sub End Sub
Private Function GetSliderTarget(ByVal index As Integer) As Integer Private Function GetSliderTarget(ByVal index As Integer) As Integer
Return CInt(_screenOffset.X + index * 180 + 80) Select Case _menuIndex
Case 2, 3
Return CInt(_optionsOffset.X + index * 180 + 80)
Case Else
Return CInt(_screenOffset.X + index * 180 + 80)
End Select
End Function End Function
Public Overrides Sub ChangeTo() Public Overrides Sub ChangeTo()
@ -737,7 +825,7 @@ Public Class NewMainMenuScreen
't.Start() 't.Start()
LoadMainProfiles() LoadMainProfiles()
End If End If
If _OptionProfiles.Count = 0 Then If _OptionsProfiles.Count = 0 Then
LoadOptionProfiles() LoadOptionProfiles()
End If End If
End Sub End Sub
@ -769,10 +857,10 @@ Public Class NewMainMenuScreen
_loading = False _loading = False
End Sub End Sub
Private Sub LoadOptionProfiles() Private Sub LoadOptionProfiles()
_OptionProfiles.Add(New GameProfile("", False, False, 0)) _OptionsProfiles.Add(New GameProfile("", False, False, 0))
_OptionProfiles.Add(New GameProfile("", False, False, 1)) _OptionsProfiles.Add(New GameProfile("", False, False, 1))
_OptionProfiles.Add(New GameProfile("", False, False, 2)) _OptionsProfiles.Add(New GameProfile("", False, False, 2))
_OptionProfiles.Add(New GameProfile("", False, False, 3)) _OptionsProfiles.Add(New GameProfile("", False, False, 3))
End Sub End Sub
Private Class GameProfile Private Class GameProfile
@ -1230,6 +1318,8 @@ Public Class NewMainMenuScreen
messageBox.Show("The required GameMode does not exist." & Environment.NewLine & "Reaquire the GameMode to play on this profile.") messageBox.Show("The required GameMode does not exist." & Environment.NewLine & "Reaquire the GameMode to play on this profile.")
Else Else
_menuIndex = 2 _menuIndex = 2
_selectedProfileTemp = _selectedProfile
_selectedProfile = 0
'SetScreen(New NewOptionScreen(CurrentScreen)) 'SetScreen(New NewOptionScreen(CurrentScreen))
End If End If
End If End If