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) {