Merge branch 'main' into NetworkImplementation

This commit is contained in:
AnloGames 2023-08-17 21:58:18 +03:00
commit 175fcde099
33 changed files with 626 additions and 143 deletions

View file

@ -14,7 +14,14 @@
#---------------------------------- Content ---------------------------------# #---------------------------------- Content ---------------------------------#
#begin MonstersAnimations.png #begin ButtonFont.spritefont
/importer:FontDescriptionImporter
/processor:FontDescriptionProcessor
/processorParam:PremultiplyAlpha=True
/processorParam:TextureFormat=Compressed
/build:ButtonFont.spritefont
#begin checkboxs_off-on.png
/importer:TextureImporter /importer:TextureImporter
/processor:TextureProcessor /processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255 /processorParam:ColorKeyColor=255,0,255,255
@ -24,7 +31,31 @@
/processorParam:ResizeToPowerOfTwo=False /processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False /processorParam:MakeSquare=False
/processorParam:TextureFormat=Color /processorParam:TextureFormat=Color
/build:MonstersAnimations.png /build:checkboxs_off-on.png
#begin checkboxs_off.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:checkboxs_off.png
#begin checkboxs_on.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:checkboxs_on.png
#begin deathAnimation.png #begin deathAnimation.png
/importer:TextureImporter /importer:TextureImporter
@ -38,12 +69,17 @@
/processorParam:TextureFormat=Color /processorParam:TextureFormat=Color
/build:deathAnimation.png /build:deathAnimation.png
#begin ButtonFont.spritefont #begin deathBackground.jpg
/importer:FontDescriptionImporter /importer:TextureImporter
/processor:FontDescriptionProcessor /processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True /processorParam:PremultiplyAlpha=True
/processorParam:TextureFormat=Compressed /processorParam:ResizeToPowerOfTwo=False
/build:ButtonFont.spritefont /processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:deathBackground.jpg
#begin DoomTestSong.mp3 #begin DoomTestSong.mp3
/importer:Mp3Importer /importer:Mp3Importer
@ -51,6 +87,13 @@
/processorParam:Quality=Best /processorParam:Quality=Best
/build:DoomTestSong.mp3 /build:DoomTestSong.mp3
#begin Font_12.spritefont
/importer:FontDescriptionImporter
/processor:FontDescriptionProcessor
/processorParam:PremultiplyAlpha=True
/processorParam:TextureFormat=Compressed
/build:Font_12.spritefont
#begin Font_25.spritefont #begin Font_25.spritefont
/importer:FontDescriptionImporter /importer:FontDescriptionImporter
/processor:FontDescriptionProcessor /processor:FontDescriptionProcessor
@ -84,19 +127,6 @@
/processorParam:TextureFormat=Color /processorParam:TextureFormat=Color
/build:menuFon.jpg /build:menuFon.jpg
#begin MonstersAnimations.png
#begin menuFon.jpg
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:menuFon.jpg
#begin MenuFon2.jpg #begin MenuFon2.jpg
/importer:TextureImporter /importer:TextureImporter
/processor:TextureProcessor /processor:TextureProcessor
@ -121,6 +151,114 @@
/processorParam:TextureFormat=Color /processorParam:TextureFormat=Color
/build:menuFon3.jpg /build:menuFon3.jpg
#begin MonstersAnimations.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:MonstersAnimations.png
#begin optionsBackground.jpg
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:optionsBackground.jpg
#begin PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png
#begin slider.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:slider.png
#begin sliderBackground.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:sliderBackground.png
#begin textboxbackground1-1.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:textboxbackground1-1.png
#begin textboxbackground2-1.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:textboxbackground2-1.png
#begin textboxbackground2,5-1.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:textboxbackground2,5-1.png
#begin textboxbackground6-1.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:textboxbackground6-1.png
#begin tiles.png #begin tiles.png
/importer:TextureImporter /importer:TextureImporter
/processor:TextureProcessor /processor:TextureProcessor

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file contains an xml description of a font, and will be read by the XNA
Framework Content Pipeline. Follow the comments to customize the appearance
of the font in your game, and to change the characters which are available to draw
with.
-->
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<!--
Modify this string to change the font that will be imported.
-->
<FontName>Arial</FontName>
<!--
Size is a float value, measured in points. Modify this value to change
the size of the font.
-->
<Size>12</Size>
<!--
Spacing is a float value, measured in pixels. Modify this value to change
the amount of spacing in between characters.
-->
<Spacing>0</Spacing>
<!--
UseKerning controls the layout of the font. If this value is true, kerning information
will be used when placing characters.
-->
<UseKerning>true</UseKerning>
<!--
Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
and "Bold, Italic", and are case sensitive.
-->
<Style>Regular</Style>
<!--
If you uncomment this line, the default character will be substituted if you draw
or measure text that contains characters which were not included in the font.
-->
<!-- <DefaultCharacter>*</DefaultCharacter> -->
<!--
CharacterRegions control what letters are available in the font. Every
character from Start to End will be built and made available for drawing. The
default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
character set. The characters are ordered according to the Unicode standard.
See the documentation for more information.
-->
<CharacterRegions>
<CharacterRegion>
<Start>&#32;</Start>
<End>&#126;</End>
</CharacterRegion>
<CharacterRegion>
<Start>&#1072;</Start>
<End>&#1103;</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

View file

@ -752,7 +752,7 @@
</object> </object>
</objectgroup> </objectgroup>
<objectgroup id="10" name="Player" class="LivingEntities.Player"> <objectgroup id="10" name="Player" class="LivingEntities.Player">
<object id="47" x="-260" y="461.333"> <object id="47" x="-525" y="461.333">
<point/> <point/>
</object> </object>
</objectgroup> </objectgroup>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 7.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,33 @@
using DangerousD.GameCore.Managers;
using Microsoft.Xna.Framework;
using MonogameLibrary.UI.Base;
using MonogameLibrary.UI.Elements;
using System.Diagnostics;
using System.Runtime.Serialization;
namespace DangerousD.GameCore.GUI;
internal class DeathGUI : AbstractGui
{
protected override void CreateUI()
{
int wigth = AppManager.Instance.inGameResolution.X;
int height = AppManager.Instance.inGameResolution.Y;
var menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, wigth, height), textureName = "deathBackground" };
Elements.Add(menuBackground);
menuBackground.LoadTexture(AppManager.Instance.Content);
Elements.Add(new Label(Manager) { rectangle = new Rectangle((wigth - 50) / 2, (height - 50) / 2 - 80, 50, 50), text = "You death", mainColor = Color.Transparent, scale = 0.7f, fontName = "ButtonFont", fontColor = Color.White });
Elements.Add(new Label(Manager) { rectangle = new Rectangle((wigth - 50) / 2, (height - 50) / 2, 50, 50), text = $"Score = {0}", mainColor = Color.Transparent, scale = 0.7f, fontName = "ButtonFont", fontColor = Color.White });
var butMenu = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, (height - 50) / 2 + 80, 300, 50), text = "Back to menu", scale = 0.7f, fontName = "ButtonFont" };
Elements.Add(butMenu);
butMenu.LeftButtonPressed += () =>
{
AppManager.Instance.ChangeGameState(GameState.Menu);
};
}
public override void Update(GameTime gameTime)
{
base.Update(gameTime);
}
}

