diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb
index c977303..dbbe74b 100644
--- a/DangerousD/Content/Content.mgcb
+++ b/DangerousD/Content/Content.mgcb
@@ -14,14 +14,7 @@
#---------------------------------- Content ---------------------------------#
-#begin ButtonFont.spritefont
-/importer:FontDescriptionImporter
-/processor:FontDescriptionProcessor
-/processorParam:PremultiplyAlpha=True
-/processorParam:TextureFormat=Compressed
-/build:ButtonFont.spritefont
-
-#begin checkboxs_off-on.png
+#begin MonstersAnimations.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
@@ -87,6 +80,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
@@ -252,7 +252,19 @@
/processorParam:TextureFormat=Color
/build:textboxbackground6-1.png
-#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 PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
@@ -264,6 +276,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/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/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/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs
index d276984..96ff4ad 100644
--- a/DangerousD/GameCore/GameObjects/GameObject.cs
+++ b/DangerousD/GameCore/GameObjects/GameObject.cs
@@ -17,8 +17,6 @@ namespace DangerousD.GameCore
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)
{
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 f2dc98a..4ab4494 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")
@@ -113,7 +120,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)
{
@@ -130,10 +137,19 @@ 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 9a9cc5e..39b1926 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
@@ -14,6 +14,8 @@ 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;
@@ -21,6 +23,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public int rightBorder;
public int leftBorder;
public bool isVisible = true;
+ private bool isAttacked = false;
public GameObject objectAttack;
public Player(Vector2 position) : base(position)
@@ -30,7 +33,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
AppManager.Instance.InputManager.ShootEvent += Shoot;
- AppManager.Instance.InputManager.MovEventJump += AnimationJump;
+ AppManager.Instance.InputManager.MovEventJump += Jump;
AppManager.Instance.InputManager.MovEventDown += MoveDown;
velocity = new Vector2(0, 0);
@@ -38,9 +41,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
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 Attack()
{
@@ -66,23 +71,26 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
}
public void Death(string monsterName)
{
- /*if(monsterName == "Zombie")
+ isAttacked = true;
+ if(monsterName == "Zombie")
{
DeathRectangle deathRectangle = new DeathRectangle(Pos, "DeathFrom" + monsterName);
deathRectangle.Gr.actionOfAnimationEnd += (a) =>
{
if (a == "DeathFrom" + monsterName)
{
- AppManager.Instance.ChangeGameState(GameState.GameOver);
+ AppManager.Instance.ChangeGameState(GameState.Death);
}
};
}
- isAlive = false;*/
+ isAlive = false;
}
- public void AnimationJump()
+ public void Jump()
{
- velocity.Y = -11;
- isJump = true;
+ if (isOnGround)
+ {
+ velocity.Y = -11;
+ }
// здесь будет анимация
}
public void Shoot()
@@ -93,33 +101,34 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public override void Update(GameTime gameTime)
{
GraphicsComponent.CameraPosition = (_pos-new Vector2(200, 350)).ToPoint();
- velocity.X = 0.5f;
- if (velocity.Y == 0)
+ if (!isAttacked)
{
- isJump = false;
+ Move(gameTime);
+ }
+ else
+ {
+ velocity.X = 0;
}
base.Update(gameTime);
- Move(gameTime);
}
public void Move(GameTime gameTime)
{
float delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
- if (AppManager.Instance.InputManager.VectorMovementDirection.X==1)
+ velocity.X = 5 * AppManager.Instance.InputManager.VectorMovementDirection.X;
+ if (AppManager.Instance.InputManager.VectorMovementDirection.X > 0)
{
- if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveRight")//идёт направо
+ if (GraphicsComponent.GetCurrentAnimation != "playerMoveRight")//идёт направо
{
- GraphicsComponent.StartAnimation("ZombieMoveRight");
+ GraphicsComponent.StartAnimation("playerMoveRight");
}
- velocity.X = 5;
}
- else if (AppManager.Instance.InputManager.VectorMovementDirection.X == -1)//идёт налево
+ else if (AppManager.Instance.InputManager.VectorMovementDirection.X < 0)//идёт налево
{
- if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft")
+ if (GraphicsComponent.GetCurrentAnimation != "playerMoveLeft")
{
- GraphicsComponent.StartAnimation("ZombieMoveLeft");
+ GraphicsComponent.StartAnimation("playerMoveLeft");
}
- velocity.X = -5;
}
else if(AppManager.Instance.InputManager.VectorMovementDirection.X == 0)//стоит
{
@@ -127,13 +136,12 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
{
GraphicsComponent.StartAnimation("ZombieMoveLeft");
}
- velocity.X = 0;
}
}
public void MoveDown()
{
+ // ПОЧЕМУ
velocity.Y = -11;
- isJump = true;
}
}
diff --git a/DangerousD/GameCore/GameObjects/LivingEntity.cs b/DangerousD/GameCore/GameObjects/LivingEntity.cs
index 5620568..90a2170 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntity.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntity.cs
@@ -4,7 +4,7 @@ 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)
@@ -13,7 +13,7 @@ public abstract class LivingEntity : Entity
}
public override void SetPosition(Vector2 position)
{
- targetPosition = position; _pos = position;
+ _pos = position;
} //TODO befrend targetpos and physics engine
diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs
index bf08797..f2e2179 100644
--- a/DangerousD/GameCore/Managers/AppManager.cs
+++ b/DangerousD/GameCore/Managers/AppManager.cs
@@ -14,7 +14,13 @@ using DangerousD.GameCore.Managers;
namespace DangerousD.GameCore
{
public enum MultiPlayerStatus { SinglePlayer, Host, Client }
+<<<<<<< HEAD
public enum GameState { Menu, Options, Lobby, Game, Login, Death, HUD }
+=======
+ public enum GameState { Menu, Options, Lobby, Game, Login, Death,
+ GameOver
+ }
+>>>>>>> e6d0f2b8a092647a5c02741fd70194bfb376b202
public class AppManager : Game
{
public static AppManager Instance { get; private set; }
@@ -24,13 +30,14 @@ namespace DangerousD.GameCore
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(1920, 1080);
+ public Point inGameResolution = new Point(1366, 768);
IDrawableObject MenuGUI;
IDrawableObject OptionsGUI;
IDrawableObject LoginGUI;
IDrawableObject LobbyGUI;
IDrawableObject DeathGUI;
IDrawableObject HUD;
+ public DebugHUD DebugHUD;
public GameManager GameManager { get; private set; } = new();
public AnimationBuilder AnimationBuilder { get; private set; } = new AnimationBuilder();
@@ -64,6 +71,7 @@ namespace DangerousD.GameCore
LobbyGUI = new LobbyGUI();
DeathGUI = new DeathGUI();
HUD = new HUD();
+ DebugHUD = new DebugHUD();
UIManager.resolution = resolution;
UIManager.resolutionInGame = inGameResolution;
}
@@ -74,6 +82,7 @@ namespace DangerousD.GameCore
MenuGUI.Initialize();
LoginGUI.Initialize();
+ DebugHUD.Initialize();
OptionsGUI.Initialize();
HUD.Initialize();
LobbyGUI.Initialize();
@@ -84,6 +93,7 @@ namespace DangerousD.GameCore
protected override void LoadContent()
{
_spriteBatch = new SpriteBatch(GraphicsDevice);
+ DebugHUD.LoadContent();
MenuGUI.LoadContent();
LoginGUI.LoadContent();
OptionsGUI.LoadContent();
@@ -131,6 +141,7 @@ namespace DangerousD.GameCore
default:
break;
}
+ DebugHUD.Update(gameTime);
base.Update(gameTime);
}
@@ -174,6 +185,7 @@ namespace DangerousD.GameCore
_spriteBatch.End();
+ DebugHUD.Draw(_spriteBatch);
base.Draw(gameTime);
}
diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs
index 342813b..8664666 100644
--- a/DangerousD/GameCore/Managers/GameManager.cs
+++ b/DangerousD/GameCore/Managers/GameManager.cs
@@ -25,7 +25,7 @@ namespace DangerousD.GameCore
public List players;
public List otherObjects = new();
- public Player GetPlayer1 { get; private set; }
+ public Player GetPlayer1;
public GameManager()
{
others = new List();
@@ -72,6 +72,35 @@ namespace DangerousD.GameCore
}
}
+ public void Remove(GameObject gameObject)
+ {
+ GetAllGameObjects.Remove(gameObject);
+ if (gameObject is Player objPl)
+ {
+ livingEntities.Remove(gameObject as LivingEntity);
+ players.Remove(objPl);
+ }
+ else if (gameObject is LivingEntity objLE)
+ {
+ livingEntities.Remove(objLE);
+ }
+ else if (gameObject is Entity objE)
+ {
+ entities.Remove(objE);
+ }
+ else if (gameObject is MapObject obj)
+ {
+ if (obj.IsColliderOn)
+ mapObjects.Remove(obj);
+ else
+ BackgroundObjects.Remove(obj);
+ }
+ else
+ {
+ otherObjects.Remove(gameObject);
+ }
+ }
+
public void Draw(SpriteBatch _spriteBatch)
{
foreach (var item in BackgroundObjects)
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 3a1e03f..7da1b17 100644
--- a/DangerousD/GameCore/Managers/SoundManager.cs
+++ b/DangerousD/GameCore/Managers/SoundManager.cs
@@ -40,6 +40,7 @@ namespace DangerousD.GameCore
public void StartAmbientSound(string soundName) // запустить звук у которого нет позиции
{
+ return;
var sound = new Sound(Sounds[soundName]);
sound.SoundEffect.IsLooped = false;
sound.SoundEffect.Play();