diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb
index 6729fe5..3c483a8 100644
--- a/DangerousD/Content/Content.mgcb
+++ b/DangerousD/Content/Content.mgcb
@@ -14,7 +14,14 @@
#---------------------------------- 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
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
@@ -24,7 +31,31 @@
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/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
/importer:TextureImporter
@@ -38,12 +69,17 @@
/processorParam:TextureFormat=Color
/build:deathAnimation.png
-#begin ButtonFont.spritefont
-/importer:FontDescriptionImporter
-/processor:FontDescriptionProcessor
+#begin deathBackground.jpg
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
-/processorParam:TextureFormat=Compressed
-/build:ButtonFont.spritefont
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:deathBackground.jpg
#begin DoomTestSong.mp3
/importer:Mp3Importer
@@ -51,6 +87,13 @@
/processorParam:Quality=Best
/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
/importer:FontDescriptionImporter
/processor:FontDescriptionProcessor
@@ -84,19 +127,6 @@
/processorParam:TextureFormat=Color
/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
/importer:TextureImporter
/processor:TextureProcessor
@@ -121,7 +151,127 @@
/processorParam:TextureFormat=Color
/build:menuFon3.jpg
-#begin tiles.png
+#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 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 PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
@@ -133,6 +283,18 @@
/processorParam:TextureFormat=Color
/build:tiles.png
+#begin playerAnimation.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:playerAnimation.png
+
#begin wall.jpg
/importer:TextureImporter
/processor:TextureProcessor
diff --git a/DangerousD/Content/Font_12.spritefont b/DangerousD/Content/Font_12.spritefont
new file mode 100644
index 0000000..4cffaf7
--- /dev/null
+++ b/DangerousD/Content/Font_12.spritefont
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ Arial
+
+
+ 12
+
+
+ 0
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+ ~
+
+
+ а
+ я
+
+
+
+
diff --git a/DangerousD/Content/animations/HunchmanAttackLeft b/DangerousD/Content/animations/HunchmanAttackLeft
new file mode 100644
index 0000000..f6b0634
--- /dev/null
+++ b/DangerousD/Content/animations/HunchmanAttackLeft
@@ -0,0 +1 @@
+{"id":"HunchmanAttackLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":101,"Y":124,"Width":40,"Height":24},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":3,"isCycle":true,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/HunchmanAttackRight b/DangerousD/Content/animations/HunchmanAttackRight
new file mode 100644
index 0000000..482d7f3
--- /dev/null
+++ b/DangerousD/Content/animations/HunchmanAttackRight
@@ -0,0 +1 @@
+{"id":"HunchmanAttackRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":101,"Y":99,"Width":40,"Height":24},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":3,"isCycle":true,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/HunchmanMoveLeft b/DangerousD/Content/animations/HunchmanMoveLeft
new file mode 100644
index 0000000..47d627e
--- /dev/null
+++ b/DangerousD/Content/animations/HunchmanMoveLeft
@@ -0,0 +1 @@
+{"id":"HunchmanMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":124,"Width":24,"Height":24},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":4,"isCycle":true,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/HunchmanMoveRight b/DangerousD/Content/animations/HunchmanMoveRight
new file mode 100644
index 0000000..a289fa5
--- /dev/null
+++ b/DangerousD/Content/animations/HunchmanMoveRight
@@ -0,0 +1,3 @@
+
+{"id":"HunchmanMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":99,"Width":24,"Height":24},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":4,"isCycle":true,"offset":"0, 0"}
+
diff --git a/DangerousD/Content/animations/playerJumpLeft b/DangerousD/Content/animations/playerJumpLeft
new file mode 100644
index 0000000..763ccd7
--- /dev/null
+++ b/DangerousD/Content/animations/playerJumpLeft
@@ -0,0 +1 @@
+{"id":"playerJumpLeft","textureName":"playerAnimation","startSpriteRectangle":{"X":101,"Y":34,"Width":24,"Height":32},"frameSecond":[{"Item1":0,"Item2":12}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/playerJumpRight b/DangerousD/Content/animations/playerJumpRight
new file mode 100644
index 0000000..816b2d3
--- /dev/null
+++ b/DangerousD/Content/animations/playerJumpRight
@@ -0,0 +1 @@
+{"id":"playerJumpRight","textureName":"playerAnimation","startSpriteRectangle":{"X":126,"Y":1,"Width":24,"Height":32},"frameSecond":[{"Item1":0,"Item2":12}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/playerMoveLeft b/DangerousD/Content/animations/playerMoveLeft
new file mode 100644
index 0000000..d167573
--- /dev/null
+++ b/DangerousD/Content/animations/playerMoveLeft
@@ -0,0 +1,20 @@
+{
+ "id": "playerMoveLeft",
+ "textureName": "playerAnimation",
+ "startSpriteRectangle": {
+ "X": 26,
+ "Y": 34,
+ "Width": 24,
+ "Height": 32
+ },
+ "frameSecond": [
+ {
+ "Item1": 0,
+ "Item2": 8
+ }
+ ],
+ "textureFrameInterval": 1,
+ "framesCount": 4,
+ "isCycle": true,
+ "offset": "0, 0"
+}
diff --git a/DangerousD/Content/animations/playerMoveRight b/DangerousD/Content/animations/playerMoveRight
new file mode 100644
index 0000000..42d7327
--- /dev/null
+++ b/DangerousD/Content/animations/playerMoveRight
@@ -0,0 +1,20 @@
+{
+ "id": "playerMoveRight",
+ "textureName": "playerAnimation",
+ "startSpriteRectangle": {
+ "X": 26,
+ "Y": 1,
+ "Width": 24,
+ "Height": 32
+ },
+ "frameSecond": [
+ {
+ "Item1": 0,
+ "Item2": 8
+ }
+ ],
+ "textureFrameInterval": 1,
+ "framesCount": 4,
+ "isCycle": true,
+ "offset": "0, 0"
+}
diff --git a/DangerousD/Content/animations/playerRightStay b/DangerousD/Content/animations/playerRightStay
new file mode 100644
index 0000000..bbeb120
--- /dev/null
+++ b/DangerousD/Content/animations/playerRightStay
@@ -0,0 +1 @@
+{"id":"playerRightStay","textureName":"playerAnimation","startSpriteRectangle":{"X":1,"Y":1,"Width":24,"Height":32},"frameSecond":[{"Item1":0,"Item2":12}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/playerStayLeft b/DangerousD/Content/animations/playerStayLeft
new file mode 100644
index 0000000..993f1e1
--- /dev/null
+++ b/DangerousD/Content/animations/playerStayLeft
@@ -0,0 +1 @@
+{"id":"playerStayLeft","textureName":"playerAnimation","startSpriteRectangle":{"X":1,"Y":34,"Width":24,"Height":32},"frameSecond":[{"Item1":0,"Item2":12}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"}
diff --git a/DangerousD/Content/checkboxs_off-on.png b/DangerousD/Content/checkboxs_off-on.png
new file mode 100644
index 0000000..7786bbb
Binary files /dev/null and b/DangerousD/Content/checkboxs_off-on.png differ
diff --git a/DangerousD/Content/checkboxs_off.png b/DangerousD/Content/checkboxs_off.png
new file mode 100644
index 0000000..45d755e
Binary files /dev/null and b/DangerousD/Content/checkboxs_off.png differ
diff --git a/DangerousD/Content/checkboxs_on.png b/DangerousD/Content/checkboxs_on.png
new file mode 100644
index 0000000..bc5b0c1
Binary files /dev/null and b/DangerousD/Content/checkboxs_on.png differ
diff --git a/DangerousD/Content/deathBackground.jpg b/DangerousD/Content/deathBackground.jpg
new file mode 100644
index 0000000..d8c4062
Binary files /dev/null and b/DangerousD/Content/deathBackground.jpg differ
diff --git a/DangerousD/Content/lvl.tmx b/DangerousD/Content/lvl.tmx
index b81ea88..271b1e5 100644
--- a/DangerousD/Content/lvl.tmx
+++ b/DangerousD/Content/lvl.tmx
@@ -752,7 +752,7 @@
-
diff --git a/DangerousD/Content/map.tmx b/DangerousD/Content/map.tmx
index 3836987..cd29fd9 100644
--- a/DangerousD/Content/map.tmx
+++ b/DangerousD/Content/map.tmx
@@ -42,27 +42,27 @@
-
+
-
+
-
+
-
+
-
+
diff --git a/DangerousD/Content/menuFon.jpg b/DangerousD/Content/menuFon.jpg
index 4f49988..c95f8fa 100644
Binary files a/DangerousD/Content/menuFon.jpg and b/DangerousD/Content/menuFon.jpg differ
diff --git a/DangerousD/Content/optionsBackground.jpg b/DangerousD/Content/optionsBackground.jpg
new file mode 100644
index 0000000..dd87cd7
Binary files /dev/null and b/DangerousD/Content/optionsBackground.jpg differ
diff --git a/DangerousD/Content/playerAnimation.png b/DangerousD/Content/playerAnimation.png
new file mode 100644
index 0000000..ed061f3
Binary files /dev/null and b/DangerousD/Content/playerAnimation.png differ
diff --git a/DangerousD/Content/slider.png b/DangerousD/Content/slider.png
new file mode 100644
index 0000000..624b533
Binary files /dev/null and b/DangerousD/Content/slider.png differ
diff --git a/DangerousD/Content/sliderBackground.png b/DangerousD/Content/sliderBackground.png
new file mode 100644
index 0000000..8560739
Binary files /dev/null and b/DangerousD/Content/sliderBackground.png differ
diff --git a/DangerousD/Content/textboxbackground1-1.png b/DangerousD/Content/textboxbackground1-1.png
new file mode 100644
index 0000000..90219bf
Binary files /dev/null and b/DangerousD/Content/textboxbackground1-1.png differ
diff --git a/DangerousD/Content/textboxbackground2,5-1.png b/DangerousD/Content/textboxbackground2,5-1.png
new file mode 100644
index 0000000..8494c3e
Binary files /dev/null and b/DangerousD/Content/textboxbackground2,5-1.png differ
diff --git a/DangerousD/Content/textboxbackground2-1.png b/DangerousD/Content/textboxbackground2-1.png
new file mode 100644
index 0000000..a50c11f
Binary files /dev/null and b/DangerousD/Content/textboxbackground2-1.png differ
diff --git a/DangerousD/Content/textboxbackground6-1.png b/DangerousD/Content/textboxbackground6-1.png
new file mode 100644
index 0000000..70f1d97
Binary files /dev/null and b/DangerousD/Content/textboxbackground6-1.png differ
diff --git a/DangerousD/GameCore/GUI/DeathGUI.cs b/DangerousD/GameCore/GUI/DeathGUI.cs
new file mode 100644
index 0000000..5754efa
--- /dev/null
+++ b/DangerousD/GameCore/GUI/DeathGUI.cs
@@ -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);
+ }
+}
\ No newline at end of file
diff --git a/DangerousD/GameCore/GUI/DebugHUD.cs b/DangerousD/GameCore/GUI/DebugHUD.cs
new file mode 100644
index 0000000..b56d90a
--- /dev/null
+++ b/DangerousD/GameCore/GUI/DebugHUD.cs
@@ -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 _text = new();
+
+ public void Initialize()
+ {
+ }
+
+ public void LoadContent()
+ {
+ _spriteFont = AppManager.Instance.Content.Load("Font_12");
+ }
+
+ public void Update(GameTime gameTime)
+ {
+ }
+
+ public void Draw(SpriteBatch spriteBatch)
+ {
+ spriteBatch.Begin();
+ spriteBatch.DrawString(
+ _spriteFont,
+ Join("\n", _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;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DangerousD/GameCore/GUI/HUD.cs b/DangerousD/GameCore/GUI/HUD.cs
new file mode 100644
index 0000000..07e446a
--- /dev/null
+++ b/DangerousD/GameCore/GUI/HUD.cs
@@ -0,0 +1,41 @@
+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;
+using System.Collections.Generic;
+
+namespace DangerousD.GameCore.GUI
+{
+ public class HUD : AbstractGui
+ {
+ int ammout = 0;
+ List rects = new List { };
+ int wigth = AppManager.Instance.inGameResolution.X;
+ int height = AppManager.Instance.inGameResolution.Y;
+ protected override void CreateUI()
+ {
+ DrawableUIElement background = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, wigth, height), mainColor = Color.Transparent };
+ Elements.Add(background);
+ Rect rect = new Rect(Manager) { rectangle = new Rectangle(wigth / 35, height / 35, 120, 70), mainColor = Color.DarkRed };
+ Elements.Add(rect);
+ Label label = new Label(Manager) { rectangle = new Rectangle(wigth / 34, height / 30, 120, 20), text = "ammout", fontName = "font2", scale = 0.2f, mainColor = Color.Transparent, fontColor = Color.Black };
+ Elements.Add(label);
+
+ }
+ public override void Update(GameTime gameTime)
+ {
+
+ rects.Clear();
+ for (int i = 0; i < ammout; i++)
+ {
+ rects.Add(new Rect(Manager) { rectangle = new Rectangle(wigth / 29 + i * 13, height / 17, 5, 20), mainColor = Color.Yellow });
+ rects[i].LoadTexture(AppManager.Instance.Content);
+ }
+ base.Update(gameTime);
+ }
+ }
+}
+
diff --git a/DangerousD/GameCore/GUI/LobbyGUI.cs b/DangerousD/GameCore/GUI/LobbyGUI.cs
index 2927758..9136760 100644
--- a/DangerousD/GameCore/GUI/LobbyGUI.cs
+++ b/DangerousD/GameCore/GUI/LobbyGUI.cs
@@ -11,6 +11,7 @@ using DangerousD.GameCore.Managers;
using MonogameLibrary.UI.Base;
using System.Diagnostics;
using DangerousD.GameCore.Network;
+using System.Xml.Linq;
namespace DangerousD.GameCore.GUI
{
@@ -30,8 +31,11 @@ namespace DangerousD.GameCore.GUI
lobbyBackground.LoadTexture(AppManager.Instance.Content);
// CheckBoxs
- Elements.Add(new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5,
- screenWidth / 30 * 26, screenHeight / 15 * 10) });
+ var lobby = new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5,
+ screenWidth / 30 * 26, screenHeight / 15 * 10), textureName = "textboxbackground2,5-1" };
+ Elements.Add(lobby);
+ lobby.LoadTexture(AppManager.Instance.Content);
+
// Buttons and ip textbox
{
@@ -41,9 +45,10 @@ namespace DangerousD.GameCore.GUI
screenWidth / 30 * 10, screenHeight / 30 * 3),
text = "ip",
scale = 0.16f,
- fontColor = Color.Gray,
+ fontColor = Color.Black,
fontName = "font2",
- textAligment = TextAligment.Left
+ textAligment = TextAligment.Left,
+ textureName = "textboxbackground6-1"
};
searchBarTextBox.TextChanged += input => {
@@ -59,62 +64,68 @@ namespace DangerousD.GameCore.GUI
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 = "<-",
- scale = 0.3f,
+ scale = 0.72f,
fontColor = Color.Black,
- fontName = "font2"
+ fontName = "font2",
+ textureName = "textboxbackground1-1"
};
backButton.LeftButtonPressed += () => {
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",
- scale = 0.2f,
- fontColor = Color.Black,
- fontName = "font2"
+ scale = 0.48f,
+ fontColor = Color.DarkBlue,
+ fontName = "buttonFont",
+ textureName = "textboxbackground2-1"
};
hostButton.LeftButtonPressed += () => {
-
+ AppManager.Instance.ChangeGameState(GameState.Game);
AppManager.Instance.NetworkManager.HostInit(AppManager.Instance.IpAddress);
};
- 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",
- scale = 0.2f,
- fontColor = Color.Black,
- fontName = "font2"
+ scale = 0.48f,
+ fontColor = Color.DarkBlue,
+ fontName = "buttonFont",
+ textureName = "textboxbackground2-1"
};
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",
- scale = 0.2f,
- fontColor = Color.Black,
- fontName = "font2"
+ scale = 0.48f,
+ fontColor = Color.DarkBlue,
+ fontName = "buttonFont",
+ textureName = "textboxbackground2-1"
};
joinSelectedButton.LeftButtonPressed += () => {
+ AppManager.Instance.ChangeGameState(GameState.Game);
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",
- scale = 0.2f,
- fontColor = Color.Black,
- fontName = "font2"
+ scale = 0.48f,
+ fontColor = Color.DarkBlue,
+ fontName = "buttonFont",
+ textureName = "textboxbackground2-1"
};
joinByIpButton.LeftButtonPressed += () => {
AppManager.Instance.NetworkManager.ClientInit(searchBarTextBox.text);
diff --git a/DangerousD/GameCore/GUI/LoginGUI.cs b/DangerousD/GameCore/GUI/LoginGUI.cs
index a81284f..37a62eb 100644
--- a/DangerousD/GameCore/GUI/LoginGUI.cs
+++ b/DangerousD/GameCore/GUI/LoginGUI.cs
@@ -32,9 +32,9 @@ namespace DangerousD.GameCore.GUI
loginBackground.LoadTexture(AppManager.Instance.Content);
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",
- scale = 0.8f,
+ scale = 1.7f,
fontColor = Color.White,
mainColor = Color.Transparent,
fontName = "ButtonFont"
@@ -44,13 +44,16 @@ namespace DangerousD.GameCore.GUI
{
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",
- scale = 0.16f,
+ scale = 0.33f,
fontColor = Color.Gray,
fontName = "Font2",
- textAligment = TextAligment.Left
+ textAligment = TextAligment.Left,
+ textureName = "textboxbackground6-1"
+
};
+ loginTextBox.LoadTexture(AppManager.Instance.Content);
loginTextBox.TextChanged += input => {
if (loginTextBox.fontColor == Color.Gray)
{
@@ -67,13 +70,15 @@ namespace DangerousD.GameCore.GUI
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",
- scale = 0.16f,
+ scale = 0.33f,
fontColor = Color.Gray,
fontName = "font2",
- textAligment = TextAligment.Left
+ textAligment = TextAligment.Left,
+ textureName = "textboxbackground6-1"
};
+ passwordTextBox.LoadTexture(AppManager.Instance.Content);
passwordTextBox.TextChanged += input => {
if (passwordTextBox.fontColor == Color.Gray)
{
@@ -91,12 +96,13 @@ namespace DangerousD.GameCore.GUI
// Кнопки
{
- Button logButton = new ButtonText(Manager) {
- rectangle = new Rectangle(screenWidth / 4 + 50, screenHeight / 6 * 4, 100, 50),
+ Button logButton = new Button(Manager) {
+ rectangle = new Rectangle(screenWidth / 4 + (int)(50 * 2.4), screenHeight / 6 * 3 + 100, (int)(100 * 2.4), (int)(50 * 2.4)),
text = "LogIn",
- scale = 0.2f,
- fontColor = Color.Black,
- fontName = "font2"
+ scale = 0.6f,
+ fontColor = Color.White,
+ fontName = "ButtonFont",
+ textureName = "textboxbackground2-1"
};
logButton.LeftButtonPressed += () => {
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",
- scale = 0.2f,
- fontColor = Color.Black,
- fontName = "font2"
+ scale = 0.6f,
+ fontColor = Color.White,
+ fontName = "ButtonFont",
+ textureName = "textboxbackground2-1"
};
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 = "<-",
- scale = 0.3f,
+ scale = 0.72f,
fontColor = Color.Black,
- fontName = "font2"
+ fontName = "font2",
+ textureName = "textboxbackground1-1"
};
backButton.LeftButtonPressed += () => {
AppManager.Instance.ChangeGameState(GameState.Menu);
diff --git a/DangerousD/GameCore/GUI/MenuGUI.cs b/DangerousD/GameCore/GUI/MenuGUI.cs
index b1ac08d..82170b1 100644
--- a/DangerousD/GameCore/GUI/MenuGUI.cs
+++ b/DangerousD/GameCore/GUI/MenuGUI.cs
@@ -2,6 +2,7 @@
using Microsoft.Xna.Framework;
using MonogameLibrary.UI.Base;
using MonogameLibrary.UI.Elements;
+using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.Serialization;
@@ -9,47 +10,50 @@ namespace DangerousD.GameCore.GUI;
internal class MenuGUI : AbstractGui
{
+ int selected = 0;
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" };
Elements.Add(menuBackground);
menuBackground.LoadTexture(AppManager.Instance.Content);
- int TopMenu = 0;
+
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) };
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] });
-
- int dx = 100;
+ 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 = 50;
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) };
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] });
-
- var butSingle = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 130, 300, 50), text = "Singleplayer", fontName = "ButtonFont" };
+ 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 - (int)(300 * 2.4)) / 2, 350, (int)(300 * 2.4), (int)(50 * 2.4)), text = "Singleplayer", scale = 1.2f, fontName = "ButtonFont" };
Elements.Add(butSingle);
butSingle.LeftButtonPressed += () =>
{
AppManager.Instance.ChangeGameState(GameState.Game);
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);
butMulti.LeftButtonPressed += () =>
{
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);
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);
butExit.LeftButtonPressed += () =>
{
diff --git a/DangerousD/GameCore/GUI/OptionsGUI.cs b/DangerousD/GameCore/GUI/OptionsGUI.cs
new file mode 100644
index 0000000..6fc95c7
--- /dev/null
+++ b/DangerousD/GameCore/GUI/OptionsGUI.cs
@@ -0,0 +1,76 @@
+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);
+ }
+ }
+}
\ No newline at end of file
diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs
index d276984..ceb5e5a 100644
--- a/DangerousD/GameCore/GameObjects/GameObject.cs
+++ b/DangerousD/GameCore/GameObjects/GameObject.cs
@@ -14,11 +14,10 @@ namespace DangerousD.GameCore
{
protected Vector2 _pos;
public Vector2 Pos => _pos;
+ public int id;
public int Width { get; set; }
public int Height { get; set; }
public Rectangle Rectangle => new Rectangle((int)Pos.X, (int)Pos.Y, Width, Height);
- public Vector2 velocity;
- public Vector2 acceleration;
protected abstract GraphicsComponent GraphicsComponent { get; }
public GameObject(Vector2 pos)
{
@@ -40,10 +39,14 @@ namespace DangerousD.GameCore
{
}
- public void LoadContent()
+ public void PlayAnimation()
{
GraphicsComponent.LoadContent();
}
+ public void LoadContent()
+ {
+ PlayAnimation();
+ }
public virtual void Update(GameTime gameTime)
{
diff --git a/DangerousD/GameCore/GameObjects/IDrawableObject.cs b/DangerousD/GameCore/GameObjects/IDrawableObject.cs
index 1d9ca5c..42d8320 100644
--- a/DangerousD/GameCore/GameObjects/IDrawableObject.cs
+++ b/DangerousD/GameCore/GameObjects/IDrawableObject.cs
@@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Graphics;
namespace DangerousD.GameCore.GUI
{
- interface IDrawableObject
+ public interface IDrawableObject
{
void Initialize();
void LoadContent();
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Hunchman.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Hunchman.cs
index e309d9e..ba342ec 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Hunchman.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Hunchman.cs
@@ -4,7 +4,9 @@ using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
+using System.Security.Authentication.ExtendedProtection;
using System.Text;
using System.Threading.Tasks;
@@ -12,15 +14,71 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
{
public class Hunchman : CoreEnemy
{
+ GameManager gameManager;
+ bool isAttacking;
public Hunchman(Vector2 position) : base(position)
{
+ Width = 48;
+ Height = 48;
+ monster_speed = -2;
+ monster_health = 1;
+ name = "HunchMan";
+ velocity = new Vector2(monster_speed, 0);
+ gameManager = AppManager.Instance.GameManager;
+ isAttacking = false;
+ isAlive = true;
}
- protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "HunchmanMoveLeft", "HunchmanMoveRight", "HunchmanAttackLeft", "HunchmanAttackRight" }, "HunchmanMoveRight");
+ protected override GraphicsComponent GraphicsComponent { get; } = new(new List
+ { "HunchmanMoveLeft", "HunchmanMoveRight", "HunchmanAttackLeft", "HunchmanAttackRight" }, "HunchmanMoveLeft");
+
+ public override void Update(GameTime gameTime)
+ {
+ // P.S. Всё в классе можешь смело удалять и переписывать с нуля.
+ gameManager = AppManager.Instance.GameManager;
+
+ if (!isAttacking)
+ {
+ Attack();
+ Move(gameTime);
+ }
+ else
+ {
+ velocity.X = 0;
+ }
+ Death();
+
+ }
public override void Attack()
{
-
+ GameObject gameObject;
+ foreach (var player in gameManager.players)
+ {
+ if (player.Pos.Y + player.Height >= Pos.Y && player.Pos.Y <= Pos.Y + Height)
+ {
+ gameObject = gameManager.physicsManager.RayCast(this, player);
+ if (gameObject is null)
+ {
+ isAttacking = true;
+ GraphicsComponent.StopAnimation();
+ if (velocity.X > 0)
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "HunchmanAttackRight")
+ {
+ GraphicsComponent.StartAnimation("HunchmanAttackRight");
+ }
+ }
+ else if (velocity.X < 0)
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "HunchmanAttackLeft")
+ {
+ GraphicsComponent.StartAnimation("HunchmanAttackLeft");
+ }
+ }
+ }
+ }
+ }
}
public override void Attack(GameTime gameTime)
@@ -30,12 +88,45 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
public override void Death()
{
+ if (monster_health <= 0)
+ {
+ }
}
public override void Move(GameTime gameTime)
{
+ if (gameManager.physicsManager.RayCast(this, new Vector2(Pos.X + Width + 10, Pos.Y + Height)) is not null)
+ {
+ monster_speed *= -1;
+ }
+
+ velocity.X = monster_speed;
+ if (velocity.X > 0)
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "HunchmanMoveRight")
+ {
+ GraphicsComponent.StartAnimation("HunchmanMoveRight");
+ }
+
+ }
+
+ else if (velocity.X < 0)
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "HunchmanMoveLeft")
+ {
+ GraphicsComponent.StartAnimation("HunchmanMoveLeft");
+ }
+ }
+
+ }
+
+ public override void OnCollision(GameObject gameObject)
+ {
+ monster_speed *= -1;
+ _pos.X += 5 * monster_speed;
+ Debug.WriteLine("Collision");
}
public override void Target()
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs
index 084bae9..58a81ba 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs
@@ -13,7 +13,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
{
public class Zombie : CoreEnemy
{
- private bool isGoRight = true;
float leftBorder;
float rightBorder;
bool isAttaking = false;
@@ -25,9 +24,18 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
Height = 40;
monster_speed = 3;
name = "Zombie";
- leftBorder = (int)position.X - 100;
- rightBorder = (int)position.X + 100;
+ leftBorder = (int)position.X - 50;
+ rightBorder = (int)position.X + 50;
physicsManager = new PhysicsManager();
+ Random random = new Random();
+ if(random.Next(0, 2) == 0)
+ {
+ isGoRight = true;
+ }
+ else
+ {
+ isGoRight = false;
+ }
}
protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack" }, "ZombieMoveLeft");
@@ -38,7 +46,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
Target();
Move(gameTime);
}
-
+ fixBorder();
base.Update(gameTime);
}
@@ -50,7 +58,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
{
if (GraphicsComponent.GetCurrentAnimation != "ZombieRightAttack")
{
- GraphicsComponent.StartAnimation("ZombieAttackRight");
+ GraphicsComponent.StartAnimation("ZombieRightAttack");
}
AppManager.Instance.GameManager.players[0].Death(name);
}
@@ -71,7 +79,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
public override void Move(GameTime gameTime)
{
- float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
if (isGoRight)
{
if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveRight")
@@ -114,7 +121,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
public override void Target()
{
- if(AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X-50, (int)Pos.Y, Width+100, Height), typeof(Player))!=null)
+ if (AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X - 50, (int)Pos.Y, Width + 100, Height), typeof(Player)).Count > 0)
{
if(isGoRight && this._pos.X <= AppManager.Instance.GameManager.players[0].Pos.X)
{
@@ -131,10 +138,18 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
}
}
}
-
- public override void Attack(GameTime gameTime)
+ public void fixBorder()
{
- throw new NotImplementedException();
+ if(leftBorder <= 0)
+ {
+ leftBorder = 0;
+ }
+ if(rightBorder >= 800)
+ {
+ rightBorder = 760;
+ }
}
+
+ public override void Attack(GameTime gameTime) { }
}
}
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs
index 1867b60..7dda1b1 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs
@@ -13,8 +13,8 @@ namespace DangerousD.GameCore.GameObjects.PlayerDeath
{
public DeathRectangle(Vector2 pos, string DeathType) : base(pos)
{
- Height = 128;
- Width = 128;
+ Height = 48;
+ Width = 48;
PlayDeath(DeathType);
}
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
index d7d84a8..03c24b6 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
@@ -6,29 +6,69 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DangerousD.GameCore.GameObjects.PlayerDeath;
+using Microsoft.Xna.Framework.Input;
+using Microsoft.Xna.Framework.Graphics;
+using DangerousD.GameCore.Network;
namespace DangerousD.GameCore.GameObjects.LivingEntities
{
public class Player : LivingEntity
{
bool isAlive = true;
+ bool isRight;
+ string stayAnimation;
+ bool isJump = false;
+ public int health;
+ public bool isGoRight = false;
+ public Vector2 playerVelocity;
+ public int rightBorder;
+ public int leftBorder;
+ public bool isVisible = true;
+ private bool isAttacked = false;
+ public GameObject objectAttack;
+
public Player(Vector2 position) : base(position)
{
- Width = 32;
- Height = 64;
- AppManager.Instance.InputManager.MovEventJump += AnimationJump;
+ Width = 16;
+ Height = 32;
+
+ AppManager.Instance.InputManager.ShootEvent += Shoot;
+
+ AppManager.Instance.InputManager.MovEventJump += Jump;
+ AppManager.Instance.InputManager.MovEventDown += MoveDown;
+
+ velocity = new Vector2(0, 0);
+ rightBorder = (int)position.X + 100;
+ leftBorder = (int)position.X - 100;
+
}
+
public bool IsAlive { get { return isAlive; } }
- protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack", "DeathFromZombie" }, "ZombieMoveLeft");//TODO: Change to player
+ protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "playerMoveLeft", "playerMoveRight", "DeathFromZombie", "playerRightStay", "playerStayLeft",
+ "playerJumpRight" , "playerJumpLeft"}, "playerStayLeft");
- public void Kill()
+ public void Attack()
{
-
+ if (objectAttack.Rectangle.Intersects(this.Rectangle))
+ {
+ isVisible = false;
+ }
+ }
+ public override void OnCollision(GameObject gameObject)
+ {
+ base.OnCollision(gameObject);
+ }
+ public override void Draw(SpriteBatch spriteBatch)
+ {
+ if (isVisible)
+ {
+ base.Draw(spriteBatch);
+ }
}
-
public void Death(string monsterName)
{
+ isAttacked = true;
if(monsterName == "Zombie")
{
DeathRectangle deathRectangle = new DeathRectangle(Pos, "DeathFrom" + monsterName);
@@ -36,21 +76,75 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
{
if (a == "DeathFrom" + monsterName)
{
- AppManager.Instance.ChangeGameState(GameState.GameOver);
+ AppManager.Instance.ChangeGameState(GameState.Death);
}
};
}
isAlive = false;
}
- public void AnimationJump()
+ public void Jump()
{
- velocity.Y = -300;
+ if (isOnGround)
+ {
+ velocity.Y = -11;
+ }
+ // здесь будет анимация
}
+ public void Shoot()
+ {
+
+ }
+
public override void Update(GameTime gameTime)
{
GraphicsComponent.CameraPosition = (_pos-new Vector2(200, 350)).ToPoint();
- velocity.X = 1;
+ if (!isAttacked)
+ {
+ Move(gameTime);
+ }
+ else
+ {
+ velocity.X = 0;
+ }
base.Update(gameTime);
}
+
+ public void Move(GameTime gameTime)
+ {
+ float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
+ velocity.X = 5 * AppManager.Instance.InputManager.VectorMovementDirection.X;
+ if (AppManager.Instance.InputManager.VectorMovementDirection.X > 0)
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "playerMoveRight")//идёт направо
+ {
+ GraphicsComponent.StartAnimation("playerMoveRight");
+ }
+ }
+ else if (AppManager.Instance.InputManager.VectorMovementDirection.X < 0)//идёт налево
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "playerMoveLeft")
+ {
+ GraphicsComponent.StartAnimation("playerMoveLeft");
+ }
+ }
+ else if(AppManager.Instance.InputManager.VectorMovementDirection.X == 0)//стоит
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft")
+ {
+ GraphicsComponent.StartAnimation("ZombieMoveLeft");
+ }
+ }
+ if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer)
+ {
+ NetworkTask task = new NetworkTask(id, Pos);
+ AppManager.Instance.NetworkTasks.Add(task);
+ }
+ }
+ public void MoveDown()
+ {
+ // ПОЧЕМУ
+ velocity.Y = -11;
+ }
+
}
}
diff --git a/DangerousD/GameCore/GameObjects/LivingEntity.cs b/DangerousD/GameCore/GameObjects/LivingEntity.cs
index e72b40b..d311095 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntity.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntity.cs
@@ -4,14 +4,17 @@ namespace DangerousD.GameCore.GameObjects;
public abstract class LivingEntity : Entity
{
- private Vector2 targetPosition;
+ public bool isOnGround = true;
+ public Vector2 velocity;
+ public Vector2 acceleration;
+
public LivingEntity(Vector2 position) : base(position)
{
acceleration = new Vector2(0, 30);
}
public override void SetPosition(Vector2 position)
{
- targetPosition = position; _pos = position;
+ _pos = position;
} //TODO befrend targetpos and physics engine
diff --git a/DangerousD/GameCore/Graphics/GraphicsComponent.cs b/DangerousD/GameCore/Graphics/GraphicsComponent.cs
index 32851e2..e4546b5 100644
--- a/DangerousD/GameCore/Graphics/GraphicsComponent.cs
+++ b/DangerousD/GameCore/Graphics/GraphicsComponent.cs
@@ -198,6 +198,10 @@ namespace DangerousD.GameCore.Graphics
private void buildSourceRectangle()
{
sourceRectangle = new Rectangle();
+ if (currentAnimation == null)
+ {
+ currentAnimation = neitralAnimation;
+ }
sourceRectangle.X = currentAnimation.StartSpriteRectangle.X + currentFrame *
(currentAnimation.StartSpriteRectangle.Width + currentAnimation.TextureFrameInterval);
sourceRectangle.Y = currentAnimation.StartSpriteRectangle.Y;
diff --git a/DangerousD/GameCore/InputManager.cs b/DangerousD/GameCore/InputManager.cs
index 803bd6e..c171d6b 100644
--- a/DangerousD/GameCore/InputManager.cs
+++ b/DangerousD/GameCore/InputManager.cs
@@ -10,6 +10,7 @@ using System.Runtime.InteropServices;
namespace DangerousD.GameCore
{
public enum ScopeState { Up, Middle, Down }
+ public enum ControlsState { Gamepad, Keyboard, Mouse }
public class InputManager
{
public delegate void Delegat();
@@ -19,26 +20,32 @@ namespace DangerousD.GameCore
Vector2 vectorMovementDirection;
ScopeState scopeState; // Положение оружия. Up, Middle, Down.
+ ControlsState controlsState;
private bool isJumpDown; // Блокирует физическое нажатие прыжка и спуска
private bool isShoot;
public Vector2 VectorMovementDirection { get => vectorMovementDirection; }
public ScopeState ScopeState { get => scopeState; }
+ public string currentControlsState = "";
public InputManager()
{
this.isJumpDown = false;
this.isShoot = false;
scopeState = ScopeState.Middle;
+ controlsState= ControlsState.Mouse;
vectorMovementDirection = new Vector2(0, 0);
}
-
+ public void SetState(ControlsState controlsStates)
+ {
+ currentControlsState = controlsStates.ToString();
+ }
public void Update()
{
// Работа с GamePad
if (GamePad.GetState(0).IsConnected)
- {
+ {
// Обработка гейм-пада. Задает Vector2 vectorMovementDirection являющийся вектором отклонения левого стика.
GamePadState gamePadState = GamePad.GetState(0);
vectorMovementDirection = gamePadState.ThumbSticks.Left;
@@ -86,6 +93,7 @@ namespace DangerousD.GameCore
{
isShoot = false;
}
+ SetState(ControlsState.Gamepad);
}
// Работа с KeyBoard
diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs
index cbf4c84..5e53677 100644
--- a/DangerousD/GameCore/Managers/AppManager.cs
+++ b/DangerousD/GameCore/Managers/AppManager.cs
@@ -10,11 +10,15 @@ using DangerousD.GameCore.Graphics;
using DangerousD.GameCore.Network;
using MonogameLibrary.UI.Base;
using DangerousD.GameCore.Managers;
+using DangerousD.GameCore.GameObjects.LivingEntities;
+using DangerousD.GameCore.GameObjects;
namespace DangerousD.GameCore
{
- public enum GameState { Menu, Options, Lobby, Game, Login, GameOver }
public enum MultiPlayerStatus { SinglePlayer, Host, Client }
+ public enum GameState { Menu, Options, Lobby, Game, Login, Death, HUD,
+ GameOver
+ }
public class AppManager : Game
{
public static AppManager Instance { get; private set; }
@@ -23,13 +27,16 @@ namespace DangerousD.GameCore
private SpriteBatch _spriteBatch;
public GameState gameState { get; private set; }
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 OptionsGUI;
IDrawableObject LoginGUI;
IDrawableObject LobbyGUI;
- public Point resolution = new Point(1920, 1080);
- public Point inGameResolution = new Point(800, 480);
- private RenderTarget2D renderTarget;
+ IDrawableObject DeathGUI;
+ IDrawableObject HUD;
+ public DebugHUD DebugHUD;
+ public List NetworkTasks = new List();
public GameManager GameManager { get; private set; } = new();
public AnimationBuilder AnimationBuilder { get; private set; } = new AnimationBuilder();
@@ -37,6 +44,8 @@ namespace DangerousD.GameCore
public InputManager InputManager { get; private set; } = new InputManager();
public SoundManager SoundManager { get; private set; } = new SoundManager();
public SettingsManager SettingsManager { get; private set; } = new SettingsManager();
+
+ private RenderTarget2D renderTarget;
public AppManager()
{
Content.RootDirectory = "Content";
@@ -53,11 +62,15 @@ namespace DangerousD.GameCore
resolution = SettingsManager.Resolution;
_graphics.PreferredBackBufferWidth = resolution.X;
_graphics.PreferredBackBufferHeight = resolution.Y;
- // _graphics.IsFullScreen = true;
+ _graphics.IsFullScreen = false;
gameState = GameState.Menu;
MenuGUI = new MenuGUI();
LoginGUI = new LoginGUI();
+ OptionsGUI = new OptionsGUI();
LobbyGUI = new LobbyGUI();
+ DeathGUI = new DeathGUI();
+ HUD = new HUD();
+ DebugHUD = new DebugHUD();
UIManager.resolution = resolution;
UIManager.resolutionInGame = inGameResolution;
}
@@ -67,16 +80,25 @@ namespace DangerousD.GameCore
AnimationBuilder.LoadAnimations();
MenuGUI.Initialize();
LoginGUI.Initialize();
+
+ DebugHUD.Initialize();
+ OptionsGUI.Initialize();
+ HUD.Initialize();
LobbyGUI.Initialize();
+ DeathGUI.Initialize();
base.Initialize();
}
protected override void LoadContent()
{
_spriteBatch = new SpriteBatch(GraphicsDevice);
+ DebugHUD.LoadContent();
MenuGUI.LoadContent();
LoginGUI.LoadContent();
+ OptionsGUI.LoadContent();
LobbyGUI.LoadContent();
+ DeathGUI.LoadContent();
+ HUD.LoadContent();
GameObject.debugTexture = new Texture2D(GraphicsDevice, 1, 1);
GameObject.debugTexture.SetData(new Color[] { new Color(1, 0,0,0.25f) });
SoundManager.LoadSounds();
@@ -91,6 +113,7 @@ namespace DangerousD.GameCore
InputManager.Update();
SoundManager.Update();
+
switch (gameState)
{
case GameState.Menu:
@@ -105,12 +128,19 @@ namespace DangerousD.GameCore
case GameState.Lobby:
LobbyGUI.Update(gameTime);
break;
+ case GameState.Death:
+ DeathGUI.Update(gameTime);
+ break;
+ case GameState.HUD:
+ HUD.Update(gameTime);
+ break;
case GameState.Game:
GameManager.Update(gameTime);
break;
default:
break;
}
+ DebugHUD.Update(gameTime);
base.Update(gameTime);
}
@@ -134,6 +164,12 @@ namespace DangerousD.GameCore
case GameState.Lobby:
LobbyGUI.Draw(_spriteBatch);
break;
+ case GameState.Death:
+ DeathGUI.Draw(_spriteBatch);
+ break;
+ case GameState.HUD:
+ HUD.Draw(_spriteBatch);
+ break;
case GameState.Game:
_spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointClamp);
GameManager.Draw(_spriteBatch);
@@ -148,6 +184,7 @@ namespace DangerousD.GameCore
_spriteBatch.End();
+ DebugHUD.Draw(_spriteBatch);
base.Draw(gameTime);
}
@@ -165,9 +202,9 @@ namespace DangerousD.GameCore
case GameState.Lobby:
break;
case GameState.Game:
- GameManager.mapManager.LoadLevel("map");
+ GameManager.mapManager.LoadLevel("lvl");
break;
- case GameState.GameOver:
+ case GameState.Death:
break;
default:
throw new ArgumentOutOfRangeException();
@@ -188,18 +225,29 @@ namespace DangerousD.GameCore
case NetworkTaskOperationEnum.CreateEntity:
break;
case NetworkTaskOperationEnum.SendPosition:
+ LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId);
+ entity.SetPosition(networkTask.position);
break;
case NetworkTaskOperationEnum.ChangeState:
break;
case NetworkTaskOperationEnum.ConnectToHost:
+ Player connectedPlayer = new Player(Vector2.Zero);
+ NetworkTasks.Add(new NetworkTask(connectedPlayer.id));
+ NetworkTask task = new NetworkTask();
+ NetworkTasks.Add(task.AddConnectedPlayer(GameManager.GetPlayer1.id, GameManager.GetPlayer1.Pos));
break;
case NetworkTaskOperationEnum.GetClientPlayerId:
+ GameManager.GetPlayer1.id = networkTask.objId;
+ break;
+ case NetworkTaskOperationEnum.AddConnectedPlayer:
+ Player remoteConnectedPlayer = new Player(networkTask.position);
+ remoteConnectedPlayer.id = networkTask.objId;
+ GameManager.players.Add(remoteConnectedPlayer);
break;
default:
break;
}
}
-
}
public void SetMultiplayerState(MultiPlayerStatus multiPlayerStatus)
{
diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs
index 342813b..7e4851a 100644
--- a/DangerousD/GameCore/Managers/GameManager.cs
+++ b/DangerousD/GameCore/Managers/GameManager.cs
@@ -8,14 +8,18 @@ using System;
using System.Collections.Generic;
using System.Text;
using DangerousD.GameCore.GameObjects.LivingEntities.Monsters;
+using System.Linq;
+using DangerousD.GameCore.GUI;
+using DangerousD.GameCore.Network;
namespace DangerousD.GameCore
{
public class GameManager
{
public List GetAllGameObjects { get; private set; }
-
+ private int currentEntityId = 0;
public List livingEntities;
+ public List livingEntitiesWithoutPlayers;
public List entities;
public List mapObjects;
public List BackgroundObjects;
@@ -24,35 +28,43 @@ namespace DangerousD.GameCore
public PhysicsManager physicsManager;
public List players;
public List otherObjects = new();
-
+
public Player GetPlayer1 { get; private set; }
public GameManager()
{
others = new List();
GetAllGameObjects = new List();
livingEntities = new List();
+ livingEntitiesWithoutPlayers = new List();
mapObjects = new List();
BackgroundObjects = new List();
entities = new List();
players = new List();
mapManager = new MapManager(1);
physicsManager = new PhysicsManager();
-
- }
-
+ }
internal void Register(GameObject gameObject)
{
GetAllGameObjects.Add(gameObject);
+ if (gameObject is Entity)
+ {
+ gameObject.id = currentEntityId;
+ currentEntityId++;
+ }
if (gameObject is Player objPl)
{
livingEntities.Add(gameObject as LivingEntity);
players.Add(objPl);
- GetPlayer1 = players[0];
+ if (GetPlayer1 is null)
+ {
+ GetPlayer1 = players[players.Count - 1];
+ }
}
else if (gameObject is LivingEntity objLE)
{
+ livingEntitiesWithoutPlayers.Add(objLE);
livingEntities.Add(objLE);
}
else if (gameObject is Entity objE)
@@ -71,7 +83,6 @@ namespace DangerousD.GameCore
otherObjects.Add(gameObject);
}
}
-
public void Draw(SpriteBatch _spriteBatch)
{
foreach (var item in BackgroundObjects)
@@ -88,21 +99,39 @@ namespace DangerousD.GameCore
public void Update(GameTime gameTime)
{
+ AppManager.Instance.DebugHUD.Set("playerId: ", GetPlayer1.id.ToString());
+ if (AppManager.Instance.NetworkTasks.Count > 0)
+ {
+ AppManager.Instance.NetworkManager.SendMsg(AppManager.Instance.NetworkTasks.ToList());
+ AppManager.Instance.NetworkTasks.Clear();
+ }
foreach (var item in BackgroundObjects)
item.Update(gameTime);
foreach (var item in mapObjects)
item.Update(gameTime);
foreach (var item in entities)
item.Update(gameTime);
-
- for (int i = 0; i < livingEntities.Count; i++)
- livingEntities[i].Update(gameTime);
+ if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.Client)
+ {
+ for (int i = 0; i < livingEntitiesWithoutPlayers.Count; i++)
+ {
+ livingEntitiesWithoutPlayers[i].Update(gameTime);
+ }
+ GetPlayer1.Update(gameTime);
+ }
+ else
+ {
+ for (int i = 0; i < livingEntitiesWithoutPlayers.Count; i++)
+ {
+ livingEntitiesWithoutPlayers[i].PlayAnimation();
+ }
+ GetPlayer1.Update(gameTime);
+ }
+ GetPlayer1.Update(gameTime);
foreach (var item in otherObjects)
item.Update(gameTime);
physicsManager.UpdateCollisions(entities, livingEntities, mapObjects, gameTime);
-
-
}
}
-}
+}
\ No newline at end of file
diff --git a/DangerousD/GameCore/Managers/MapManager.cs b/DangerousD/GameCore/Managers/MapManager.cs
index cf994b4..bdb2e0b 100644
--- a/DangerousD/GameCore/Managers/MapManager.cs
+++ b/DangerousD/GameCore/Managers/MapManager.cs
@@ -64,7 +64,7 @@ namespace DangerousD.GameCore.Managers
{
if (tiles[i] != 0)
{
- Vector2 pos = new(((chunkX+ i % chunkW) * tileSize.X + offsetX) * _scale + 370,
+ Vector2 pos = new(((chunkX+ i % chunkW) * tileSize.X + offsetX) * _scale,
((chunkY + i / chunkW) * tileSize.Y + offsetY) * _scale);
//pos *= _scale;
Rectangle sourceRect = new(new Point((tiles[i] -1) % _columns, (tiles[i] -1) / _columns) * tileSize.ToPoint(), tileSize.ToPoint());
@@ -106,7 +106,7 @@ namespace DangerousD.GameCore.Managers
foreach (XmlNode entity in group.ChildNodes)
{
Type type = Type.GetType($"DangerousD.GameCore.GameObjects.{entityType}");
- Entity inst = (Entity)Activator.CreateInstance(type, new Vector2(float.Parse(entity.Attributes["x"].Value, CultureInfo.InvariantCulture) + offsetX+280, float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY - 200) * _scale);
+ Entity inst = (Entity)Activator.CreateInstance(type, new Vector2(float.Parse(entity.Attributes["x"].Value, CultureInfo.InvariantCulture) + offsetX, float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY ) * _scale);
inst.SetPosition(new Vector2(inst.Pos.X, inst.Pos.Y - inst.Height));
inst.Height *= _scale;
inst.Width *= _scale;
diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs
index 980d7b3..7899c98 100644
--- a/DangerousD/GameCore/Managers/PhysicsManager.cs
+++ b/DangerousD/GameCore/Managers/PhysicsManager.cs
@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using DangerousD.GameCore.GameObjects.LivingEntities;
using Microsoft.Xna.Framework;
namespace DangerousD.GameCore.Managers
@@ -20,9 +21,9 @@ namespace DangerousD.GameCore.Managers
item.velocity = item.velocity + item.acceleration * delta;
}
- CheckCollisions(livingEntities, mapObjects);
- OnCollision(entities, livingEntities);
- OnCollision(livingEntities);
+ CheckCollisionsLE_MO(livingEntities, mapObjects);
+ CheckCollisionsE_LE(entities, livingEntities);
+ CheckCollisionsLE_LE(livingEntities);
//entities dont move
//Living entities dont move
@@ -33,68 +34,88 @@ namespace DangerousD.GameCore.Managers
//OnCollision
}
- public void CheckCollisions(List livingEntities,
+ private void CheckCollisionsLE_MO(List livingEntities,
List mapObjects)
{
- LivingEntity currentEntity;
- Rectangle oldRect;
- for (int i = 0; i < livingEntities.Count; i++)
+ foreach (var currentEntity in livingEntities)
{
- currentEntity = livingEntities[i];
- oldRect = currentEntity.Rectangle;
- bool isXNormalise = true;
- bool isYNormalise = true;
+ var currentRect = currentEntity.Rectangle;
+ var newRect = currentRect;
- oldRect.Offset((int)currentEntity.velocity.X, 0);
- for (int j = 0; j < mapObjects.Count; j++)
+ #region x collision
+ var collidedX = false;
+ var tryingRectX = currentRect;
+ tryingRectX.Offset((int)Math.Ceiling(currentEntity.velocity.X), 0);
+ 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
+ && tryingRectX.Intersects(mapObject.Rectangle)
+ )
{
- if (oldRect.Intersects(mapObjects[j].Rectangle))
- {
- isXNormalise = false;
- oldRect.Offset(-(int)currentEntity.velocity.X, 0);
- break;
- }
- }
- }
- if (!isXNormalise)
- currentEntity.velocity.X = 0;
-
-
- oldRect.Offset(0, (int)currentEntity.velocity.Y);
- for (int j = 0; j < mapObjects.Count; j++)
- {
-
- if (oldRect.Intersects(mapObjects[j].Rectangle))
- {
- isYNormalise = false;
- oldRect.Offset(0, -(int)currentEntity.velocity.Y);
+ collidedX = true;
break;
}
}
- if (!isYNormalise)
+ if (collidedX)
+ {
+ currentEntity.velocity.X = 0;
+ }
+ else
+ {
+ newRect.X = tryingRectX.X;
+ }
+ #endregion
+
+ #region y collision
+ var collidedY = false;
+ var tryingRectY = currentRect;
+ tryingRectY.Offset(0, (int)Math.Ceiling(currentEntity.velocity.Y));
+ if (currentEntity is Player)
+ {
+ AppManager.Instance.DebugHUD.Set("velocity", currentEntity.velocity.ToString());
+ AppManager.Instance.DebugHUD.Set("intersects y", "");
+ }
+ foreach (var mapObject in mapObjects)
+ {
+ if (tryingRectY.Intersects(mapObject.Rectangle))
+ {
+ if (currentEntity is Player) AppManager.Instance.DebugHUD.Set("intersects y", mapObject.GetType().ToString());
+ collidedY = true;
+ break;
+ }
+ }
+ currentEntity.isOnGround = collidedY && currentEntity.velocity.Y > 0;
+ if (collidedY)
+ {
currentEntity.velocity.Y = 0;
- currentEntity.SetPosition(new Vector2(oldRect.X, oldRect.Y));
+ }
+ else
+ {
+ newRect.Y = tryingRectY.Y;
+ }
+ #endregion
+
+ currentEntity.SetPosition(new Vector2(newRect.X, newRect.Y));
}
}
- public void OnCollision(List entities, List livingEntities)
+ private void CheckCollisionsE_LE(List entities, List 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]);
- entities[i].OnCollision(livingEntities[j]);
+ livingEntity.OnCollision(entity);
+ entity.OnCollision(livingEntity);
}
}
}
-
}
- public void OnCollision(List livingEntities)
+ private void CheckCollisionsLE_LE(List livingEntities)
{
for (int i = 0; i < livingEntities.Count; i++)
{
diff --git a/DangerousD/GameCore/Managers/SoundManager.cs b/DangerousD/GameCore/Managers/SoundManager.cs
index aed8571..8e2df9e 100644
--- a/DangerousD/GameCore/Managers/SoundManager.cs
+++ b/DangerousD/GameCore/Managers/SoundManager.cs
@@ -20,7 +20,8 @@ namespace DangerousD.GameCore
public void LoadSounds() // метод для загрузки звуков из папки
{
var k = Directory.GetFiles("../../..//Content").Where(x => x.EndsWith("mp3"));
- if (k.Count()>0)
+
+ if (k.Count() > 0)
{
string[] soundFiles = k.Select(x => x.Split("\\").Last().Split("/").Last().Replace(".mp3", "")).ToArray();// папка со звуками там где exe
@@ -30,17 +31,23 @@ namespace DangerousD.GameCore
}
}
+
+ if (k.Count()>0)
+ {
+
+ }
}
public void StartAmbientSound(string soundName) // запустить звук у которого нет позиции
{
+ return;
var sound = new Sound(Sounds[soundName]);
sound.SoundEffect.IsLooped = false;
sound.SoundEffect.Play();
PlayingSounds.Add(sound);
if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host)
{
- AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(Vector2.Zero, soundName));
+ AppManager.Instance.NetworkTasks.Add(new Network.NetworkTask(Vector2.Zero, soundName));
}
}
public void StartSound(string soundName, Vector2 soundPos, Vector2 playerPos) // запустить звук у которого есть позиция
@@ -52,7 +59,7 @@ namespace DangerousD.GameCore
PlayingSounds.Add(sound);
if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host)
{
- AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(soundPos, soundName));
+ AppManager.Instance.NetworkTasks.Add(new Network.NetworkTask(soundPos, soundName));
}
}
public void StopAllSounds() // остановка всех звуков
diff --git a/DangerousD/GameCore/Network/NetworkManager.cs b/DangerousD/GameCore/Network/NetworkManager.cs
index caf16a1..292e210 100644
--- a/DangerousD/GameCore/Network/NetworkManager.cs
+++ b/DangerousD/GameCore/Network/NetworkManager.cs
@@ -25,7 +25,7 @@ namespace DangerousD.GameCore.Network
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse(IpAddress);
- int port = 8000;
+ int port = 51873;
endPoint = new IPEndPoint(address, port);
}
catch { }
@@ -71,6 +71,7 @@ namespace DangerousD.GameCore.Network
Thread acceptThread = new Thread(AcceptSockets);
acceptThread.Start();
state = "Host";
+ AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Host);
}
catch { }
}
@@ -84,10 +85,13 @@ namespace DangerousD.GameCore.Network
Thread.Sleep(10);
Thread ReceivingThread = new Thread(ReceiveMsgFromHost);
ReceivingThread.Start();
+ NetworkTask connectionTask = new NetworkTask("Player");
+ AppManager.Instance.NetworkTasks.Add(connectionTask);
+ AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Client);
}
catch { }
}
- public void SendMsg(NetworkTask networkTask)
+ public void SendMsg(List networkTask)
{
byte[] Data = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(networkTask));
int count = Data.Length;
diff --git a/DangerousD/GameCore/Network/NetworkTask.cs b/DangerousD/GameCore/Network/NetworkTask.cs
index 1dbb508..8611d78 100644
--- a/DangerousD/GameCore/Network/NetworkTask.cs
+++ b/DangerousD/GameCore/Network/NetworkTask.cs
@@ -19,6 +19,7 @@ namespace DangerousD.GameCore.Network
public Vector2 velocity { get; set; }
public Type type { get; set; }
+ public NetworkTask() { }
///
/// Нанести урон сущности
///
@@ -126,5 +127,12 @@ namespace DangerousD.GameCore.Network
this.velocity = velocity;
this.type = type;
}
+ public NetworkTask AddConnectedPlayer(int connectedPlayerId, Vector2 playerPosition)
+ {
+ operation = NetworkTaskOperationEnum.AddConnectedPlayer;
+ objId = connectedPlayerId;
+ position = playerPosition;
+ return this;
+ }
}
}
diff --git a/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs b/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs
index 86cb112..7fad430 100644
--- a/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs
+++ b/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs
@@ -9,6 +9,6 @@ namespace DangerousD.GameCore.Network
[Serializable]
public enum NetworkTaskOperationEnum
{
- TakeDamage, SendSound, CreateEntity, SendPosition, ChangeState, ConnectToHost, GetClientPlayerId
+ TakeDamage, SendSound, CreateEntity, SendPosition, ChangeState, ConnectToHost, GetClientPlayerId, AddConnectedPlayer
}
}
diff --git a/MonogameLibrary/UI/Base/DrawableUIElement.cs b/MonogameLibrary/UI/Base/DrawableUIElement.cs
index 58e739b..8835ce0 100644
--- a/MonogameLibrary/UI/Base/DrawableUIElement.cs
+++ b/MonogameLibrary/UI/Base/DrawableUIElement.cs
@@ -15,7 +15,7 @@ namespace MonogameLibrary.UI.Base
protected Texture2D texture;
protected int layerIndex;
protected UIManager Manager;
- public string textureName;
+ public string textureName = "";
public Rectangle rectangle = new Rectangle(0, 0, 10, 10);
public Color mainColor = Color.White;
diff --git a/MonogameLibrary/UI/Base/UIManager.cs b/MonogameLibrary/UI/Base/UIManager.cs
index f8c1178..d37416d 100644
--- a/MonogameLibrary/UI/Base/UIManager.cs
+++ b/MonogameLibrary/UI/Base/UIManager.cs
@@ -11,11 +11,13 @@ using static System.Net.Mime.MediaTypeNames;
namespace MonogameLibrary.UI.Base
{
+ public enum InputState { GamePad, Keyboard, Mouse }
public class UIManager
{
Dictionary> layerCollection = new();
public GraphicsDevice GraphicsDevice { get; private set; }
public SpriteFont BaseFont { get; private set; }
+ public InputState inputState = InputState.Mouse;
public void Initialize(GraphicsDevice graphicsDevice)
{
GraphicsDevice = graphicsDevice;
@@ -29,6 +31,7 @@ namespace MonogameLibrary.UI.Base
static MouseState mouseState, prevmouseState;
static KeyboardState keyboardState;
public static Point resolutionInGame, resolution;
+
public void LoadContent(ContentManager content, string font)
{
diff --git a/MonogameLibrary/UI/Elements/Button.cs b/MonogameLibrary/UI/Elements/Button.cs
index a61c485..cf7d5ce 100644
--- a/MonogameLibrary/UI/Elements/Button.cs
+++ b/MonogameLibrary/UI/Elements/Button.cs
@@ -24,6 +24,7 @@ namespace MonogameLibrary.UI.Elements
public virtual bool InteractUpdate(MouseState mouseState, MouseState prevmouseState)
{
+ //if (Manager.)
if (rectangle.Intersects(new Rectangle(mouseState.Position, Point.Zero)))
{
if (mouseState.LeftButton == ButtonState.Pressed || mouseState.RightButton == ButtonState.Pressed)
diff --git a/MonogameLibrary/UI/Elements/CheckBox.cs b/MonogameLibrary/UI/Elements/CheckBox.cs
index 76f552d..e2e9c04 100644
--- a/MonogameLibrary/UI/Elements/CheckBox.cs
+++ b/MonogameLibrary/UI/Elements/CheckBox.cs
@@ -1,4 +1,5 @@
using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using MonogameLibrary.UI.Base;
@@ -15,6 +16,9 @@ namespace MonogameLibrary.UI.Elements
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 event OnCheck? Checked;
private bool isChecked;
@@ -42,25 +46,33 @@ namespace MonogameLibrary.UI.Elements
}
return false;
}
+
+ public override void LoadTexture(ContentManager content)
+ {
+ texture1 = content.Load("checkboxs_off");
+ texture2 = content.Load("checkboxs_off-on");
+ texture3 = content.Load("checkboxs_on");
+ base.LoadTexture(content);
+ }
public override void Draw(SpriteBatch _spriteBatch)
{
if (isChecked)
{
if (hoverState == HoverState.None)
- _spriteBatch.Draw(texture, rectangle, new Color(124, 255, 0));
+ _spriteBatch.Draw(texture3, rectangle, Color.White);
else if (hoverState == HoverState.Hovering)
- _spriteBatch.Draw(texture, rectangle, new Color(124, 215, 0));
+ _spriteBatch.Draw(texture3, rectangle, Color.White);
else
- _spriteBatch.Draw(texture, rectangle, new Color(124, 175, 0));
+ _spriteBatch.Draw(texture2, rectangle, Color.White );
}
else
{
if (hoverState == HoverState.None)
- _spriteBatch.Draw(texture, rectangle, new Color(255, 20, 0));
+ _spriteBatch.Draw(texture1, rectangle, Color.White);
else if (hoverState == HoverState.Hovering)
- _spriteBatch.Draw(texture, rectangle, new Color(215, 20, 0));
+ _spriteBatch.Draw(texture2, rectangle, Color.White);
else
- _spriteBatch.Draw(texture, rectangle, new Color(175, 20, 0));
+ _spriteBatch.Draw(texture2, rectangle, Color.White);
}
DrawText(_spriteBatch);
}
diff --git a/MonogameLibrary/UI/Elements/Rect.cs b/MonogameLibrary/UI/Elements/Rect.cs
new file mode 100644
index 0000000..d776fb7
--- /dev/null
+++ b/MonogameLibrary/UI/Elements/Rect.cs
@@ -0,0 +1,68 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+using MonogameLibrary.UI.Base;
+using MonogameLibrary.UI.Enums;
+using MonogameLibrary.UI.Interfaces;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using static MonogameLibrary.UI.Elements.Button;
+
+namespace MonogameLibrary.UI.Elements
+{
+ public class Rect : DrawableTextedUiElement, IInteractable
+ {
+ public delegate void OnButtonPressed();
+ public event OnButtonPressed? RightButtonPressed;
+ public event OnButtonPressed? LeftButtonPressed;
+ protected HoverState hoverState = HoverState.None;
+
+ public Rect(UIManager manager, int layerIndex = 0) : base(manager, layerIndex)
+ {
+ }
+
+ public virtual bool InteractUpdate(MouseState mouseState, MouseState prevmouseState)
+ {
+ //if (Manager.)
+ if (rectangle.Intersects(new Rectangle(mouseState.Position, Point.Zero)))
+ {
+ if (mouseState.LeftButton == ButtonState.Pressed || mouseState.RightButton == ButtonState.Pressed)
+ {
+ hoverState = HoverState.Pressing;
+ }
+ else
+ {
+ hoverState = HoverState.Hovering;
+ }
+ if (prevmouseState.LeftButton == ButtonState.Pressed)
+ {
+ if (mouseState.LeftButton != prevmouseState.LeftButton)
+ {
+ hoverState = HoverState.Pressing;
+ LeftButtonPressed?.Invoke();
+ return true;
+ }
+ }
+ else if(prevmouseState.RightButton == ButtonState.Pressed)
+ {
+ if (mouseState.RightButton != prevmouseState.RightButton)
+ {
+ RightButtonPressed?.Invoke();
+ return true;
+ }
+ }
+ }
+ else
+ {
+ hoverState = HoverState.None;
+ }
+ return false;
+ }
+ public override void Draw(SpriteBatch _spriteBatch)
+ {
+ _spriteBatch.Draw(texture, rectangle, Color.White);
+ DrawText(_spriteBatch);
+ }
+ }
+}
diff --git a/MonogameLibrary/UI/Elements/Slider.cs b/MonogameLibrary/UI/Elements/Slider.cs
index 7888d70..8db7152 100644
--- a/MonogameLibrary/UI/Elements/Slider.cs
+++ b/MonogameLibrary/UI/Elements/Slider.cs
@@ -1,4 +1,5 @@
using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using MonogameLibrary.UI.Base;
@@ -17,7 +18,9 @@ namespace MonogameLibrary.UI.Elements
}
public delegate void OnSliderChanges(float value);
public event OnSliderChanges? SliderChanged;
+ public int indentation = 5;
+ Texture2D texture2;
public Rectangle sliderRect = new Rectangle(0, 0, 30, 30);
private float sliderValue = 0;
private float minValue = 0, maxValue = 1;
@@ -50,6 +53,13 @@ namespace MonogameLibrary.UI.Elements
sliderState = SliderState.None;
return false;
}
+
+ public override void LoadTexture(ContentManager content)
+ {
+ texture2 = content.Load("slider");
+ base.LoadTexture(content);
+ }
+
public void SetValue(float setvalue)
{
sliderValue = setvalue;
@@ -60,14 +70,14 @@ namespace MonogameLibrary.UI.Elements
{
base.Draw(_spriteBatch);
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;
if (sliderState == SliderState.Moving)
- _spriteBatch.Draw(texture, sliderRect, Color.DarkRed);
+ _spriteBatch.Draw(texture2, sliderRect, Color.DarkRed);
else if(sliderState == SliderState.HoveringOverSliderButton)
- _spriteBatch.Draw(texture, sliderRect, new Color(200,0,0));
+ _spriteBatch.Draw(texture2, sliderRect, new Color(200,0 ,0));
else
- _spriteBatch.Draw(texture, sliderRect, Color.Red);
+ _spriteBatch.Draw(texture2, sliderRect, Color.Red);
DrawText(_spriteBatch);
}
}
diff --git a/MonogameLibrary/UI/Elements/TextBox.cs b/MonogameLibrary/UI/Elements/TextBox.cs
index c5c7b56..3649692 100644
--- a/MonogameLibrary/UI/Elements/TextBox.cs
+++ b/MonogameLibrary/UI/Elements/TextBox.cs
@@ -93,7 +93,7 @@ namespace MonogameLibrary.UI.Elements
_spriteBatch.Draw(texture, rectangle, new Color(211, 211, 211));
else
_spriteBatch.Draw(texture, rectangle, new Color(112, 128, 144));
- DrawText(_spriteBatch);
+ DrawText(_spriteBatch);
}
}
diff --git a/gitignore b/gitignore
new file mode 100644
index 0000000..e69de29