diff --git a/P3D/Content/GUI/Menus/MainMenu.png b/P3D/Content/GUI/Menus/MainMenu.png index 4e206196d..64a99907a 100644 Binary files a/P3D/Content/GUI/Menus/MainMenu.png and b/P3D/Content/GUI/Menus/MainMenu.png differ diff --git a/P3D/Content/Textures/UI/Options/Audio.png b/P3D/Content/Textures/UI/Options/Audio.png new file mode 100644 index 000000000..1813c902b Binary files /dev/null and b/P3D/Content/Textures/UI/Options/Audio.png differ diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj index 1403a78c6..68dba7703 100644 --- a/P3D/P3D.vbproj +++ b/P3D/P3D.vbproj @@ -27394,6 +27394,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/P3D/Screens/MainMenu/PressStartScreen.vb b/P3D/Screens/MainMenu/PressStartScreen.vb index 63be22924..09623c852 100644 --- a/P3D/Screens/MainMenu/PressStartScreen.vb +++ b/P3D/Screens/MainMenu/PressStartScreen.vb @@ -1041,7 +1041,7 @@ Public Class NewMainMenuScreen Case 0 _sprite = TextureManager.GetTexture("Textures\UI\Options\Language") Case 1 - _sprite = TextureManager.GetTexture("Textures\UI\OptionsMenu") + _sprite = TextureManager.GetTexture("Textures\UI\Options\Audio") Case 2 _sprite = TextureManager.GetTexture("Textures\UI\Options\Controls") Case 3 @@ -1392,6 +1392,9 @@ Public Class GameModeSelectionScreen Private _index As Integer = 0 Private _offset As Single = 0F + Private tempGameModesDisplay As String = "" + Private GameModeSplash As Texture2D = Nothing + Private Const WIDTH = 400 Private Const HEIGHT = 64 Private Const GAP = 32 @@ -1413,30 +1416,75 @@ Public Class GameModeSelectionScreen Public Overrides Sub Draw() PreScreen.Draw() + If GameModeSplash IsNot Nothing Then + SpriteBatch.DrawInterface(GameModeSplash, ScreenSize, Color.White) + End If + Dim text = "Select a GameMode" + Environment.NewLine + "to start the new game with." GetFontRenderer().DrawString(FontManager.InGameFont, text, New Vector2(30, 30), Color.White) + Dim _menuTexture As Texture2D = TextureManager.GetTexture("GUI\Menus\MainMenu") + 'Draw buttons Dim center = CInt(ScreenSize.Width / 2 + 320) For i = 0 To _gameModes.Length - 1 - Dim y = CType(i * (HEIGHT + GAP) + _offset + ScreenSize.Height / 2 - HEIGHT / 2, Integer) - Dim halfWidth = CType(WIDTH / 2, Integer) - Dim color = Screens.UI.ColorProvider.LightColor - Dim alphaColor = New Color(color.R, color.G, color.B, 0) + Dim ButtonY = CInt(i * (HEIGHT + GAP) + _offset + ScreenSize.Height / 2 - HEIGHT / 2) + Dim halfWidth = CInt(WIDTH / 2) + Dim ButtonColor = New Rectangle(0, 0, 16, 16) + Dim ButtonAccent = Screens.UI.ColorProvider.AccentColor(False, CInt(255)) If i = _index Then - color = Screens.UI.ColorProvider.AccentColor - alphaColor = New Color(color.R, color.G, color.B, 0) + ButtonColor = New Rectangle(40, 48, 16, 16) + ButtonAccent = New Color(84, 198, 216) End If - Canvas.DrawGradient(New Rectangle(center - halfWidth, y, 50, HEIGHT), alphaColor, color, True, -1) - Canvas.DrawRectangle(New Rectangle(center - halfWidth + 50, y, WIDTH - 100, HEIGHT), color) - Canvas.DrawGradient(New Rectangle(center + halfWidth - 50, y, 50, HEIGHT), color, alphaColor, True, -1) + For x = 0 To CInt(WIDTH / 16) + For y = 0 To CInt(HEIGHT / 16) + SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(x * 16 + (center - halfWidth)), CInt(y * 16 + ButtonY - 8), 16, 16), ButtonColor, Color.White) + Canvas.DrawRectangle(New Rectangle(CInt(center - halfWidth), CInt(ButtonY - 8), WIDTH + 16, 3), ButtonAccent) + Next + Next Dim displayText = _gameModes(i).Name Dim textSize = FontManager.InGameFont.MeasureString(displayText) - GetFontRenderer().DrawString(FontManager.InGameFont, displayText, New Vector2(center - halfWidth + 50, CType(y + HEIGHT / 2 - ((textSize.Y) / 2), Integer)), Color.White, 0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0F) + GetFontRenderer().DrawString(FontManager.InGameFont, displayText, New Vector2(center - halfWidth + 50 + 2, CType(ButtonY + HEIGHT / 2 - (textSize.Y / 2) + 2, Integer)), Color.Black, 0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0F) + GetFontRenderer().DrawString(FontManager.InGameFont, displayText, New Vector2(center - halfWidth + 50, CType(ButtonY + HEIGHT / 2 - (textSize.Y / 2), Integer)), Color.White, 0F, Vector2.Zero, 1.0F, SpriteEffects.None, 0F) Next + + 'Draw GameMode description box + If tempGameModesDisplay = "" Then + Dim GameMode As GameMode = GameModeManager.GetGameMode(_gameModes(_index).DirectoryName) + + Dim dispName As String = GameMode.Name + Dim dispDescription As String = GameMode.Description + Dim dispVersion As String = GameMode.Version + Dim dispAuthor As String = GameMode.Author + Dim dispContentPath As String = GameMode.ContentPath + + tempGameModesDisplay = Localization.GetString("gamemode_menu_name") & ": " & dispName & Environment.NewLine & + Localization.GetString("gamemode_menu_version") & ": " & dispVersion & Environment.NewLine & + Localization.GetString("gamemode_menu_author") & ": " & dispAuthor & Environment.NewLine & + Localization.GetString("gamemode_menu_contentpath") & ": " & dispContentPath & Environment.NewLine & + Localization.GetString("gamemode_menu_description") & ": " & dispDescription + End If + + Dim displayRect = New Rectangle(CInt(ScreenSize.Width / 2 - FontManager.InGameFont.MeasureString(tempGameModesDisplay).X - 32), CInt(ScreenSize.Height / 2 - FontManager.InGameFont.MeasureString(tempGameModesDisplay).Y / 2 - 32), CInt(FontManager.InGameFont.MeasureString(tempGameModesDisplay).X + 64), CInt(FontManager.InGameFont.MeasureString(tempGameModesDisplay).Y + 64)) + Dim ButtonWidth = CInt(displayRect.Width / 16) + Dim ButtonHeight = CInt(displayRect.Height / 16) + + For x = 0 To ButtonWidth + For y = 0 To ButtonHeight + SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(x * 16 + displayRect.X), CInt(y * 16) + displayRect.Y - 8, 16, 16), New Rectangle(40, 48, 16, 16), Color.White) + Next + Next + Canvas.DrawRectangle(New Rectangle(displayRect.X, displayRect.Y - 8, displayRect.Width + 16, 3), New Color(84, 198, 216)) + + SpriteBatch.DrawInterfaceString(FontManager.InGameFont, tempGameModesDisplay, New Vector2(displayRect.X + 32 + 2, displayRect.Y + 32 + 2), Color.Black) + SpriteBatch.DrawInterfaceString(FontManager.InGameFont, tempGameModesDisplay, New Vector2(displayRect.X + 32, displayRect.Y + 32), Color.White) + + 'Draw Arrow + SpriteBatch.Draw(_menuTexture, New Rectangle(CInt(displayRect.X + displayRect.Width + 16), CInt(displayRect.Y + (FontManager.InGameFont.MeasureString(tempGameModesDisplay).Y + 64) / 2 - 16), 16, 32), New Rectangle(64, 0, 16, 32), Color.White) + End Sub Public Overrides Sub Update() @@ -1445,9 +1493,13 @@ Public Class GameModeSelectionScreen If _index > 0 AndAlso Controls.Up(True, True, True, True, True, True) Then _index -= 1 + tempGameModesDisplay = "" + GameModeSplash = Nothing End If If _index < _gameModes.Length - 1 AndAlso Controls.Down(True, True, True, True, True, True) Then _index += 1 + tempGameModesDisplay = "" + GameModeSplash = Nothing End If If KeyBoardHandler.KeyPressed(KeyBindings.EscapeKey) Or KeyBoardHandler.KeyPressed(KeyBindings.BackKey1) Or KeyBoardHandler.KeyPressed(KeyBindings.BackKey2) Or MouseHandler.ButtonPressed(MouseHandler.MouseButtons.RightButton) Or ControllerHandler.ButtonPressed(Buttons.B) Then SoundManager.PlaySound("select") @@ -1471,6 +1523,19 @@ Public Class GameModeSelectionScreen _offset = targetOffset End If End If + + If GameModeSplash Is Nothing Then + Try + Dim fileName As String = GameController.GamePath & "\GameModes\" & _gameModes(_index).DirectoryName & "\GameMode.png" + If IO.File.Exists(fileName) = True Then + Using stream As IO.Stream = IO.File.Open(fileName, IO.FileMode.OpenOrCreate) + GameModeSplash = Texture2D.FromStream(GraphicsDevice, stream) + End Using + End If + Catch ex As Exception + Logger.Log(Logger.LogTypes.ErrorMessage, "MainMenuScreen.vb/UpdateNewGameMenu: An error occurred trying to load the splash image at """ & GameController.GamePath & "\GameModes\" & _gameModes(_index).DirectoryName & "\GameMode.png"". This could have been caused by an invalid file header. (Exception: " & ex.Message & ")") + End Try + End If End Sub Private Function GetTargetOffset() As Integer