View file

@ -0,0 +1,50 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using MonogameLibrary.UI.Elements;
using static System.String;
namespace DangerousD.GameCore.GUI
{
public class DebugHUD : IDrawableObject
{
private SpriteFont _spriteFont;
private Dictionary<string, string> _text = new();
public void Initialize()
{
}
public void LoadContent()
{
_spriteFont = AppManager.Instance.Content.Load<SpriteFont>("Font_12");
}
public void Update(GameTime gameTime)
{
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Begin();
spriteBatch.DrawString(
_spriteFont,
Join(",", _text.Select(el => el.Key + ": " + el.Value).ToList()),
new Vector2(10, 10),
Color.Cyan,
0,
Vector2.Zero,
1,
SpriteEffects.None,
0
);
spriteBatch.End();
}
public void Set(string key, string value)
{
_text[key] = value;
}
}
}

View file

@ -0,0 +1,43 @@
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using MonogameLibrary.UI.Elements;
namespace DangerousD.GameCore.GUI
{
public class HUD : IDrawableObject
{
public HUD()
{
}
public void Draw(SpriteBatch spriteBatch)
{
;
}
public void Initialize(GraphicsDevice graphicsDevice)
{
throw new NotImplementedException();
}
public void Initialize()
{
throw new NotImplementedException();
}
public void LoadContent()
{
var content = AppManager.Instance.Content;
}
public void Update(GameTime gameTime)
{
throw new NotImplementedException();
}
}
}

View file

