274 lines
10 KiB
VB.net
274 lines
10 KiB
VB.net
Public Class PauseScreen
|
|
|
|
Inherits Screen
|
|
|
|
Dim mainIndex As Integer = 0
|
|
Dim quitIndex As Integer = 0
|
|
Dim mainTexture As Texture2D
|
|
Dim leftEscapeKey As Boolean = False
|
|
Dim menuIndex As Integer = 0
|
|
|
|
Dim canCreateAutosave As Boolean = True
|
|
|
|
Public Sub New(ByVal currentScreen As Screen)
|
|
Me.Identification = Identifications.PauseScreen
|
|
Me.CanBePaused = False
|
|
Me.MouseVisible = True
|
|
Me.CanChat = False
|
|
|
|
If Not currentScreen Is Nothing Then
|
|
Me.PreScreen = currentScreen
|
|
End If
|
|
|
|
Me.mainTexture = TextureManager.GetTexture("GUI\Menus\Menu")
|
|
|
|
If Core.Player.IsGameJoltSave = True Then
|
|
Me.canCreateAutosave = False
|
|
Else
|
|
If Me.PreScreen IsNot Nothing AndAlso Camera.Name IsNot Nothing Then
|
|
If Camera.Name <> "Overworld" Then
|
|
Me.canCreateAutosave = False
|
|
Else
|
|
Dim s As Screen = Me.PreScreen
|
|
While s.Identification <> Identifications.OverworldScreen And Not s.PreScreen Is Nothing
|
|
s = s.PreScreen
|
|
End While
|
|
If s.Identification = Identifications.OverworldScreen Then
|
|
If CType(s, OverworldScreen).ActionScript.IsReady = False Then
|
|
Me.canCreateAutosave = False
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Overrides Sub Draw()
|
|
Me.PreScreen.Draw()
|
|
|
|
Canvas.DrawRectangle(New Rectangle(0, 0, Core.ScreenSize.Width, Core.ScreenSize.Height), New Color(0, 0, 0, 150))
|
|
Dim pX As Integer = CInt(Core.ScreenSize.Width / 2) - CInt(FontManager.InGameFont.MeasureString(Localization.GetString("pause_menu_title")).X / 2)
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, Localization.GetString("pause_menu_title"), New Vector2(pX - 7, CInt(Core.ScreenSize.Height / 6.8) + 3), Color.Black)
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, Localization.GetString("pause_menu_title"), New Vector2(pX - 10, CInt(Core.ScreenSize.Height / 6.8)), Color.White)
|
|
|
|
If Me.menuIndex = 0 Then
|
|
DrawMenu()
|
|
Else
|
|
DrawQuit()
|
|
End If
|
|
|
|
If Me.canCreateAutosave = False Then
|
|
Dim text As String = Localization.GetString("pause_menu_autosave_fail")
|
|
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, text, New Vector2(9, Core.ScreenSize.Height - FontManager.InGameFont.MeasureString(text).Y), Color.Black)
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, text, New Vector2(5, Core.ScreenSize.Height - FontManager.InGameFont.MeasureString(text).Y - 4), Color.White)
|
|
End If
|
|
|
|
Dim d As New Dictionary(Of Buttons, String)
|
|
d.Add(Buttons.A, "Accept")
|
|
d.Add(Buttons.B, "Go back")
|
|
|
|
DrawGamePadControls(d)
|
|
End Sub
|
|
|
|
Public Overrides Sub Update()
|
|
If PreScreen.Identification = Identifications.OverworldScreen And JoinServerScreen.Online = True Then
|
|
Screen.Level.Update()
|
|
End If
|
|
|
|
Screen.TextBox.reDelay = 0.0F
|
|
|
|
If Me.menuIndex = 0 Then
|
|
UpdateMain()
|
|
Else
|
|
UpdateQuit()
|
|
End If
|
|
End Sub
|
|
|
|
#Region "MainMenu"
|
|
|
|
Private Sub DrawMenu()
|
|
For i = 0 To 1
|
|
Dim Text As String = ""
|
|
Select Case i
|
|
Case 0
|
|
Text = Localization.GetString("pause_menu_back_to_game")
|
|
Case 1
|
|
Text = Localization.GetString("pause_menu_quit_to_menu")
|
|
End Select
|
|
|
|
If i = mainIndex Then
|
|
Canvas.DrawImageBorder(TextureManager.GetTexture(mainTexture, New Rectangle(0, 48, 48, 48)), 2, New Rectangle(CInt(Core.ScreenSize.Width / 2) - 180, 220 + i * 128, 320, 64), True)
|
|
Else
|
|
Canvas.DrawImageBorder(TextureManager.GetTexture(mainTexture, New Rectangle(0, 0, 48, 48)), 2, New Rectangle(CInt(Core.ScreenSize.Width / 2) - 180, 220 + i * 128, 320, 64), True)
|
|
End If
|
|
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, Text, New Vector2(CInt(Core.ScreenSize.Width / 2) - (FontManager.InGameFont.MeasureString(Text).X / 2) - 10, 256 + i * 128), Color.Black)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub UpdateMain()
|
|
If Controls.Up(True, True, True) = True Then
|
|
Me.mainIndex -= 1
|
|
End If
|
|
If Controls.Down(True, True, True) = True Then
|
|
Me.mainIndex += 1
|
|
End If
|
|
|
|
If Core.GameInstance.IsMouseVisible = True Then
|
|
For i = 0 To 1
|
|
If Core.ScaleScreenRec(New Rectangle(CInt(Core.ScreenSize.Width / 2) - 180, 220 + i * 128, 320 + 32, 64 + 32)).Contains(MouseHandler.MousePosition) = True Then
|
|
Me.mainIndex = i
|
|
|
|
If Controls.Accept(True, False) = True Then
|
|
Select Case Me.mainIndex
|
|
Case 0
|
|
ClickContinue()
|
|
Case 1
|
|
ClickQuit()
|
|
End Select
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
Me.mainIndex = CInt(MathHelper.Clamp(Me.mainIndex, 0, 1))
|
|
|
|
If Controls.Accept(False, True) = True Then
|
|
Select Case Me.mainIndex
|
|
Case 0
|
|
ClickContinue()
|
|
Case 1
|
|
ClickQuit()
|
|
End Select
|
|
End If
|
|
|
|
If Controls.Dismiss() = True Or KeyBoardHandler.KeyPressed(KeyBindings.EscapeKey) = True And leftEscapeKey = True Or ControllerHandler.ButtonPressed(Buttons.Start) = True Then
|
|
ClickContinue()
|
|
End If
|
|
|
|
If KeyBoardHandler.KeyDown(KeyBindings.EscapeKey) = False And ControllerHandler.ButtonDown(Buttons.Start) = False Then
|
|
Me.leftEscapeKey = True
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ClickContinue()
|
|
Core.SetScreen(Me.PreScreen)
|
|
End Sub
|
|
|
|
Private Sub ClickQuit()
|
|
If Me.canCreateAutosave = True Then
|
|
QuitGame()
|
|
Else
|
|
Me.menuIndex = 1
|
|
Me.quitIndex = 0
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "QuitMenu"
|
|
|
|
Private Sub DrawQuit()
|
|
Dim pX As Integer = CInt(Core.ScreenSize.Width / 2) - CInt(FontManager.InGameFont.MeasureString(Localization.GetString("pause_menu_confirmation")).X / 2)
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, Localization.GetString("pause_menu_confirmation"), New Vector2(pX - 7, CInt(Core.ScreenSize.Height / 6.8) + 3 + 110), Color.Black)
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, Localization.GetString("pause_menu_confirmation"), New Vector2(pX - 10, CInt(Core.ScreenSize.Height / 6.8) + 110), Color.White)
|
|
|
|
For i = 0 To 1
|
|
Dim Text As String = ""
|
|
Dim x As Integer = 0
|
|
Select Case i
|
|
Case 0
|
|
Text = Localization.GetString("pause_menu_no")
|
|
x = -200
|
|
Case 1
|
|
Text = Localization.GetString("pause_menu_yes")
|
|
x = 200
|
|
End Select
|
|
|
|
If i = quitIndex Then
|
|
Canvas.DrawImageBorder(TextureManager.GetTexture(mainTexture, New Rectangle(0, 48, 48, 48)), 2, New Rectangle(CInt(Core.ScreenSize.Width / 2) - 180 + x, 320, 320, 64), True)
|
|
Else
|
|
Canvas.DrawImageBorder(TextureManager.GetTexture(mainTexture, New Rectangle(0, 0, 48, 48)), 2, New Rectangle(CInt(Core.ScreenSize.Width / 2) - 180 + x, 320, 320, 64), True)
|
|
End If
|
|
|
|
Core.SpriteBatch.DrawInterfaceString(FontManager.InGameFont, Text, New Vector2(CInt(Core.ScreenSize.Width / 2) - (FontManager.InGameFont.MeasureString(Text).X / 2) - 10 + x, 356), Color.Black)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub UpdateQuit()
|
|
If Controls.Left(True, True, True) = True Then
|
|
Me.quitIndex -= 1
|
|
End If
|
|
If Controls.Right(True, True, True) = True Then
|
|
Me.quitIndex += 1
|
|
End If
|
|
|
|
If Core.GameInstance.IsMouseVisible = True Then
|
|
For i = 0 To 1
|
|
Dim x As Integer = -200
|
|
If i = 1 Then
|
|
x = 200
|
|
End If
|
|
|
|
If Core.ScaleScreenRec(New Rectangle(CInt(Core.ScreenSize.Width / 2) - 180 + x, 320, 320 + 32, 64 + 32)).Contains(MouseHandler.MousePosition) = True Then
|
|
Me.quitIndex = i
|
|
|
|
If Controls.Accept(True, False) = True Then
|
|
Select Case Me.quitIndex
|
|
Case 0
|
|
ClickBack()
|
|
Case 1
|
|
ClickConfirmationQuit()
|
|
End Select
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
Me.quitIndex = CInt(MathHelper.Clamp(Me.quitIndex, 0, 1))
|
|
|
|
If Controls.Accept(False, True) = True Then
|
|
Select Case Me.quitIndex
|
|
Case 0
|
|
ClickBack()
|
|
Case 1
|
|
ClickConfirmationQuit()
|
|
End Select
|
|
End If
|
|
|
|
If Controls.Dismiss(False, True) = True Then
|
|
ClickBack()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ClickBack()
|
|
Me.menuIndex = 0
|
|
End Sub
|
|
|
|
Private Sub ClickConfirmationQuit()
|
|
Me.QuitGame()
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
Private Sub QuitGame()
|
|
If JoinServerScreen.Online = True Then
|
|
Core.ServersManager.ServerConnection.Disconnect()
|
|
End If
|
|
Chat.ClearChat()
|
|
ScriptStorage.Clear()
|
|
Core.SetScreen(New PressStartScreen())
|
|
Core.Player.loadedSave = False
|
|
End Sub
|
|
|
|
Public Overrides Sub ChangeTo()
|
|
MusicManager.MasterVolume /= 4
|
|
MusicManager.UpdateVolume()
|
|
End Sub
|
|
|
|
Public Overrides Sub ChangeFrom()
|
|
MusicManager.MasterVolume *= 4
|
|
MusicManager.UpdateVolume()
|
|
End Sub
|
|
End Class |