P3D-Legacy/P3D/Input/UI/MessageBox.vb

107 lines
4.3 KiB
VB.net

Namespace UI
''' <summary>
''' Displays a message to the player.
''' </summary>
Public Class MessageBox
Inherits Screen
Private _fadeIn As Single = 0F
Private _closing As Boolean = False
Private _text As String = ""
Private Scale As Single = CInt(2.0F)
Private _width As Integer = 320
Private _height As Integer = 320
Private _backColor As Color = Color.Black
Private _textColor As Color = Color.White
Private _shadowColor As Color = Color.Black
''' <summary>
''' Creates a new instance of the message box class.
''' </summary>
''' <param name="currentScreen"></param>
Public Sub New(ByVal currentScreen As Screen)
PreScreen = currentScreen
Identification = Identifications.MessageBoxScreen
CanBePaused = False
CanChat = False
CanDrawDebug = True
CanGoFullscreen = True
CanMuteAudio = True
CanTakeScreenshot = True
MouseVisible = True
End Sub
''' <summary>
''' Displays the Message box.
''' </summary>
''' <param name="text">The text to display.</param>
Public Sub Show(ByVal text As String, Optional backColor As Color = Nothing, Optional textColor As Color = Nothing, Optional shadowColor As Color = Nothing)
_fadeIn = 0F
_text = text
_closing = False
If Not backColor = Nothing Then
_backColor = backColor
End If
If Not textColor = Nothing Then
_textColor = textColor
End If
If Not shadowColor = Nothing Then
_shadowColor = shadowColor
End If
Dim fontSize As Vector2 = FontManager.MainFont.MeasureString(_text) * Scale
If fontSize.X > 196 Then
_width = CInt(fontSize.X + 24)
End If
SetScreen(Me)
End Sub
Public Overrides Sub Draw()
PreScreen.Draw()
Dim fontSize As Vector2 = New Vector2(CInt(FontManager.MainFont.MeasureString(_text).X * Scale), CInt(FontManager.MainFont.MeasureString(_text).Y * Scale))
Canvas.DrawRectangle(windowSize, New Color(0, 0, 0, CInt(140 * _fadeIn)))
Dim boxRect = New Rectangle(CInt(windowSize.Width / 2 - _width / 2 - (_width / 10)),
CInt(windowSize.Height / 2 - _height / 2 - (_height / 5) * (1 - _fadeIn)),
CInt(_width + (_width / 5)),
CInt(_height + fontSize.Y))
Canvas.DrawRectangle(boxRect, New Color(_backColor.R, _backColor.G, _backColor.B, CInt(255 * _fadeIn)), True)
Core.SpriteBatch.DrawString(FontManager.MainFont, _text, New Vector2(CInt(windowSize.Width / 2.0F - fontSize.X / 2.0F + 2 * Scale), CInt(boxRect.Y + (boxRect.Height / 2) - fontSize.Y / 2.0F + 2 * Scale)), New Color(_shadowColor.R, _shadowColor.G, _shadowColor.B, CInt(255 * _fadeIn)), 0F, Vector2.Zero, Scale, SpriteEffects.None, 0F)
Core.SpriteBatch.DrawString(FontManager.MainFont, _text, New Vector2(CInt(windowSize.Width / 2.0F - fontSize.X / 2.0F), CInt(boxRect.Y + (boxRect.Height / 2) - fontSize.Y / 2.0F)), New Color(_textColor.R, _textColor.G, _textColor.B, CInt(255 * _fadeIn)), 0F, Vector2.Zero, Scale, SpriteEffects.None, 0F)
End Sub
Public Overrides Sub Update()
If _closing Then
If _fadeIn > 0.0F Then
_fadeIn = MathHelper.Lerp(0.0F, _fadeIn, 0.7F)
If _fadeIn - 0.01F <= 0.0F Then
_fadeIn = 0.0F
SetScreen(PreScreen)
End If
End If
Else
If _fadeIn < 1.0F Then
_fadeIn = MathHelper.Lerp(1.0F, _fadeIn, 0.95F)
If _fadeIn + 0.01F >= 1.0F Then
_fadeIn = 1.0F
End If
End If
If _fadeIn > 0.75F Then
If Controls.Dismiss(True, True, True) Or Controls.Accept(True, True, True) Then
_closing = True
End If
End If
End If
End Sub
End Class
End Namespace