@ -11,6 +11,7 @@ using DangerousD.GameCore.Managers;
using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Base;
using System.Diagnostics; using System.Diagnostics;
using DangerousD.GameCore.Network; using DangerousD.GameCore.Network;
using System.Xml.Linq;
namespace DangerousD.GameCore.GUI namespace DangerousD.GameCore.GUI
{ {
@ -30,8 +31,11 @@ namespace DangerousD.GameCore.GUI
lobbyBackground.LoadTexture(AppManager.Instance.Content); lobbyBackground.LoadTexture(AppManager.Instance.Content);
// CheckBoxs // CheckBoxs
Elements.Add(new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5, var lobby = new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5,
screenWidth / 30 * 26, screenHeight / 15 * 10) }); screenWidth / 30 * 26, screenHeight / 15 * 10), textureName = "textboxbackground2,5-1" };
Elements.Add(lobby);
lobby.LoadTexture(AppManager.Instance.Content);
// Buttons and ip textbox // Buttons and ip textbox
{ {
@ -41,9 +45,10 @@ namespace DangerousD.GameCore.GUI
screenWidth / 30 * 10, screenHeight / 30 * 3), screenWidth / 30 * 10, screenHeight / 30 * 3),
text = "ip", text = "ip",
scale = 0.16f, scale = 0.16f,
fontColor = Color.Gray, fontColor = Color.Black,
fontName = "font2", fontName = "font2",
textAligment = TextAligment.Left textAligment = TextAligment.Left,
textureName = "textboxbackground6-1"
}; };
searchBarTextBox.TextChanged += input => { searchBarTextBox.TextChanged += input => {
@ -59,25 +64,27 @@ namespace DangerousD.GameCore.GUI
searchBarTextBox.text = "ip"; searchBarTextBox.text = "ip";
} }
}; };
Button backButton = new ButtonText(Manager) Button backButton = new Button(Manager)
{ {
rectangle = new Rectangle(screenWidth / 30, screenHeight / 30, 60, 50), rectangle = new Rectangle(screenWidth / 30, screenHeight / 30, (int)(40 * 2.4), (int)(40 * 2.4)),
text = "<-", text = "<-",
scale = 0.3f, scale = 0.72f,
fontColor = Color.Black, fontColor = Color.Black,
fontName = "font2" fontName = "font2",
textureName = "textboxbackground1-1"
}; };
backButton.LeftButtonPressed += () => { backButton.LeftButtonPressed += () => {
AppManager.Instance.ChangeGameState(GameState.Menu); AppManager.Instance.ChangeGameState(GameState.Menu);
}; };
Button hostButton = new ButtonText(Manager) Button hostButton = new Button(Manager)
{ {
rectangle = new Rectangle(screenWidth / 30, screenHeight / 15 * 13, 120, 50), rectangle = new Rectangle(screenWidth / 30, screenHeight / 15 * 13, (int)(120 * 2.4), (int)(50 * 2.4)),
text = "Host", text = "Host",
scale = 0.2f, scale = 0.48f,
fontColor = Color.Black, fontColor = Color.DarkBlue,
fontName = "font2" fontName = "buttonFont",
textureName = "textboxbackground2-1"
}; };
hostButton.LeftButtonPressed += () => { hostButton.LeftButtonPressed += () => {
AppManager.Instance.ChangeGameState(GameState.Game); AppManager.Instance.ChangeGameState(GameState.Game);
@ -85,37 +92,40 @@ namespace DangerousD.GameCore.GUI
}; };
Button refreshButton = new ButtonText(Manager) Button refreshButton = new Button(Manager)
{ {
rectangle = new Rectangle(screenWidth / 30 * 6, screenHeight / 15 * 13, 120, 50), rectangle = new Rectangle(screenWidth / 30 * 6, screenHeight / 15 * 13, (int)(120 * 2.4), (int)(50 * 2.4)),
text = "Refresh", text = "Refresh",
scale = 0.2f, scale = 0.48f,
fontColor = Color.Black, fontColor = Color.DarkBlue,
fontName = "font2" fontName = "buttonFont",
textureName = "textboxbackground2-1"
}; };
refreshButton.LeftButtonPressed += () => { refreshButton.LeftButtonPressed += () => {
}; };
Button joinSelectedButton = new ButtonText(Manager) Button joinSelectedButton = new Button(Manager)
{ {
rectangle = new Rectangle(screenWidth / 30 * 25, screenHeight / 15 * 13, 120, 50), rectangle = new Rectangle(screenWidth / 30 * 25, screenHeight / 15 * 13, (int)(120 * 2.4), (int)(50 * 2.4)),
text = "Join", text = "Join",
scale = 0.2f, scale = 0.48f,
fontColor = Color.Black, fontColor = Color.DarkBlue,
fontName = "font2" fontName = "buttonFont",
textureName = "textboxbackground2-1"
}; };
joinSelectedButton.LeftButtonPressed += () => { joinSelectedButton.LeftButtonPressed += () => {
AppManager.Instance.ChangeGameState(GameState.Game); AppManager.Instance.ChangeGameState(GameState.Game);
AppManager.Instance.NetworkManager.ClientInit(AppManager.Instance.IpAddress); AppManager.Instance.NetworkManager.ClientInit(AppManager.Instance.IpAddress);
}; };
Button joinByIpButton = new ButtonText(Manager) Button joinByIpButton = new Button(Manager)
{ {
rectangle = new Rectangle(screenWidth / 30 * 25, screenHeight / 30, 120, 50), rectangle = new Rectangle(screenWidth / 30 * 25, screenHeight / 30, (int)(120 * 2.4), (int)(50 * 2.4)),
text = "JoinByIp", text = "JoinByIp",
scale = 0.2f, scale = 0.48f,
fontColor = Color.Black, fontColor = Color.DarkBlue,
fontName = "font2" fontName = "buttonFont",
textureName = "textboxbackground2-1"
}; };
joinByIpButton.LeftButtonPressed += () => { joinByIpButton.LeftButtonPressed += () => {
AppManager.Instance.NetworkManager.ClientInit(searchBarTextBox.text); AppManager.Instance.NetworkManager.ClientInit(searchBarTextBox.text);

View file

@ -32,9 +32,9 @@ namespace DangerousD.GameCore.GUI
loginBackground.LoadTexture(AppManager.Instance.Content); loginBackground.LoadTexture(AppManager.Instance.Content);
Elements.Add(new Label(Manager) { Elements.Add(new Label(Manager) {
rectangle = new Rectangle(screenWidth / 2 - 250, screenHeight / 6 - 50, 500, 100), rectangle = new Rectangle(screenWidth / 2 - (int)(250 * 2.4), screenHeight / 6 - 100, (int)(500 * 2.4), (int)(100 * 2.4)),
text = "Login", text = "Login",
scale = 0.8f, scale = 1.7f,
fontColor = Color.White, fontColor = Color.White,
mainColor = Color.Transparent, mainColor = Color.Transparent,
fontName = "ButtonFont" fontName = "ButtonFont"
@ -44,13 +44,16 @@ namespace DangerousD.GameCore.GUI
{ {
TextBox loginTextBox = new TextBox(Manager) TextBox loginTextBox = new TextBox(Manager)
{ {
rectangle = new Rectangle(screenWidth / 2 - 125, screenHeight / 6 * 2 - 20, 250, 40), rectangle = new Rectangle(screenWidth / 2 - (int)(125 * 2.4), screenHeight / 6 * 2 - 20, (int)(250 * 2.4), (int)(40 * 2.4)),
text = "NickName", text = "NickName",
scale = 0.16f, scale = 0.33f,
fontColor = Color.Gray, fontColor = Color.Gray,
fontName = "Font2", fontName = "Font2",
textAligment = TextAligment.Left textAligment = TextAligment.Left,
textureName = "textboxbackground6-1"
}; };
loginTextBox.LoadTexture(AppManager.Instance.Content);
loginTextBox.TextChanged += input => { loginTextBox.TextChanged += input => {
if (loginTextBox.fontColor == Color.Gray) if (loginTextBox.fontColor == Color.Gray)
{ {
@ -67,13 +70,15 @@ namespace DangerousD.GameCore.GUI
TextBox passwordTextBox = new TextBox(Manager) TextBox passwordTextBox = new TextBox(Manager)
{ {
rectangle = new Rectangle(screenWidth / 2 - 125, screenHeight / 6 * 3 - 40, 250, 40), rectangle = new Rectangle(screenWidth / 2 - (int)(125 * 2.4), screenHeight / 6 * 3 - 40, (int)(250 * 2.4), (int)(40 * 2.4)),
text = "Password", text = "Password",
scale = 0.16f, scale = 0.33f,
fontColor = Color.Gray, fontColor = Color.Gray,
fontName = "font2", fontName = "font2",
textAligment = TextAligment.Left textAligment = TextAligment.Left,
textureName = "textboxbackground6-1"
}; };
passwordTextBox.LoadTexture(AppManager.Instance.Content);
passwordTextBox.TextChanged += input => { passwordTextBox.TextChanged += input => {
if (passwordTextBox.fontColor == Color.Gray) if (passwordTextBox.fontColor == Color.Gray)
{ {
@ -91,12 +96,13 @@ namespace DangerousD.GameCore.GUI
// Кнопки // Кнопки
{ {
Button logButton = new ButtonText(Manager) { Button logButton = new Button(Manager) {
rectangle = new Rectangle(screenWidth / 4 + 50, screenHeight / 6 * 4, 100, 50), rectangle = new Rectangle(screenWidth / 4 + (int)(50 * 2.4), screenHeight / 6 * 3 + 100, (int)(100 * 2.4), (int)(50 * 2.4)),
text = "LogIn", text = "LogIn",
scale = 0.2f, scale = 0.6f,
fontColor = Color.Black, fontColor = Color.White,
fontName = "font2" fontName = "ButtonFont",
textureName = "textboxbackground2-1"
}; };
logButton.LeftButtonPressed += () => { logButton.LeftButtonPressed += () => {
if (CheckUser()) if (CheckUser())
@ -105,23 +111,25 @@ namespace DangerousD.GameCore.GUI
} }
}; };
Button regButton = new ButtonText(Manager) Button regButton = new Button(Manager)
{ {
rectangle = new Rectangle(screenWidth / 4 * 2 + 50, screenHeight / 6 * 4, 100, 50), rectangle = new Rectangle(screenWidth / 4 * 2 + (int)(50 * 2.4), screenHeight / 6 * 3 + 100, (int)(100 * 2.4), (int)(50 * 2.4)),
text = "Reg", text = "Reg",
scale = 0.2f, scale = 0.6f,
fontColor = Color.Black, fontColor = Color.White,
fontName = "font2" fontName = "ButtonFont",
textureName = "textboxbackground2-1"
}; };
regButton.LeftButtonPressed += GoToRegWebServer; regButton.LeftButtonPressed += GoToRegWebServer;
Button backButton = new ButtonText(Manager) Button backButton = new Button(Manager)
{ {
rectangle = new Rectangle(screenWidth / 20, screenHeight / 15, 50, 50), rectangle = new Rectangle(screenWidth / 20, screenHeight / 15, (int)(40 * 2.4), (int)(40 * 2.4)),
text = "<-", text = "<-",
scale = 0.3f, scale = 0.72f,
fontColor = Color.Black, fontColor = Color.Black,
fontName = "font2" fontName = "font2",
textureName = "textboxbackground1-1"
}; };
backButton.LeftButtonPressed += () => { backButton.LeftButtonPressed += () => {
AppManager.Instance.ChangeGameState(GameState.Menu); AppManager.Instance.ChangeGameState(GameState.Menu);

View file

@ -2,6 +2,7 @@
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Base;
using MonogameLibrary.UI.Elements; using MonogameLibrary.UI.Elements;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Runtime.Serialization; using System.Runtime.Serialization;
@ -9,47 +10,50 @@ namespace DangerousD.GameCore.GUI;
internal class MenuGUI : AbstractGui internal class MenuGUI : AbstractGui
{ {
int selected = 0;
protected override void CreateUI() protected override void CreateUI()
{ {
int wigth = AppManager.Instance.inGameResolution.X;
int height = AppManager.Instance.inGameResolution.Y;
int wigth = AppManager.Instance.Window.ClientBounds.Width;
int height = AppManager.Instance.Window.ClientBounds.Height;
var menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, wigth, height), textureName = "menuFon" }; var menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, wigth, height), textureName = "menuFon" };
Elements.Add(menuBackground); Elements.Add(menuBackground);
menuBackground.LoadTexture(AppManager.Instance.Content); menuBackground.LoadTexture(AppManager.Instance.Content);
int TopMenu = 0;
Color[] colors = new Color[] { new Color(64, 53, 51), new Color(84, 58, 52), Color[] colors = new Color[] { new Color(64, 53, 51), new Color(84, 58, 52),
new Color(170, 101, 63), new Color(254, 208, 116), new Color(252, 231, 124) }; new Color(170, 101, 63), new Color(254, 208, 116), new Color(252, 231, 124) };
for (int i = 0; i < colors.Length; i++) for (int i = 0; i < colors.Length; i++)
Elements.Add(new Label(Manager) { rectangle = new Rectangle((wigth - 50) / 2 - 60, 60, 50, 50), text = "Dangerous", mainColor = Color.Transparent, scale = 1-0.05f*i*i/10, fontName = "Font2", fontColor = colors[i] }); Elements.Add(new Label(Manager) { rectangle = new Rectangle((wigth - 50) / 2 - 60, 200, 50, 50), text = "Dangerous", mainColor = Color.Transparent, scale = 1.35f - 0.05f * i * i / 10, fontName = "Font2", fontColor = colors[i] });
int dx = 100; int dx = 50;
Color[] colors2 = new Color[] { new Color(64, 53, 51), new Color(84, 58, 52), Color[] colors2 = new Color[] { new Color(64, 53, 51), new Color(84, 58, 52),
new Color(170, 101, 63), new Color(254, 208, 116), new Color(252, 231, 124) }; new Color(170, 101, 63), new Color(254, 208, 116), new Color(252, 231, 124) };
for (int i = 0; i < colors2.Length; i++) for (int i = 0; i < colors2.Length; i++)
Elements.Add(new Label(Manager) { rectangle = new Rectangle((wigth - 50) / 2 + 250 + dx-i*i, 90 - i * i/5, 50, 50), text = "D", mainColor = Color.Transparent, scale = 1.3f - 0.05f * i * i / 5, fontName = "Font2", fontColor = colors2[i] }); Elements.Add(new Label(Manager) { rectangle = new Rectangle((wigth - 50) / 2 + 480 + dx - i * i, 260 - i * i / 5, 50, 50), text = "D", mainColor = Color.Transparent, scale = 2.15f - 0.05f * i * i / 5, fontName = "Font2", fontColor = colors2[i] });
var butSingle = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 130, 300, 50), text = "Singleplayer", fontName = "ButtonFont" }; var butSingle = new ButtonText(Manager) { rectangle = new Rectangle((wigth - (int)(300 * 2.4)) / 2, 350, (int)(300 * 2.4), (int)(50 * 2.4)), text = "Singleplayer", scale = 1.2f, fontName = "ButtonFont" };
Elements.Add(butSingle); Elements.Add(butSingle);
butSingle.LeftButtonPressed += () => butSingle.LeftButtonPressed += () =>
{ {
AppManager.Instance.ChangeGameState(GameState.Game); AppManager.Instance.ChangeGameState(GameState.Game);
AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.SinglePlayer); AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.SinglePlayer);
}; };
var butMulti = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 190, 300, 50), text = "Multiplayer", fontName = "ButtonFont" };
var butMulti = new ButtonText(Manager) { rectangle = new Rectangle((wigth - (int)(300 * 2.4)) / 2, 470, (int)(300 * 2.4), (int)(50 * 2.4)), text = "Multiplayer", scale = 1.2f, fontName = "ButtonFont" };
Elements.Add(butMulti); Elements.Add(butMulti);
butMulti.LeftButtonPressed += () => butMulti.LeftButtonPressed += () =>
{ {
AppManager.Instance.ChangeGameState(GameState.Login); AppManager.Instance.ChangeGameState(GameState.Login);
}; };
var butOption = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 250, 300, 50), text = "Option", fontName = "ButtonFont" }; var butOption = new ButtonText(Manager) { rectangle = new Rectangle((wigth - (int)(160 * 2.4)) / 2, 590, (int)(160 * 2.4), (int)(50 * 2.4)), text = "Option", scale = 1.2f, fontName = "ButtonFont" };
Elements.Add(butOption); Elements.Add(butOption);
butOption.LeftButtonPressed += () => butOption.LeftButtonPressed += () =>
{ {
// открытие настроек // открытие настроек
AppManager.Instance.ChangeGameState(GameState.Options);
}; };
var butExit = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 310, 300, 50), text = "Exit", fontName = "ButtonFont" }; var butExit = new ButtonText(Manager) { rectangle = new Rectangle((wigth - (int)(110 * 2.4)) / 2, 710, (int)(110 * 2.4), (int)(50 * 2.4)), text = "Exit", scale = 1.2f, fontName = "ButtonFont" };
Elements.Add(butExit); Elements.Add(butExit);
butExit.LeftButtonPressed += () => butExit.LeftButtonPressed += () =>
{ {

View file

@ -0,0 +1,75 @@
using System;
using Microsoft.Xna.Framework;
using MonogameLibrary.UI.Base;
using MonogameLibrary.UI.Elements;
using System.Xml.Linq;
using DangerousD.GameCore.Managers;
using DangerousD.GameCore;
namespace DangerousD.GameCore.GUI
{
public class OptionsGUI : AbstractGui
{
int selectedGUI = 0;
protected override void CreateUI()
{
int wigth = AppManager.Instance.inGameResolution.X;
int height = AppManager.Instance.inGameResolution.Y;
var menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, wigth, height), textureName = "optionsBackground" };
Elements.Add(menuBackground);
menuBackground.LoadTexture(AppManager.Instance.Content);
var slider = new Slider(Manager)
{
MinValue = 0,
MaxValue = 1,
rectangle = new Rectangle(wigth / 2 + 220, 275, (int)(100 * 2.4), 40),
indentation = 5,
textureName = "sliderBackground"
};
var cB = new CheckBox(Manager);
cB.rectangle = new Rectangle(wigth / 2 + 440, 405, (int)(40 * 2.4), (int)(40 * 2.4));
cB.Checked += (newCheckState) =>
{
SettingsManager sM = new SettingsManager();
};
cB.LoadTexture(AppManager.Instance.Content);
var checkBox = new CheckBox(Manager);
checkBox.rectangle = new Rectangle(wigth / 2 + 360, 540, (int)(40 * 2.4), (int)(40 * 2.4));
checkBox.Checked += (newCheckState) =>
{
SettingsManager sM = new SettingsManager();
};
checkBox.LoadTexture(AppManager.Instance.Content);
Label lblOptions = new Label(Manager)
{ fontName = "buttonFont", scale = 1.2f, text = "Options", fontColor = Color.White, rectangle = new Rectangle((wigth - 50) / 2, 40, 50, 50), mainColor = Color.Transparent };
Elements.Add(lblOptions);
Label lblValue = new Label(Manager)
{ fontName = "buttonFont", scale = 1f, text = "Volume", fontColor = Color.White, rectangle = new Rectangle((wigth - 50) / 2, 250, 50, 50), mainColor = Color.Transparent };
Elements.Add(lblValue);
Label lblIsFullScreen = new Label(Manager)
{ fontName = "buttonFont", scale = 1f, text = "Full Screen", fontColor = Color.White, rectangle = new Rectangle((wigth - 50) / 2, 580, 50, 50), mainColor = Color.Transparent };
Elements.Add(lblOptions);
Label lblSwitchMode = new Label(Manager)
{ fontName = "buttonFont", scale = 1f, text = "Left/Right Mode", fontColor = Color.White, rectangle = new Rectangle((wigth - 50) / 2, 415, 50, 50), mainColor = Color.Transparent };
Elements.Add(lblSwitchMode);
Button bTExit = new Button(Manager)
{ fontName = "Font2", scale = 0.72f, text = "<-", rectangle = new Rectangle(wigth / 30, height / 30, (int)(40 * 2.4), (int)(40 * 2.4)), textureName = "textboxbackground1-1" };
Elements.Add(bTExit);
bTExit.LeftButtonPressed += () => {
AppManager.Instance.ChangeGameState(GameState.Menu);
};
}
public override void Update(GameTime gameTime)
{
base.Update(gameTime);
}
}
}

View file

@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Graphics;
namespace DangerousD.GameCore.GUI namespace DangerousD.GameCore.GUI
{ {
interface IDrawableObject public interface IDrawableObject
{ {
void Initialize(); void Initialize();
void LoadContent(); void LoadContent();

View file

@ -26,8 +26,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public Player(Vector2 position) : base(position) public Player(Vector2 position) : base(position)
{ {
Width = 32; Width = 16;
Height = 64; Height = 32;
AppManager.Instance.InputManager.ShootEvent += Shoot; AppManager.Instance.InputManager.ShootEvent += Shoot;
@ -82,7 +82,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
} }
public void AnimationJump() public void AnimationJump()
{ {
velocity.Y = -30; velocity.Y = -11;
isJump = true; isJump = true;
// здесь будет анимация // здесь будет анимация
} }
@ -106,25 +106,29 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public void Move(GameTime gameTime) public void Move(GameTime gameTime)
{ {
float delta = (float)gameTime.ElapsedGameTime.TotalSeconds; float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
if (Keyboard.GetState().IsKeyDown(Keys.D)) if (AppManager.Instance.InputManager.VectorMovementDirection.X==1)
{ {
if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveRight") if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveRight")//идёт направо
{ {
GraphicsComponent.StartAnimation("ZombieMoveRight"); GraphicsComponent.StartAnimation("ZombieMoveRight");
} }
velocity.X = 10; velocity.X = 5;
} }
else if (Keyboard.GetState().IsKeyDown(Keys.A)) else if (AppManager.Instance.InputManager.VectorMovementDirection.X == -1)//идёт налево
{ {
if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft") if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft")
{ {
GraphicsComponent.StartAnimation("ZombieMoveLeft"); GraphicsComponent.StartAnimation("ZombieMoveLeft");
} }
velocity.X = -10; velocity.X = -5;
} }
if (Keyboard.GetState().IsKeyDown(Keys.Space) && !isJump) else if(AppManager.Instance.InputManager.VectorMovementDirection.X == 0)//стоит
{ {
AnimationJump(); if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft")
{
GraphicsComponent.StartAnimation("ZombieMoveLeft");
}
velocity.X = 0;
} }
if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer) if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer)
{ {
@ -134,7 +138,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
} }
public void MoveDown() public void MoveDown()
{ {
velocity.Y = -11;
isJump = true;
} }
} }

View file

@ -10,6 +10,7 @@ using System.Runtime.InteropServices;
namespace DangerousD.GameCore namespace DangerousD.GameCore
{ {
public enum ScopeState { Up, Middle, Down } public enum ScopeState { Up, Middle, Down }
public enum ControlsState { Gamepad, Keyboard, Mouse }
public class InputManager public class InputManager
{ {
public delegate void Delegat(); public delegate void Delegat();
@ -19,26 +20,32 @@ namespace DangerousD.GameCore
Vector2 vectorMovementDirection; Vector2 vectorMovementDirection;
ScopeState scopeState; // Положение оружия. Up, Middle, Down. ScopeState scopeState; // Положение оружия. Up, Middle, Down.
ControlsState controlsState;
private bool isJumpDown; // Блокирует физическое нажатие прыжка и спуска private bool isJumpDown; // Блокирует физическое нажатие прыжка и спуска
private bool isShoot; private bool isShoot;
public Vector2 VectorMovementDirection { get => vectorMovementDirection; } public Vector2 VectorMovementDirection { get => vectorMovementDirection; }
public ScopeState ScopeState { get => scopeState; } public ScopeState ScopeState { get => scopeState; }
public string currentControlsState = "";
public InputManager() public InputManager()
{ {
this.isJumpDown = false; this.isJumpDown = false;
this.isShoot = false; this.isShoot = false;
scopeState = ScopeState.Middle; scopeState = ScopeState.Middle;
controlsState= ControlsState.Mouse;
vectorMovementDirection = new Vector2(0, 0); vectorMovementDirection = new Vector2(0, 0);
} }
public void SetState(ControlsState controlsStates)
{
currentControlsState = controlsStates.ToString();
}
public void Update() public void Update()
{ {
// Работа с GamePad // Работа с GamePad
if (GamePad.GetState(0).IsConnected) if (GamePad.GetState(0).IsConnected)
{ {
// Обработка гейм-пада. Задает Vector2 vectorMovementDirection являющийся вектором отклонения левого стика. // Обработка гейм-пада. Задает Vector2 vectorMovementDirection являющийся вектором отклонения левого стика.
GamePadState gamePadState = GamePad.GetState(0); GamePadState gamePadState = GamePad.GetState(0);
vectorMovementDirection = gamePadState.ThumbSticks.Left; vectorMovementDirection = gamePadState.ThumbSticks.Left;
@ -86,6 +93,7 @@ namespace DangerousD.GameCore
{ {
isShoot = false; isShoot = false;
} }
SetState(ControlsState.Gamepad);
} }
// Работа с KeyBoard // Работа с KeyBoard

View file

@ -15,8 +15,8 @@ using DangerousD.GameCore.GameObjects;
namespace DangerousD.GameCore namespace DangerousD.GameCore
{ {
public enum GameState { Menu, Options, Lobby, Game, Login, GameOver }
public enum MultiPlayerStatus { SinglePlayer, Host, Client } public enum MultiPlayerStatus { SinglePlayer, Host, Client }
public enum GameState { Menu, Options, Lobby, Game, Login, Death }
public class AppManager : Game public class AppManager : Game
{ {
public static AppManager Instance { get; private set; } public static AppManager Instance { get; private set; }
@ -26,13 +26,14 @@ namespace DangerousD.GameCore
private SpriteBatch _spriteBatch; private SpriteBatch _spriteBatch;
public GameState gameState { get; private set; } public GameState gameState { get; private set; }
public MultiPlayerStatus multiPlayerStatus { get; private set; } = MultiPlayerStatus.SinglePlayer; public MultiPlayerStatus multiPlayerStatus { get; private set; } = MultiPlayerStatus.SinglePlayer;
public Point resolution = new Point(1920, 1080);
public Point inGameResolution = new Point(1366, 768);
IDrawableObject MenuGUI; IDrawableObject MenuGUI;
IDrawableObject OptionsGUI; IDrawableObject OptionsGUI;
IDrawableObject LoginGUI; IDrawableObject LoginGUI;
IDrawableObject LobbyGUI; IDrawableObject LobbyGUI;
public Point resolution = new Point(1920, 1080); IDrawableObject DeathGUI;
public Point inGameResolution = new Point(800, 480); public DebugHUD DebugHUD;
private RenderTarget2D renderTarget;
public GameManager GameManager { get; private set; } = new(); public GameManager GameManager { get; private set; } = new();
public AnimationBuilder AnimationBuilder { get; private set; } = new AnimationBuilder(); public AnimationBuilder AnimationBuilder { get; private set; } = new AnimationBuilder();
@ -40,6 +41,8 @@ namespace DangerousD.GameCore
public InputManager InputManager { get; private set; } = new InputManager(); public InputManager InputManager { get; private set; } = new InputManager();
public SoundManager SoundManager { get; private set; } = new SoundManager(); public SoundManager SoundManager { get; private set; } = new SoundManager();
public SettingsManager SettingsManager { get; private set; } = new SettingsManager(); public SettingsManager SettingsManager { get; private set; } = new SettingsManager();
private RenderTarget2D renderTarget;
public AppManager() public AppManager()
{ {
Content.RootDirectory = "Content"; Content.RootDirectory = "Content";
@ -56,11 +59,14 @@ namespace DangerousD.GameCore
resolution = SettingsManager.Resolution; resolution = SettingsManager.Resolution;
_graphics.PreferredBackBufferWidth = resolution.X; _graphics.PreferredBackBufferWidth = resolution.X;
_graphics.PreferredBackBufferHeight = resolution.Y; _graphics.PreferredBackBufferHeight = resolution.Y;
// _graphics.IsFullScreen = true; _graphics.IsFullScreen = true;
gameState = GameState.Menu; gameState = GameState.Menu;
MenuGUI = new MenuGUI(); MenuGUI = new MenuGUI();
LoginGUI = new LoginGUI(); LoginGUI = new LoginGUI();
OptionsGUI = new OptionsGUI();
LobbyGUI = new LobbyGUI(); LobbyGUI = new LobbyGUI();
DeathGUI = new DeathGUI();
DebugHUD = new DebugHUD();
UIManager.resolution = resolution; UIManager.resolution = resolution;
UIManager.resolutionInGame = inGameResolution; UIManager.resolutionInGame = inGameResolution;
} }
@ -70,16 +76,24 @@ namespace DangerousD.GameCore
AnimationBuilder.LoadAnimations(); AnimationBuilder.LoadAnimations();
MenuGUI.Initialize(); MenuGUI.Initialize();
LoginGUI.Initialize(); LoginGUI.Initialize();
DebugHUD.Initialize();
OptionsGUI.Initialize();
LobbyGUI.Initialize(); LobbyGUI.Initialize();
DeathGUI.Initialize();
base.Initialize(); base.Initialize();
} }
protected override void LoadContent() protected override void LoadContent()
{ {
_spriteBatch = new SpriteBatch(GraphicsDevice); _spriteBatch = new SpriteBatch(GraphicsDevice);
DebugHUD.LoadContent();
MenuGUI.LoadContent(); MenuGUI.LoadContent();
LoginGUI.LoadContent(); LoginGUI.LoadContent();
OptionsGUI.LoadContent();
LobbyGUI.LoadContent(); LobbyGUI.LoadContent();
DeathGUI.LoadContent();
GameObject.debugTexture = new Texture2D(GraphicsDevice, 1, 1); GameObject.debugTexture = new Texture2D(GraphicsDevice, 1, 1);
GameObject.debugTexture.SetData<Color>(new Color[] { new Color(1, 0,0,0.25f) }); GameObject.debugTexture.SetData<Color>(new Color[] { new Color(1, 0,0,0.25f) });
SoundManager.LoadSounds(); SoundManager.LoadSounds();
@ -94,6 +108,7 @@ namespace DangerousD.GameCore
InputManager.Update(); InputManager.Update();
SoundManager.Update(); SoundManager.Update();
switch (gameState) switch (gameState)
{ {
case GameState.Menu: case GameState.Menu:
@ -108,12 +123,16 @@ namespace DangerousD.GameCore
case GameState.Lobby: case GameState.Lobby:
LobbyGUI.Update(gameTime); LobbyGUI.Update(gameTime);
break; break;
case GameState.Death:
DeathGUI.Update(gameTime);
break;
case GameState.Game: case GameState.Game:
GameManager.Update(gameTime); GameManager.Update(gameTime);
break; break;
default: default:
break; break;
} }
DebugHUD.Update(gameTime);
base.Update(gameTime); base.Update(gameTime);
} }
@ -137,6 +156,9 @@ namespace DangerousD.GameCore
case GameState.Lobby: case GameState.Lobby:
LobbyGUI.Draw(_spriteBatch); LobbyGUI.Draw(_spriteBatch);
break; break;
case GameState.Death:
DeathGUI.Draw(_spriteBatch);
break;
case GameState.Game: case GameState.Game:
_spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp); _spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp);
GameManager.Draw(_spriteBatch); GameManager.Draw(_spriteBatch);
@ -151,6 +173,7 @@ namespace DangerousD.GameCore
_spriteBatch.End(); _spriteBatch.End();
DebugHUD.Draw(_spriteBatch);
base.Draw(gameTime); base.Draw(gameTime);
} }
@ -170,7 +193,7 @@ namespace DangerousD.GameCore
case GameState.Game: case GameState.Game:
GameManager.mapManager.LoadLevel("lvl"); GameManager.mapManager.LoadLevel("lvl");
break; break;
case GameState.GameOver: case GameState.Death:
break; break;
default: default:
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();

View file

@ -20,9 +20,9 @@ namespace DangerousD.GameCore.Managers
item.velocity = item.velocity + item.acceleration * delta; item.velocity = item.velocity + item.acceleration * delta;
} }
CheckCollisions(livingEntities, mapObjects); CheckCollisionsLE_MO(livingEntities, mapObjects);
OnCollision(entities, livingEntities); CheckCollisionsE_LE(entities, livingEntities);
OnCollision(livingEntities); CheckCollisionsLE_LE(livingEntities);
//entities dont move //entities dont move
//Living entities dont move //Living entities dont move
@ -33,29 +33,27 @@ namespace DangerousD.GameCore.Managers
//OnCollision //OnCollision
} }
public void CheckCollisions(List<LivingEntity> livingEntities, private void CheckCollisionsLE_MO(List<LivingEntity> livingEntities,
List<MapObject> mapObjects) List<MapObject> mapObjects)
{ {
LivingEntity currentEntity; foreach (var currentEntity in livingEntities)
Rectangle oldRect;
for (int i = 0; i < livingEntities.Count; i++)
{ {
currentEntity = livingEntities[i]; Rectangle oldRect = currentEntity.Rectangle;
oldRect = currentEntity.Rectangle;
bool isXNormalise = true; bool isXNormalise = true;
bool isYNormalise = true; bool isYNormalise = true;
oldRect.Offset((int)currentEntity.velocity.X, 0); oldRect.Offset((int)currentEntity.velocity.X, 0);
for (int j = 0; j < mapObjects.Count; j++) foreach (var mapObject in mapObjects)
{ {
if (Math.Abs(mapObjects[i].Pos.X - currentEntity.Pos.X) < 550 && Math.Abs(mapObjects[i].Pos.Y - currentEntity.Pos.Y) < 550) if (
Math.Abs(mapObject.Pos.X - currentEntity.Pos.X) < 550
&& Math.Abs(mapObject.Pos.Y - currentEntity.Pos.Y) < 550
&& oldRect.Intersects(mapObject.Rectangle)
)
{ {
if (oldRect.Intersects(mapObjects[j].Rectangle)) isXNormalise = false;
{ oldRect.Offset(-(int)currentEntity.velocity.X, 0);
isXNormalise = false; break;
oldRect.Offset(-(int)currentEntity.velocity.X, 0);
break;
}
} }
} }
if (!isXNormalise) if (!isXNormalise)
@ -63,10 +61,9 @@ namespace DangerousD.GameCore.Managers
oldRect.Offset(0, (int)currentEntity.velocity.Y); oldRect.Offset(0, (int)currentEntity.velocity.Y);
for (int j = 0; j < mapObjects.Count; j++) foreach (var mapObject in mapObjects)
{ {
if (oldRect.Intersects(mapObject.Rectangle))
if (oldRect.Intersects(mapObjects[j].Rectangle))
{ {
isYNormalise = false; isYNormalise = false;
oldRect.Offset(0, -(int)currentEntity.velocity.Y); oldRect.Offset(0, -(int)currentEntity.velocity.Y);
@ -79,22 +76,21 @@ namespace DangerousD.GameCore.Managers
} }
} }
public void OnCollision(List<Entity> entities, List<LivingEntity> livingEntities) private void CheckCollisionsE_LE(List<Entity> entities, List<LivingEntity> livingEntities)
{ {
for (int i = 0; i < entities.Count; i++) foreach (var entity in entities)
{ {
for (int j = 0; j < livingEntities.Count; j++) foreach (var livingEntity in livingEntities)
{ {
if (livingEntities[j].Rectangle.Intersects(entities[i].Rectangle)) if (livingEntity.Rectangle.Intersects(entity.Rectangle))
{ {
livingEntities[j].OnCollision(entities[i]); livingEntity.OnCollision(entity);
entities[i].OnCollision(livingEntities[j]); entity.OnCollision(livingEntity);
} }
} }
} }
} }
public void OnCollision(List<LivingEntity> livingEntities) private void CheckCollisionsLE_LE(List<LivingEntity> livingEntities)
{ {
for (int i = 0; i < livingEntities.Count; i++) for (int i = 0; i < livingEntities.Count; i++)
{ {

View file

@ -11,11 +11,13 @@ using static System.Net.Mime.MediaTypeNames;
namespace MonogameLibrary.UI.Base namespace MonogameLibrary.UI.Base
{ {
public enum InputState { GamePad, Keyboard, Mouse }
public class UIManager public class UIManager
{ {
Dictionary<int, List<DrawableUIElement>> layerCollection = new(); Dictionary<int, List<DrawableUIElement>> layerCollection = new();
public GraphicsDevice GraphicsDevice { get; private set; } public GraphicsDevice GraphicsDevice { get; private set; }
public SpriteFont BaseFont { get; private set; } public SpriteFont BaseFont { get; private set; }
public InputState inputState = InputState.Mouse;
public void Initialize(GraphicsDevice graphicsDevice) public void Initialize(GraphicsDevice graphicsDevice)
{ {
GraphicsDevice = graphicsDevice; GraphicsDevice = graphicsDevice;
@ -29,6 +31,7 @@ namespace MonogameLibrary.UI.Base
static MouseState mouseState, prevmouseState; static MouseState mouseState, prevmouseState;
static KeyboardState keyboardState; static KeyboardState keyboardState;
public static Point resolutionInGame, resolution; public static Point resolutionInGame, resolution;
public void LoadContent(ContentManager content, string font) public void LoadContent(ContentManager content, string font)
{ {

View file

@ -24,6 +24,7 @@ namespace MonogameLibrary.UI.Elements
public virtual bool InteractUpdate(MouseState mouseState, MouseState prevmouseState) public virtual bool InteractUpdate(MouseState mouseState, MouseState prevmouseState)
{ {
//if (Manager.)
if (rectangle.Intersects(new Rectangle(mouseState.Position, Point.Zero))) if (rectangle.Intersects(new Rectangle(mouseState.Position, Point.Zero)))
{ {
if (mouseState.LeftButton == ButtonState.Pressed || mouseState.RightButton == ButtonState.Pressed) if (mouseState.LeftButton == ButtonState.Pressed || mouseState.RightButton == ButtonState.Pressed)

View file

@ -1,4 +1,5 @@
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input;
using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Base;
@ -15,6 +16,9 @@ namespace MonogameLibrary.UI.Elements
public CheckBox(UIManager manager, int layerIndex = 0) : base(manager, layerIndex) public CheckBox(UIManager manager, int layerIndex = 0) : base(manager, layerIndex)
{ {
} }
private Texture2D texture1;
private Texture2D texture2;
private Texture2D texture3;
public delegate void OnCheck(bool checkState); public delegate void OnCheck(bool checkState);
public event OnCheck? Checked; public event OnCheck? Checked;
private bool isChecked; private bool isChecked;
@ -42,25 +46,33 @@ namespace MonogameLibrary.UI.Elements
} }
return false; return false;
} }
public override void LoadTexture(ContentManager content)
{
texture1 = content.Load<Texture2D>("checkboxs_off");
texture2 = content.Load<Texture2D>("checkboxs_off-on");
texture3 = content.Load<Texture2D>("checkboxs_on");
base.LoadTexture(content);
}
public override void Draw(SpriteBatch _spriteBatch) public override void Draw(SpriteBatch _spriteBatch)
{ {
if (isChecked) if (isChecked)
{ {
if (hoverState == HoverState.None) if (hoverState == HoverState.None)
_spriteBatch.Draw(texture, rectangle, new Color(124, 255, 0)); _spriteBatch.Draw(texture3, rectangle, Color.White);
else if (hoverState == HoverState.Hovering) else if (hoverState == HoverState.Hovering)
_spriteBatch.Draw(texture, rectangle, new Color(124, 215, 0)); _spriteBatch.Draw(texture3, rectangle, Color.White);
else else
_spriteBatch.Draw(texture, rectangle, new Color(124, 175, 0)); _spriteBatch.Draw(texture2, rectangle, Color.White );
} }
else else
{ {
if (hoverState == HoverState.None) if (hoverState == HoverState.None)
_spriteBatch.Draw(texture, rectangle, new Color(255, 20, 0)); _spriteBatch.Draw(texture1, rectangle, Color.White);
else if (hoverState == HoverState.Hovering) else if (hoverState == HoverState.Hovering)
_spriteBatch.Draw(texture, rectangle, new Color(215, 20, 0)); _spriteBatch.Draw(texture2, rectangle, Color.White);
else else
_spriteBatch.Draw(texture, rectangle, new Color(175, 20, 0)); _spriteBatch.Draw(texture2, rectangle, Color.White);
} }
DrawText(_spriteBatch); DrawText(_spriteBatch);
} }

View file

@ -1,4 +1,5 @@
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input;
using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Base;
@ -17,7 +18,9 @@ namespace MonogameLibrary.UI.Elements
} }
public delegate void OnSliderChanges(float value); public delegate void OnSliderChanges(float value);
public event OnSliderChanges? SliderChanged; public event OnSliderChanges? SliderChanged;
public int indentation = 5;
Texture2D texture2;
public Rectangle sliderRect = new Rectangle(0, 0, 30, 30); public Rectangle sliderRect = new Rectangle(0, 0, 30, 30);
private float sliderValue = 0; private float sliderValue = 0;
private float minValue = 0, maxValue = 1; private float minValue = 0, maxValue = 1;
@ -50,6 +53,13 @@ namespace MonogameLibrary.UI.Elements
sliderState = SliderState.None; sliderState = SliderState.None;
return false; return false;
} }
public override void LoadTexture(ContentManager content)
{
texture2 = content.Load<Texture2D>("slider");
base.LoadTexture(content);
}
public void SetValue(float setvalue) public void SetValue(float setvalue)
{ {
sliderValue = setvalue; sliderValue = setvalue;
@ -60,14 +70,14 @@ namespace MonogameLibrary.UI.Elements
{ {
base.Draw(_spriteBatch); base.Draw(_spriteBatch);
sliderRect.Location = rectangle.Location; sliderRect.Location = rectangle.Location;
sliderRect.X += (int)(sliderValue * (rectangle.Width - sliderRect.Width)); sliderRect.X += (int)(sliderValue * (rectangle.Width - sliderRect.Width - indentation * 2) + indentation);
sliderRect.Y -= sliderRect.Height / 2 - rectangle.Height / 2; sliderRect.Y -= sliderRect.Height / 2 - rectangle.Height / 2;
if (sliderState == SliderState.Moving) if (sliderState == SliderState.Moving)
_spriteBatch.Draw(texture, sliderRect, Color.DarkRed); _spriteBatch.Draw(texture2, sliderRect, Color.DarkRed);
else if(sliderState == SliderState.HoveringOverSliderButton) else if(sliderState == SliderState.HoveringOverSliderButton)
_spriteBatch.Draw(texture, sliderRect, new Color(200,0,0)); _spriteBatch.Draw(texture2, sliderRect, new Color(200,0 ,0));
else else
_spriteBatch.Draw(texture, sliderRect, Color.Red); _spriteBatch.Draw(texture2, sliderRect, Color.Red);
DrawText(_spriteBatch); DrawText(_spriteBatch);
} }
} }

View file

@ -93,7 +93,7 @@ namespace MonogameLibrary.UI.Elements
_spriteBatch.Draw(texture, rectangle, new Color(211, 211, 211)); _spriteBatch.Draw(texture, rectangle, new Color(211, 211, 211));
else else
_spriteBatch.Draw(texture, rectangle, new Color(112, 128, 144)); _spriteBatch.Draw(texture, rectangle, new Color(112, 128, 144));
DrawText(_spriteBatch); DrawText(_spriteBatch);
} }
} }

0
gitignore Normal file
View file