diff --git a/DangerousD/Content/Caveat-Bold.ttf b/DangerousD/Content/Caveat-Bold.ttf new file mode 100644 index 0000000..5b05296 Binary files /dev/null and b/DangerousD/Content/Caveat-Bold.ttf differ diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb index 97afe2e..18f7ea3 100644 --- a/DangerousD/Content/Content.mgcb +++ b/DangerousD/Content/Content.mgcb @@ -13,6 +13,27 @@ #---------------------------------- Content ---------------------------------# +#begin File.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:File.spritefont + +#begin Font_25.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Font_25.spritefont + +#begin Font2.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Font2.spritefont + #begin PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png /importer:TextureImporter /processor:TextureProcessor diff --git a/DangerousD/Content/File.spritefont b/DangerousD/Content/File.spritefont new file mode 100644 index 0000000..e38ede5 --- /dev/null +++ b/DangerousD/Content/File.spritefont @@ -0,0 +1,60 @@ + + + + + + + Handjet-ExtraLight.ttf + + + 70 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/DangerousD/Content/Font2.spritefont b/DangerousD/Content/Font2.spritefont new file mode 100644 index 0000000..be5084a --- /dev/null +++ b/DangerousD/Content/Font2.spritefont @@ -0,0 +1,60 @@ + + + + + + + JosefinSans-Bold.ttf + + + 100 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/DangerousD/Content/Font_25.spritefont b/DangerousD/Content/Font_25.spritefont new file mode 100644 index 0000000..7c44e57 --- /dev/null +++ b/DangerousD/Content/Font_25.spritefont @@ -0,0 +1,64 @@ + + + + + + + Arial + + + 25 + + + 0 + + + true + + + + + + + + + + + + ~ + + + а + я + + + + diff --git a/DangerousD/Content/Font_30.spritefont b/DangerousD/Content/Font_30.spritefont new file mode 100644 index 0000000..0c56f83 --- /dev/null +++ b/DangerousD/Content/Font_30.spritefont @@ -0,0 +1,64 @@ + + + + + + + Arial + + + 30 + + + 0 + + + true + + + + + + + + + + + + ~ + + + а + я + + + + diff --git a/DangerousD/Content/Handjet-ExtraLight.ttf b/DangerousD/Content/Handjet-ExtraLight.ttf new file mode 100644 index 0000000..feda022 Binary files /dev/null and b/DangerousD/Content/Handjet-ExtraLight.ttf differ diff --git a/DangerousD/Content/JosefinSans-Bold.ttf b/DangerousD/Content/JosefinSans-Bold.ttf new file mode 100644 index 0000000..190dce0 Binary files /dev/null and b/DangerousD/Content/JosefinSans-Bold.ttf differ diff --git a/DangerousD/GameCore/GUI/AbstractGui.cs b/DangerousD/GameCore/GUI/AbstractGui.cs index 4704620..892cb48 100644 --- a/DangerousD/GameCore/GUI/AbstractGui.cs +++ b/DangerousD/GameCore/GUI/AbstractGui.cs @@ -10,22 +10,23 @@ public abstract class AbstractGui : IDrawableObject { protected UIManager Manager = new(); protected List Elements = new(); - protected string font; + public AbstractGui() { } protected abstract void CreateUI(); - + private GraphicsDevice graphicsDevice; public virtual void Initialize(GraphicsDevice graphicsDevice) { - Manager.Initialize(font, graphicsDevice); + Manager.Initialize(graphicsDevice); + this.graphicsDevice = graphicsDevice; CreateUI(); } public virtual void LoadContent() { - Manager.LoadContent(AppManager.Instance.Content); + Manager.LoadContent(AppManager.Instance.Content, "Font"); } public virtual void Update(GameTime gameTime) diff --git a/DangerousD/GameCore/GUI/LoginGUI.cs b/DangerousD/GameCore/GUI/LoginGUI.cs new file mode 100644 index 0000000..16d64d4 --- /dev/null +++ b/DangerousD/GameCore/GUI/LoginGUI.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Xna.Framework; + +using MonogameLibrary.UI.Elements; +using MonogameLibrary.UI.Enums; + +namespace DangerousD.GameCore.GUI +{ + class LoginGUI : AbstractGui + { + protected override void CreateUI() + { + int screenWidth = AppManager.Instance.resolution.X; + int screenHeight = AppManager.Instance.resolution.Y; + + Elements.Add(new Label(Manager) { + rectangle = new Rectangle(screenWidth / 2 - 250, screenHeight / 6 - 50, 500, 100), + text = "Login", + scale = 0.8f, + fontColor = Color.White, + mainColor = Color.Transparent, + fontName = "font2" + }); + + // TextBox-ы + { + TextBox loginTextBox = new TextBox(Manager) + { + rectangle = new Rectangle(screenWidth / 2 - 125, screenHeight / 6 * 2 - 20, 250, 40), + text = "NickName", + scale = 0.16f, + fontColor = Color.Gray, + fontName = "font2", + textAligment = TextAligment.Left + }; + loginTextBox.TextChanged += input => { + if (loginTextBox.fontColor == Color.Gray) + { + loginTextBox.text = ""; loginTextBox.fontColor = Color.Black; + } + }; + + TextBox passwordTextBox = new TextBox(Manager) + { + rectangle = new Rectangle(screenWidth / 2 - 125, screenHeight / 6 * 3 - 40, 250, 40), + text = "Password", + scale = 0.16f, + fontColor = Color.Gray, + fontName = "font2", + textAligment = TextAligment.Left + }; + passwordTextBox.TextChanged += input => { + if (passwordTextBox.fontColor == Color.Gray) + { + passwordTextBox.text = ""; passwordTextBox.fontColor = Color.Black; + } + }; + } + + // Кнопки + { + Button logButton = new Button(Manager) { + rectangle = new Rectangle(screenWidth / 4 + 50, screenHeight / 6 * 4, 100, 50), + text = "LogIn", + scale = 0.2f, + fontColor = Color.Black, + fontName = "font2" + }; + logButton.LeftButtonPressed += () => { + AppManager.Instance.ChangeGameState(GameState.Lobby); + }; + + Button regButton = new Button(Manager) + { + rectangle = new Rectangle(screenWidth / 4 * 2 + 50, screenHeight / 6 * 4, 100, 50), + text = "Reg", + scale = 0.2f, + fontColor = Color.Black, + fontName = "font2" + }; + regButton.LeftButtonPressed += GoToRegWebServer; + + Button backButton = new Button(Manager) + { + rectangle = new Rectangle(screenWidth / 20, screenHeight / 15, 50, 50), + text = "<-", + scale = 0.3f, + fontColor = Color.Black, + fontName = "font2" + }; + backButton.LeftButtonPressed += () => { + AppManager.Instance.ChangeGameState(GameState.Menu); + }; + } + } + + private void GoToRegWebServer() + { + // TODO + } + } +} diff --git a/DangerousD/GameCore/GUI/MenuGUI.cs b/DangerousD/GameCore/GUI/MenuGUI.cs index 2103562..3aff1be 100644 --- a/DangerousD/GameCore/GUI/MenuGUI.cs +++ b/DangerousD/GameCore/GUI/MenuGUI.cs @@ -8,12 +8,31 @@ internal class MenuGUI : AbstractGui { protected override void CreateUI() { - Elements.Add(new CheckBox(Manager) { rectangle = new Rectangle(10, 10, 50, 50) }); - var but = new Button(Manager) { rectangle = new Rectangle(100, 10, 80, 50) }; - Elements.Add(but); - but.LeftButtonPressed += () => + int wigth = AppManager.Instance.Window.ClientBounds.Width; + int height = AppManager.Instance.Window.ClientBounds.Height; + var butSingle = new Button(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 130, 300, 50), text = "Singleplayer", fontName = "File" }; + Elements.Add(butSingle); + butSingle.LeftButtonPressed += () => { AppManager.Instance.ChangeGameState(GameState.Game); }; + var butMulti = new Button(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 190, 300, 50), text = "Multiplayer", fontName = "File" }; + Elements.Add(butMulti); + butMulti.LeftButtonPressed += () => + { + AppManager.Instance.ChangeGameState(GameState.Login); + }; + var butOption = new Button(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 250, 300, 50), text = "Option", fontName = "File" }; + Elements.Add(butOption); + butOption.LeftButtonPressed += () => + { + // открытие настроек + }; + var butExit = new Button(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 310, 300, 50), text = "Exit", fontName = "File" }; + Elements.Add(butExit); + butExit.LeftButtonPressed += () => + { + AppManager.Instance.Exit(); + }; } -} \ No newline at end of file +} \ No newline at end of file diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index c3c60fb..e45a378 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -10,16 +10,19 @@ using DangerousD.GameCore.Graphics; namespace DangerousD.GameCore { - public enum GameState { Menu, Options, Lobby, Game } + public enum GameState { Menu, Options, Lobby, Game, Login } public class AppManager : Game { public static AppManager Instance { get; private set; } private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; + public Point resolution; GameState gameState; IDrawableObject MenuGUI; IDrawableObject OptionsGUI; + IDrawableObject LoginGUI; IDrawableObject LobbyGUI; + public GameManager GameManager { get; private set; } public AnimationBuilder AnimationBuilder { get; private set; } = new AnimationBuilder(); public AppManager() @@ -30,22 +33,26 @@ namespace DangerousD.GameCore IsMouseVisible = true; TargetElapsedTime = TimeSpan.FromMilliseconds(1000 / 30); + resolution = new Point(_graphics.PreferredBackBufferWidth, _graphics.PreferredBackBufferHeight); GameManager = new GameManager(); gameState = GameState.Menu; MenuGUI = new MenuGUI(); + LoginGUI = new LoginGUI(); } protected override void Initialize() { - MenuGUI.Initialize(GraphicsDevice); AnimationBuilder.LoadAnimations(); + MenuGUI.Initialize(GraphicsDevice); + LoginGUI.Initialize(GraphicsDevice); base.Initialize(); } - protected override void LoadContent() + protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); MenuGUI.LoadContent(); + LoginGUI.LoadContent(); } protected override void Update(GameTime gameTime) @@ -61,6 +68,9 @@ namespace DangerousD.GameCore case GameState.Options: OptionsGUI.Update(gameTime); break; + case GameState.Login: + LoginGUI.Update(gameTime); + break; case GameState.Lobby: LobbyGUI.Update(gameTime); break; @@ -86,6 +96,9 @@ namespace DangerousD.GameCore case GameState.Options: OptionsGUI.Draw(_spriteBatch); break; + case GameState.Login: + LoginGUI.Draw(_spriteBatch); + break; case GameState.Lobby: LobbyGUI.Draw(_spriteBatch); break; @@ -110,6 +123,8 @@ namespace DangerousD.GameCore break; case GameState.Options: break; + case GameState.Login: + break; case GameState.Lobby: break; case GameState.Game: diff --git a/MonogameLibrary/UI/Base/DrawableTextedUiElement.cs b/MonogameLibrary/UI/Base/DrawableTextedUiElement.cs index 2a45c2c..0d64052 100644 --- a/MonogameLibrary/UI/Base/DrawableTextedUiElement.cs +++ b/MonogameLibrary/UI/Base/DrawableTextedUiElement.cs @@ -57,11 +57,11 @@ namespace MonogameLibrary.UI.Base spriteBatch.DrawString(spriteFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } - else if (textAligment == TextAligment.Center) + else if (textAligment == TextAligment.Left) { Vector2 pos = rectangle.Location.ToVector2(); pos.Y += (int)((rectangle.Height - measured.Y) / 2); - pos.X += (int)(2 * scale); + pos.X += (int)(2 * scale + rectangle.Width / 20); spriteBatch.DrawString(spriteFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } diff --git a/MonogameLibrary/UI/Base/DrawableUIElement.cs b/MonogameLibrary/UI/Base/DrawableUIElement.cs index b751308..54a0db5 100644 --- a/MonogameLibrary/UI/Base/DrawableUIElement.cs +++ b/MonogameLibrary/UI/Base/DrawableUIElement.cs @@ -30,7 +30,7 @@ namespace MonogameLibrary.UI.Base if (textureName == "") { texture = new Texture2D(Manager.GraphicsDevice, 1, 1); - texture.SetData(new Color[] { Color.White }); + texture.SetData(new Color[] { mainColor }); } else { @@ -41,7 +41,7 @@ namespace MonogameLibrary.UI.Base catch { texture = new Texture2D(Manager.GraphicsDevice, 1, 1); - texture.SetData(new Color[] { Color.White }); + texture.SetData(new Color[] { mainColor }); } } } diff --git a/MonogameLibrary/UI/Base/UIManager.cs b/MonogameLibrary/UI/Base/UIManager.cs index 96d72fc..505d012 100644 --- a/MonogameLibrary/UI/Base/UIManager.cs +++ b/MonogameLibrary/UI/Base/UIManager.cs @@ -16,16 +16,10 @@ namespace MonogameLibrary.UI.Base Dictionary> layerCollection = new(); public GraphicsDevice GraphicsDevice { get; private set; } public SpriteFont BaseFont { get; private set; } - public void Initialize(string font, GraphicsDevice graphicsDevice) + public void Initialize(GraphicsDevice graphicsDevice) { GraphicsDevice = graphicsDevice; - try - { - //BaseFont = _content.Load(font); - } - catch - { - } + for (int i = -10; i < 11; i++) { layerCollection.Add(i, new List()); @@ -35,8 +29,16 @@ namespace MonogameLibrary.UI.Base static MouseState mouseState, prevmouseState; static KeyboardState keyboardState; - public void LoadContent(ContentManager content) + public void LoadContent(ContentManager content, string font) { + + try + { + BaseFont = content.Load(font); + } + catch + { + } foreach (var collection in layerCollection) { foreach (var item in collection.Value)