From 3962ce4eac48e626a5bff040bf1358ff81acec7a Mon Sep 17 00:00:00 2001 From: N4K Date: Fri, 18 Aug 2023 00:25:34 +0300 Subject: [PATCH 01/28] spider changes --- DangerousD/Content/MonstersAnimations.png | Bin 24512 -> 22755 bytes DangerousD/Content/map.tmx | 70 +++++++++++++ DangerousD/GameCore/GUI/AbstractGui.cs | 1 - .../LivingEntities/Monsters/Frank.cs | 1 - .../LivingEntities/Monsters/FrankBalls.cs | 1 - .../LivingEntities/Monsters/SilasMaster.cs | 1 - .../LivingEntities/Monsters/Slime.cs | 1 - .../LivingEntities/Monsters/Spider.cs | 99 +++++++++++------- .../LivingEntities/Monsters/Zombie.cs | 11 +- .../LivingEntities/Player/Player.cs | 2 +- .../GameCore/GameObjects/LivingEntity.cs | 2 - DangerousD/GameCore/Managers/AppManager.cs | 2 +- DangerousD/GameCore/Managers/MapManager.cs | 4 +- 13 files changed, 142 insertions(+), 53 deletions(-) create mode 100644 DangerousD/Content/map.tmx diff --git a/DangerousD/Content/MonstersAnimations.png b/DangerousD/Content/MonstersAnimations.png index 5bc9cca18eb4374fd97ab3947e66960f0ff6a4b8..97e3e11eeb67a0487bf48c7ec6826544f5a1b37c 100644 GIT binary patch literal 22755 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 Ns48hH*2$Yk{2ziwLbw0` diff --git a/DangerousD/Content/map.tmx b/DangerousD/Content/map.tmx new file mode 100644 index 0000000..3836987 --- /dev/null +++ b/DangerousD/Content/map.tmx @@ -0,0 +1,70 @@ + + + + + + +294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294 + + +294,294,294,294,294,321,321,321,321,321,321,321,321,321,321,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,321,321,321,321,321,321,321,321,321,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,321, +294,294,294,294,321,321,321,321,321,321,321,321,321,321,321,321 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DangerousD/GameCore/GUI/AbstractGui.cs b/DangerousD/GameCore/GUI/AbstractGui.cs index 7f7b212..7248313 100644 --- a/DangerousD/GameCore/GUI/AbstractGui.cs +++ b/DangerousD/GameCore/GUI/AbstractGui.cs @@ -20,7 +20,6 @@ public abstract class AbstractGui : IDrawableObject public virtual void Initialize() { Manager.Initialize(AppManager.Instance.GraphicsDevice); - this.graphicsDevice = graphicsDevice; CreateUI(); } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs index 8ecddcd..eab15a4 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs @@ -15,7 +15,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public Frank(Vector2 position) : base(position) { isGoRight = false; - Width = 112; Height = 160; leftBoarder = 50; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs index bc28f6b..20756b7 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs @@ -14,7 +14,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { private Rectangle collision; private Vector2 position; - private int healthBall; private bool isFlyRight = true; private bool isAttacking = false; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs index 5dc8df2..852eab3 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs @@ -16,7 +16,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters private int attackTime = 60; private int moveTime = 360; private int currentTime = 0; - private bool isGoRight = true; int leftBorder; int rightBorder; List hands = new List(); diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs index 0e5e954..9b59f62 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs @@ -12,7 +12,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public class Slime : CoreEnemy { - private bool isGoRight = true; private bool isDown = false; int leftBorder; int rightBorder; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs index 0d797aa..dd60669 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs @@ -1,4 +1,5 @@ using DangerousD.GameCore.Graphics; +using DangerousD.GameCore.Managers; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; @@ -17,19 +18,23 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters protected int webLength; protected bool isDown; protected bool isDownUp; + protected PhysicsManager physicsManager; + protected Player player; public Spider(Vector2 position) : base(position) { + player = AppManager.Instance.GameManager.players[0]; isDownUp = true; isDown = true; + physicsManager = AppManager.Instance.GameManager.physicsManager; web = new SpiderWeb(Pos); name = "Spider"; Width = 112; Height = 24; delay = 0; webLength = 0; - monster_speed = 2; - acceleration = Vector2.Zero; + monster_speed = 3; + acceleration = new Vector2(0, -50); } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SpiderMoveRight", "SpiderMoveLeft", "SpiderOnWeb" }, "SpiderMoveRight"); @@ -44,6 +49,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { Attack(gameTime); } + Target(); base.Update(gameTime); } @@ -59,45 +65,43 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters /// public override void Attack(GameTime gameTime) { //48 72 - if (isDownUp) + velocity.X = 0; + Width = 48; + Height = 72; + delay += (float)gameTime.ElapsedGameTime.TotalSeconds; + if (delay > 0.5 && webLength <= 4 && isDown) { - Width = 48; - Height = 72; - delay += (float)gameTime.ElapsedGameTime.TotalSeconds; - if (delay > 0.5 && webLength <= 4 && isDown) + StartCicycleAnimation("SpiderOnWeb"); + acceleration = Vector2.Zero; + webLength++; + _pos.Y += 25; + web.Height = webLength * 25; + web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2 + 2, Pos.Y - 25 * webLength)); + delay = 0; + if (webLength == 4) { - StartCicycleAnimation("SpiderOnWeb"); - webLength++; - _pos.Y += 25; - web.Height = webLength * 25; - web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2 + 2, Pos.Y - 25 * webLength)); - delay = 0; - if (webLength == 4) - { - isDown = false; - } - } - else if (delay > 0.5 && webLength != 0 && !isDown) - { - StartCicycleAnimation("SpiderOnWeb"); - webLength--; - _pos.Y -= 25; - web.Height = webLength * 25; - web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2 + 2, Pos.Y - 25 * webLength)); - delay = 0; - if (webLength == 0) - { - isDown = true; - } - } - else - { - Width = 112; - Height = 24; + isDown = false; } } + else if (delay > 0.5 && webLength != 0 && !isDown) + { + StartCicycleAnimation("SpiderOnWeb"); + webLength--; + _pos.Y -= 25; + web.Height = webLength * 25; + web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2 + 2, Pos.Y - 25 * webLength)); + delay = 0; + if (webLength == 0) + { + isDown = true; + } + } + if (webLength == 0) + { + isAttack = false; + } } - + //сделать условие с Артемом public override void Draw(SpriteBatch spriteBatch) { if (GraphicsComponent.GetCurrentAnimation == "SpiderOnWeb") @@ -118,6 +122,14 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public override void Move(GameTime gameTime) { + Width = 112; + Height = 24; + + int wallCheck = physicsManager.CheckRectangle(new Rectangle((int)Pos.X - 10, (int)Pos.Y, 150, 10)).Count; + if (wallCheck > 0) + { + isGoRight = !isGoRight; + } if (isGoRight) { if (GraphicsComponent.GetCurrentAnimation != "SpiderMoveRight") @@ -146,7 +158,20 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public override void Target() { - throw new NotImplementedException(); + if (physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y, 300, 600), typeof(Player)) != null) + { + if (player.Pos.X - Pos.X <= 30) + { + isAttack = true; + } + } + if (physicsManager.CheckRectangle(new Rectangle((int)Pos.X-300, (int)Pos.Y, 300, 600), typeof(Player)) != null) + { + if (player.Pos.X - Pos.X <= 30) + { + isAttack = true; + } + } } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs index f2dc98a..084bae9 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs @@ -111,29 +111,30 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } base.OnCollision(gameObject); } + 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))!=null) { - if (isGoRight && this._pos.X <= AppManager.Instance.GameManager.players[0].Pos.X) + if(isGoRight && this._pos.X <= AppManager.Instance.GameManager.players[0].Pos.X) { isTarget = true; leftBorder = Pos.X - 10; rightBorder = Pos.X + AppManager.Instance.GameManager.players[0].Pos.X; } - else if (!isGoRight && this._pos.X >= AppManager.Instance.GameManager.players[0].Pos.X) + else if(!isGoRight && this._pos.X >= AppManager.Instance.GameManager.players[0].Pos.X) { isTarget = true; rightBorder = Pos.X + 10; - leftBorder = AppManager.Instance.GameManager.players[0].Pos.X; + leftBorder = AppManager.Instance.GameManager.players[0].Pos.X; } } } + public override void Attack(GameTime gameTime) { throw new NotImplementedException(); } - } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 6e1af79..d7d84a8 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -49,7 +49,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public override void Update(GameTime gameTime) { GraphicsComponent.CameraPosition = (_pos-new Vector2(200, 350)).ToPoint(); - velocity.X = 0.5f; + velocity.X = 1; base.Update(gameTime); } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntity.cs b/DangerousD/GameCore/GameObjects/LivingEntity.cs index 5620568..e72b40b 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntity.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntity.cs @@ -5,8 +5,6 @@ namespace DangerousD.GameCore.GameObjects; public abstract class LivingEntity : Entity { private Vector2 targetPosition; - public Vector2 velocity; - public Vector2 acceleration; public LivingEntity(Vector2 position) : base(position) { acceleration = new Vector2(0, 30); diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index 3379b3c..cbf4c84 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -165,7 +165,7 @@ namespace DangerousD.GameCore case GameState.Lobby: break; case GameState.Game: - GameManager.mapManager.LoadLevel("lvl"); + GameManager.mapManager.LoadLevel("map"); break; case GameState.GameOver: break; diff --git a/DangerousD/GameCore/Managers/MapManager.cs b/DangerousD/GameCore/Managers/MapManager.cs index 5d7d6fc..cf994b4 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, + Vector2 pos = new(((chunkX+ i % chunkW) * tileSize.X + offsetX) * _scale + 370, ((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, float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY) * _scale); + 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); inst.SetPosition(new Vector2(inst.Pos.X, inst.Pos.Y - inst.Height)); inst.Height *= _scale; inst.Width *= _scale; From 424583837a4458606e3eb3e5d8bd19ff989b5cb3 Mon Sep 17 00:00:00 2001 From: AnloGames <7383an@gmail.com> Date: Fri, 18 Aug 2023 01:20:35 +0300 Subject: [PATCH 02/28] Pre 3 player support --- .../GameObjects/LivingEntities/Player/Player.cs | 12 +++++++----- DangerousD/GameCore/Managers/AppManager.cs | 12 +++++++++--- DangerousD/GameCore/Managers/GameManager.cs | 5 ++--- DangerousD/GameCore/Managers/MapManager.cs | 12 +++++++++++- DangerousD/GameCore/Managers/PhysicsManager.cs | 6 +++--- DangerousD/GameCore/Network/NetworkManager.cs | 13 +++++++++---- 6 files changed, 41 insertions(+), 19 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 03c24b6..5149e24 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -27,15 +27,17 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities private bool isAttacked = false; public GameObject objectAttack; - public Player(Vector2 position) : base(position) + public Player(Vector2 position, bool isNetworkPlayer = false) : base(position) { Width = 16; Height = 32; - AppManager.Instance.InputManager.ShootEvent += Shoot; - - AppManager.Instance.InputManager.MovEventJump += Jump; - AppManager.Instance.InputManager.MovEventDown += MoveDown; + if (!isNetworkPlayer) + { + 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; diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index 5e53677..49187a0 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -231,16 +231,22 @@ namespace DangerousD.GameCore case NetworkTaskOperationEnum.ChangeState: break; case NetworkTaskOperationEnum.ConnectToHost: - Player connectedPlayer = new Player(Vector2.Zero); + Player connectedPlayer = new Player(Vector2.Zero, true); NetworkTasks.Add(new NetworkTask(connectedPlayer.id)); NetworkTask task = new NetworkTask(); - NetworkTasks.Add(task.AddConnectedPlayer(GameManager.GetPlayer1.id, GameManager.GetPlayer1.Pos)); + foreach (Player player in GameManager.players) + { + if (player.id != connectedPlayer.id) + { + NetworkTasks.Add(task.AddConnectedPlayer(player.id, player.Pos)); + } + } break; case NetworkTaskOperationEnum.GetClientPlayerId: GameManager.GetPlayer1.id = networkTask.objId; break; case NetworkTaskOperationEnum.AddConnectedPlayer: - Player remoteConnectedPlayer = new Player(networkTask.position); + Player remoteConnectedPlayer = new Player(networkTask.position, true); remoteConnectedPlayer.id = networkTask.objId; GameManager.players.Add(remoteConnectedPlayer); break; diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index 7e4851a..d4363d5 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -99,7 +99,8 @@ namespace DangerousD.GameCore public void Update(GameTime gameTime) { - AppManager.Instance.DebugHUD.Set("playerId: ", GetPlayer1.id.ToString()); + Player p = players.Find(x => x.id == 16); + if (p != null) AppManager.Instance.DebugHUD.Set("NextPlayerVelocity: ", p.velocity.ToString()); if (AppManager.Instance.NetworkTasks.Count > 0) { AppManager.Instance.NetworkManager.SendMsg(AppManager.Instance.NetworkTasks.ToList()); @@ -117,7 +118,6 @@ namespace DangerousD.GameCore { livingEntitiesWithoutPlayers[i].Update(gameTime); } - GetPlayer1.Update(gameTime); } else { @@ -125,7 +125,6 @@ namespace DangerousD.GameCore { livingEntitiesWithoutPlayers[i].PlayAnimation(); } - GetPlayer1.Update(gameTime); } GetPlayer1.Update(gameTime); foreach (var item in otherObjects) diff --git a/DangerousD/GameCore/Managers/MapManager.cs b/DangerousD/GameCore/Managers/MapManager.cs index 5d7d6fc..3367a2f 100644 --- a/DangerousD/GameCore/Managers/MapManager.cs +++ b/DangerousD/GameCore/Managers/MapManager.cs @@ -9,6 +9,7 @@ using Microsoft.Xna.Framework.Graphics; using System.Xml.Serialization; using DangerousD.GameCore.GameObjects; using System.Globalization; +using DangerousD.GameCore.GameObjects.LivingEntities; namespace DangerousD.GameCore.Managers { @@ -106,7 +107,16 @@ 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, float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY) * _scale); + Vector2 vector = new Vector2(float.Parse(entity.Attributes["x"].Value, CultureInfo.InvariantCulture) + offsetX, float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY); + Entity inst; + if (type.Equals(typeof(Player))) + { + inst = (Entity)Activator.CreateInstance(type, vector * _scale, false); + } + else + { + inst = (Entity)Activator.CreateInstance(type, vector * _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 7899c98..95bb8a1 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -21,9 +21,9 @@ namespace DangerousD.GameCore.Managers item.velocity = item.velocity + item.acceleration * delta; } - CheckCollisionsLE_MO(livingEntities, mapObjects); - CheckCollisionsE_LE(entities, livingEntities); - CheckCollisionsLE_LE(livingEntities); + CheckCollisionsLE_MO(livingEntities.ToList(), mapObjects); + CheckCollisionsE_LE(entities, livingEntities.ToList()); + CheckCollisionsLE_LE(livingEntities.ToList()); //entities dont move //Living entities dont move diff --git a/DangerousD/GameCore/Network/NetworkManager.cs b/DangerousD/GameCore/Network/NetworkManager.cs index 292e210..2d6bfc5 100644 --- a/DangerousD/GameCore/Network/NetworkManager.cs +++ b/DangerousD/GameCore/Network/NetworkManager.cs @@ -91,7 +91,7 @@ namespace DangerousD.GameCore.Network } catch { } } - public void SendMsg(List networkTask) + public void SendMsg(List networkTask, Socket ignoreSocket = null) { byte[] Data = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(networkTask)); int count = Data.Length; @@ -101,8 +101,11 @@ namespace DangerousD.GameCore.Network { foreach (Socket socket in clientSockets) { - socket.Send(BitConverter.GetBytes(count)); - socket.Send(Data); + if (!(socket == ignoreSocket)) + { + socket.Send(BitConverter.GetBytes(count)); + socket.Send(Data); + } } } catch { } @@ -148,7 +151,9 @@ namespace DangerousD.GameCore.Network } else { - GetReceivingMessages(JsonConvert.DeserializeObject>(so.sb.ToString())); + List tasks = JsonConvert.DeserializeObject>(so.sb.ToString()); + //SendMsg(tasks, clientSocket); + GetReceivingMessages(tasks); } } catch { } From 52b404c9db441dfe49134d7e9e919e5102560065 Mon Sep 17 00:00:00 2001 From: Ivan Filipenkov Date: Fri, 18 Aug 2023 01:58:34 +0300 Subject: [PATCH 03/28] laaaaaaaaaadder --- .../LivingEntities/Player/Player.cs | 2 + DangerousD/GameCore/Managers/GameManager.cs | 2 +- .../GameCore/Managers/PhysicsManager.cs | 40 ++++++++++++++++++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 066b1d4..9358d38 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -9,6 +9,7 @@ using DangerousD.GameCore.GameObjects.PlayerDeath; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Graphics; using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; +using DangerousD.GameCore.Network; namespace DangerousD.GameCore.GameObjects.LivingEntities { @@ -84,6 +85,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities } public void Death(string monsterName) { + return; isAttacked = true; if(monsterName == "Zombie") { diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index 75dba06..6b3c2b4 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -161,7 +161,7 @@ namespace DangerousD.GameCore foreach (var item in otherObjects) item.Update(gameTime); - physicsManager.UpdateCollisions(entities, livingEntities, mapObjects, gameTime); + physicsManager.UpdateCollisions(entities, livingEntities, mapObjects, players, gameTime); } } } \ No newline at end of file diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs index 7899c98..e41b848 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using DangerousD.GameCore.GameObjects.LivingEntities; +using DangerousD.GameCore.GameObjects.MapObjects; using Microsoft.Xna.Framework; namespace DangerousD.GameCore.Managers @@ -13,7 +14,7 @@ namespace DangerousD.GameCore.Managers { public void UpdateCollisions(List entities, List livingEntities, - List mapObjects, GameTime gameTime) + List mapObjects, List players, GameTime gameTime) { float delta = (float)gameTime.ElapsedGameTime.TotalSeconds; foreach (var item in livingEntities) @@ -21,7 +22,8 @@ namespace DangerousD.GameCore.Managers item.velocity = item.velocity + item.acceleration * delta; } - CheckCollisionsLE_MO(livingEntities, mapObjects); + CheckCollisionsLE_MO(livingEntities, mapObjects.Where(mo => mo is StopTile).ToList()); + CheckCollisionsPlayer_Platform(players, mapObjects.OfType().ToList()); CheckCollisionsE_LE(entities, livingEntities); CheckCollisionsLE_LE(livingEntities); @@ -100,6 +102,40 @@ namespace DangerousD.GameCore.Managers currentEntity.SetPosition(new Vector2(newRect.X, newRect.Y)); } + } + private void CheckCollisionsPlayer_Platform(List players, List platforms) + { + foreach (var player in players) + { + if (player.velocity.Y <= 0) + { + continue; + } + var currentRect = player.Rectangle; + var newRect = currentRect; + + var collidedY = false; + var tryingRectY = currentRect; + tryingRectY.Offset(0, (int)Math.Ceiling(player.velocity.Y)); + AppManager.Instance.DebugHUD.Set("intersects platform", "false"); + foreach (var platform in platforms) + { + if (tryingRectY.Intersects(platform.Rectangle)) + { + AppManager.Instance.DebugHUD.Set("intersects platform", "true"); + collidedY = true; + break; + } + } + if (collidedY) + { + player.isOnGround = true; + player.velocity.Y = 0; + } + + player.SetPosition(new Vector2(newRect.X, newRect.Y)); + } + } private void CheckCollisionsE_LE(List entities, List livingEntities) { From ba49674c3b963d1dff9caf1d8ec3f9246fd44f98 Mon Sep 17 00:00:00 2001 From: Mootfrost777 Date: Fri, 18 Aug 2023 02:13:01 +0300 Subject: [PATCH 04/28] Boss level --- DangerousD/Content/boss.tmx | 162 ++++++++++++++++++ .../GameObjects/Entities/SilasBall.cs | 2 +- .../LivingEntities/Monsters/SilasMaster.cs | 1 + .../LivingEntities/Player/Player.cs | 9 +- DangerousD/GameCore/Managers/AppManager.cs | 2 +- 5 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 DangerousD/Content/boss.tmx diff --git a/DangerousD/Content/boss.tmx b/DangerousD/Content/boss.tmx new file mode 100644 index 0000000..97ea7e8 --- /dev/null +++ b/DangerousD/Content/boss.tmx @@ -0,0 +1,162 @@ + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,799,799,799,799,799,799,799, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +799,799,799,799,799,799,799,799,799,799,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,799,799,799,799,799,799,799,799 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799 + + +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,0, +799,799,799,799,799,799,799,799,799,799,799,0,0,0,0,0 + + + + + + + + + + + + + + diff --git a/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs b/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs index 1c11e0e..48dd53b 100644 --- a/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs +++ b/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs @@ -12,7 +12,7 @@ namespace DangerousD.GameCore.GameObjects.Entities { public class SilasBall : LivingEntity { - private bool IsVisibility=true; + public bool IsVisibility=true; public SilasBall(Vector2 position) : base(position) { Height = 60; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs index 66f9527..4b3b5cb 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs @@ -67,6 +67,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters for (int i = 0; i < balls.Count; i++) { balls[i].SetPosition(new Vector2(Pos.X + i * 40, Pos.Y + 120)); + balls[i].IsVisibility=true; } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 066b1d4..41a7aad 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -9,6 +9,7 @@ using DangerousD.GameCore.GameObjects.PlayerDeath; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Graphics; using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; +using DangerousD.GameCore.Network; namespace DangerousD.GameCore.GameObjects.LivingEntities { @@ -27,6 +28,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities private bool isAttacked = false; private bool isShooting = false; public GameObject objectAttack; + public bool isInvincible; private int bullets; public Player(Vector2 position) : base(position) @@ -58,6 +60,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities }; } + public Player(Vector2 position, bool isInvincible) : this(position) + { + this.isInvincible = isInvincible; + } + public bool IsAlive { get { return isAlive; } } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "playerMoveLeft", "playerMoveRight", "DeathFromZombie", "playerRightStay", "playerStayLeft", @@ -152,7 +159,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public override void Update(GameTime gameTime) { GraphicsComponent.SetCameraPosition(Pos); - if (!isAttacked) + if (!isAttacked || isInvincible) { Move(gameTime); } diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index 84d6b07..661932c 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -202,7 +202,7 @@ namespace DangerousD.GameCore case GameState.Lobby: break; case GameState.Game: - GameManager.mapManager.LoadLevel("lvl"); + GameManager.mapManager.LoadLevel("boss"); break; case GameState.Death: break; From 5f36ee7b79deba5dfb0653759a9a43cf391710e7 Mon Sep 17 00:00:00 2001 From: bmvolf Date: Fri, 18 Aug 2023 02:19:11 +0300 Subject: [PATCH 05/28] edited player --- DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 066b1d4..eef557f 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -9,6 +9,7 @@ using DangerousD.GameCore.GameObjects.PlayerDeath; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Graphics; using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; +using DangerousD.GameCore.Network; namespace DangerousD.GameCore.GameObjects.LivingEntities { From e7c375d9e7adbe9146dc40b08e55f7fd98b1a2ee Mon Sep 17 00:00:00 2001 From: Ivan Filipenkov Date: Fri, 18 Aug 2023 02:27:44 +0300 Subject: [PATCH 06/28] ladders somewhat work --- DangerousD/GameCore/GUI/DebugHUD.cs | 24 ++++++++++++++++++- .../LivingEntities/Player/Player.cs | 11 +++++++-- .../GameCore/Managers/PhysicsManager.cs | 5 +++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/DangerousD/GameCore/GUI/DebugHUD.cs b/DangerousD/GameCore/GUI/DebugHUD.cs index b56d90a..c4e3e55 100644 --- a/DangerousD/GameCore/GUI/DebugHUD.cs +++ b/DangerousD/GameCore/GUI/DebugHUD.cs @@ -11,6 +11,7 @@ namespace DangerousD.GameCore.GUI { private SpriteFont _spriteFont; private Dictionary _text = new(); + private List _log = new(); public void Initialize() { @@ -27,10 +28,11 @@ namespace DangerousD.GameCore.GUI public void Draw(SpriteBatch spriteBatch) { + var keysString = Join("\n", _text.Select(el => el.Key + ": " + el.Value).ToList()); spriteBatch.Begin(); spriteBatch.DrawString( _spriteFont, - Join("\n", _text.Select(el => el.Key + ": " + el.Value).ToList()), + keysString, new Vector2(10, 10), Color.Cyan, 0, @@ -39,6 +41,17 @@ namespace DangerousD.GameCore.GUI SpriteEffects.None, 0 ); + spriteBatch.DrawString( + _spriteFont, + Join("\n", _log), + new Vector2(10, 10 + _spriteFont.MeasureString(keysString).Y), + Color.Green, + 0, + Vector2.Zero, + 1, + SpriteEffects.None, + 0 + ); spriteBatch.End(); } @@ -46,5 +59,14 @@ namespace DangerousD.GameCore.GUI { _text[key] = value; } + + public void Log(string value) + { + _log.Add(value); + if (_log.Count > 30) + { + _log.RemoveAt(0); + } + } } } \ No newline at end of file diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 9358d38..62bad69 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -29,6 +29,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities private bool isShooting = false; public GameObject objectAttack; private int bullets; + public bool FallingThroughPlatform = false; public Player(Vector2 position) : base(position) { @@ -153,6 +154,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities } public override void Update(GameTime gameTime) { + if (isOnGround && FallingThroughPlatform) + { + FallingThroughPlatform = false; + AppManager.Instance.DebugHUD.Log("not falling"); + } GraphicsComponent.SetCameraPosition(Pos); if (!isAttacked) { @@ -214,8 +220,9 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities } public void MoveDown() { - // ПОЧЕМУ - velocity.Y = -11; + FallingThroughPlatform = true; + isOnGround = false; + AppManager.Instance.DebugHUD.Log("FallingThroughPlatform"); } } diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs index e41b848..dee4c27 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -77,6 +77,7 @@ namespace DangerousD.GameCore.Managers if (currentEntity is Player) { AppManager.Instance.DebugHUD.Set("velocity", currentEntity.velocity.ToString()); + AppManager.Instance.DebugHUD.Set("falling", (currentEntity as Player).FallingThroughPlatform.ToString()); AppManager.Instance.DebugHUD.Set("intersects y", ""); } foreach (var mapObject in mapObjects) @@ -107,7 +108,7 @@ namespace DangerousD.GameCore.Managers { foreach (var player in players) { - if (player.velocity.Y <= 0) + if (player.velocity.Y <= 0 || player.FallingThroughPlatform) { continue; } @@ -129,6 +130,8 @@ namespace DangerousD.GameCore.Managers } if (collidedY) { + // костыль потому что в CheckCollisionsLE_MO он спускается + newRect.Y -= (int)Math.Ceiling(player.velocity.Y); player.isOnGround = true; player.velocity.Y = 0; } From c9523578e4c02bbc3ea83b5873faa79a4a3a5f8d Mon Sep 17 00:00:00 2001 From: Timofey06 Date: Fri, 18 Aug 2023 02:59:53 +0300 Subject: [PATCH 07/28] SilasCommit --- .../GameObjects/Entities/SilasBall.cs | 24 ++++++++-------- .../LivingEntities/Monsters/SilasHands.cs | 4 +-- .../LivingEntities/Monsters/SilasMaster.cs | 28 +++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs b/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs index 48dd53b..94e7ca6 100644 --- a/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs +++ b/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs @@ -12,20 +12,22 @@ namespace DangerousD.GameCore.GameObjects.Entities { public class SilasBall : LivingEntity { - public bool IsVisibility=true; + + private Vector2 v; public SilasBall(Vector2 position) : base(position) { - Height = 60; - Width = 60; + Height = 24; + Width = 24; acceleration = Vector2.Zero; } public SilasBall(Vector2 position, Vector2 velosity) : base(position) { - Height = 60; - Width = 60; + Height = 24; + Width = 24; acceleration = Vector2.Zero; velocity = velosity; + v = velosity; } @@ -33,17 +35,17 @@ namespace DangerousD.GameCore.GameObjects.Entities public override void Update(GameTime gameTime) { base.Update(gameTime); - if (AppManager.Instance.GameManager.physicsManager.CheckRectangle(Rectangle).Count>0) + if (AppManager.Instance.GameManager.physicsManager.CheckRectangle( new Rectangle(Rectangle.X-2,Rectangle.Y-2,Rectangle.Width+8,Rectangle.Height+8)).Count>0) { - IsVisibility = false; + AppManager.Instance.GameManager.Remove(this); } + velocity = v; } public override void Draw(SpriteBatch spriteBatch) { - if (IsVisibility) - { - base.Draw(spriteBatch); - } + + base.Draw(spriteBatch); + } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs index e16f168..a54a59b 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs @@ -15,8 +15,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public SilasHands(Vector2 position) : base(position) { name = "SilasHand"; - Width = 48; - Height = 48; + Width = 16; + Height = 16; monster_health = 2; monster_speed = 2; acceleration = Vector2.Zero; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs index 4b3b5cb..34069af 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs @@ -24,21 +24,17 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public SilasMaster(Vector2 position) : base(position) { name = "SilasMaster"; - Width = 144; - Height = 160; + Width = 48; + Height = 53; monster_health = 15; - monster_speed = 4; + monster_speed = 2; acceleration = Vector2.Zero; leftBorder = (int)position.X - 60; rightBorder = (int)position.X + 120; acceleration = Vector2.Zero; - hands.Add(new SilasHands(new Vector2(Pos.X+60,Pos.Y+120))); - hands.Add(new SilasHands(new Vector2(Pos.X + 90, Pos.Y + 120))); - for (int i = 0; i < 4; i++) - { - SilasBall silasball = new SilasBall(new Vector2(Pos.X + i * 40, Pos.Y + 120), new Vector2((i - 2) * 4, 6)); - balls.Add(silasball); - } + hands.Add(new SilasHands(new Vector2(Pos.X+0,Pos.Y+53))); + hands.Add(new SilasHands(new Vector2(Pos.X + 24, Pos.Y + 53))); + } protected override GraphicsComponent GraphicsComponent { get; } = new GraphicsComponent(new List() { "SilasMove", "SilasAttack" }, "SilasMove"); public override void Attack() @@ -64,13 +60,15 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters private void SpawnAttackBall() { - for (int i = 0; i < balls.Count; i++) + balls.Clear(); + for (int i = 0; i < 4; i++) { - balls[i].SetPosition(new Vector2(Pos.X + i * 40, Pos.Y + 120)); - balls[i].IsVisibility=true; + SilasBall silasball = new SilasBall(new Vector2(Pos.X + i * 12, Pos.Y + 53), new Vector2((i - 2) * 2, 2)); + + balls.Add(silasball); } - - + + } public void Attack(GameTime gameTime) From 731e69d92e8e9a84cfc5c59df363d5e0cff30b64 Mon Sep 17 00:00:00 2001 From: Kaktus200020 Date: Fri, 18 Aug 2023 03:03:11 +0300 Subject: [PATCH 08/28] tiltedSlime --- .../LivingEntities/Monsters/Slime.cs | 111 ++++++++++++++---- DangerousD/GameCore/Managers/AppManager.cs | 2 +- .../GameCore/Managers/PhysicsManager.cs | 15 +++ 3 files changed, 107 insertions(+), 21 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs index 0e5e954..e9cba93 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs @@ -13,7 +13,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public class Slime : CoreEnemy { private bool isGoRight = true; - private bool isDown = false; + private bool isDown = true; int leftBorder; int rightBorder; bool isAttaking = false; @@ -38,13 +38,14 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public override void Attack() { - + } public void Jump() { var getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle(0, 0, 100, 100)); velocity.X = 0; Height = 32; + if (isGoRight && isDown) { if (GraphicsComponent.GetCurrentAnimation != "SlimeReadyJumpLeftBottom") @@ -54,8 +55,9 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters delay--; if (delay <= 0) { - isJumping = true; + velocity = new Vector2(5, -3); + acceleration.Y = 0; if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpLeftBottom") { GraphicsComponent.StartAnimation("SlimeJumpLeftBottom"); @@ -71,17 +73,19 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } else if (!isGoRight && isDown) { - if (GraphicsComponent.GetCurrentAnimation != "SlimeReadyJumpRightTop") + if (GraphicsComponent.GetCurrentAnimation != "SlimeReadyJumpRightBottom") { - GraphicsComponent.StartAnimation("SlimeReadyJumpRightTop"); + GraphicsComponent.StartAnimation("SlimeReadyJumpRightBottom"); } delay--; if (delay <= 0) { + velocity = new Vector2(-5, -3); - if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpRightTop") + acceleration.Y = 0; + if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpRightBottom") { - GraphicsComponent.StartAnimation("SlimeJumpRightTop"); + GraphicsComponent.StartAnimation("SlimeJumpRightBottom"); } getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y - 5, 48, 5)); if (getCols.Count > 0) @@ -101,17 +105,20 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters delay--; if (delay <= 0) { - isJumping = true; + velocity = new Vector2(5, 3); + acceleration.Y = 0; if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpLeftTop") { GraphicsComponent.StartAnimation("SlimeJumpLeftTop"); } - getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y + Height, 48, 5)); + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X+1, (int)Pos.Y + Height, 46, 5)); + if (getCols.Count > 0) { isJumping = false; isDown = true; + acceleration.Y = 10; } } @@ -126,15 +133,18 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters if (delay <= 0) { velocity = new Vector2(-5, 3); + acceleration.Y = 0; if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpRightTop") { GraphicsComponent.StartAnimation("SlimeJumpRightTop"); } - getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y + Height, 48, 5)); + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X+1, (int)Pos.Y + Height, 46, 5)); if (getCols.Count > 0) { isJumping = false; isDown = true; + acceleration.Y = 10; + } } @@ -144,8 +154,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } public override void Draw(SpriteBatch spriteBatch) { - spriteBatch.Draw(debugTexture, new Rectangle((int)Pos.X, (int)Pos.Y - 5, 48, 5), Color.White); - spriteBatch.Draw(debugTexture, new Rectangle((int)Pos.X, (int)Pos.Y + Height, 48, 5), Color.White); + + base.Draw(spriteBatch); } public override void Death() @@ -197,15 +207,24 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters velocity.X = -monster_speed; } - - if (Pos.X >= rightBorder) + var getCols= AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y + Height / 2 - 2, 50, 2)); ; + if (isGoRight) { - isGoRight = false; + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y + Height / 2 - 2, 51, 2)); } - - else if (Pos.X <= leftBorder) + else { - isGoRight = true; + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X-3, (int)Pos.Y + Height / 2 - 2, 51, 2)); + } + + + foreach(var item in getCols) + { + if(item is MapObject) + { + isGoRight = !isGoRight; + break; + } } } public override void Update(GameTime gameTime) @@ -227,8 +246,25 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters acceleration.Y = -acceleration.Y; } } - //if (!isAttaking){ Move(gameTime); } - + Attack(); + + if (!isJumping) + { + if (isDown) + { + Jump(); + } + else if(IsInAim()) + { + Jump(); + } + else + { + Move(gameTime); + } + + } + base.Update(gameTime); } @@ -237,10 +273,45 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { } + public bool IsInAim() + { + var getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y + Height, 48, 5)); + + if (isGoRight && !isDown) + { + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X + Width, (int)Pos.Y + Height, 200, 500), false); + if (getCols.Count > 0) + { + return true; + } + } + else if (!isGoRight && !isDown) + { + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X - 200, (int)Pos.Y + Height, 200, 500), false); + if (getCols.Count > 0) + { + return true; + } + } + + return false; + + } public override void Attack(GameTime gameTime) { } + public override void OnCollision(GameObject gameObject) + { + if (gameObject is Player) + { + if (AppManager.Instance.GameManager.players[0].IsAlive) + { + AppManager.Instance.GameManager.players[0].Death(name); + } + } + base.OnCollision(gameObject); + } } } diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index 5e53677..e173abb 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -202,7 +202,7 @@ namespace DangerousD.GameCore case GameState.Lobby: break; case GameState.Game: - GameManager.mapManager.LoadLevel("lvl"); + GameManager.mapManager.LoadLevel("map"); break; case GameState.Death: break; diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs index 7899c98..a2fd4f2 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -234,6 +234,21 @@ namespace DangerousD.GameCore.Managers } return intersected; } + public List CheckRectangle(Rectangle rectangle, bool player) + { + var gameObjects = AppManager.Instance.GameManager.GetPlayer1; + List intersected = new List(); + + + + if (gameObjects.Rectangle.Intersects(rectangle)) + { + intersected.Add(gameObjects); + } + + + return intersected; + } public List CheckRectangle(Rectangle rectangle) { var gameObjects = AppManager.Instance.GameManager.mapObjects; From f26c88ffdcbe56f6b27a22afea47d992a1d714cd Mon Sep 17 00:00:00 2001 From: bmvolf Date: Fri, 18 Aug 2023 03:16:42 +0300 Subject: [PATCH 09/28] nightCommit --- DangerousD/GameCore/GUI/HUD.cs | 4 +--- .../GameCore/GameObjects/LivingEntities/Player/Player.cs | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DangerousD/GameCore/GUI/HUD.cs b/DangerousD/GameCore/GUI/HUD.cs index 07e446a..ee17186 100644 --- a/DangerousD/GameCore/GUI/HUD.cs +++ b/DangerousD/GameCore/GUI/HUD.cs @@ -11,7 +11,6 @@ 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; @@ -27,9 +26,8 @@ namespace DangerousD.GameCore.GUI } public override void Update(GameTime gameTime) { - rects.Clear(); - for (int i = 0; i < ammout; i++) + for (int i = 0; i < AppManager.Instance.GameManager.GetPlayer1.Bullets; 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); diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index eef557f..2a2a7ca 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -30,6 +30,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public GameObject objectAttack; private int bullets; + public int Bullets { get { return bullets; } } + public Player(Vector2 position) : base(position) { Width = 16; From 465fc4056246edb9a6b4d2ac9171a51b0179f9a5 Mon Sep 17 00:00:00 2001 From: SergoDobro Date: Fri, 18 Aug 2023 03:41:38 +0300 Subject: [PATCH 10/28] added cool sign --- DangerousD/GameCore/GUI/MenuGUI.cs | 31 +++++++++++++++++----- DangerousD/GameCore/Managers/AppManager.cs | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/DangerousD/GameCore/GUI/MenuGUI.cs b/DangerousD/GameCore/GUI/MenuGUI.cs index 82170b1..5842e62 100644 --- a/DangerousD/GameCore/GUI/MenuGUI.cs +++ b/DangerousD/GameCore/GUI/MenuGUI.cs @@ -1,9 +1,12 @@ using DangerousD.GameCore.Managers; +using Microsoft.VisualBasic; using Microsoft.Xna.Framework; using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Elements; +using System; using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Runtime.Serialization; namespace DangerousD.GameCore.GUI; @@ -11,6 +14,12 @@ namespace DangerousD.GameCore.GUI; internal class MenuGUI : AbstractGui { int selected = 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) }; + List