From eb89ae4de9eee7111ec5601358628d680303dc01 Mon Sep 17 00:00:00 2001 From: AnloGames <7383an@gmail.com> Date: Fri, 18 Aug 2023 16:50:18 +0300 Subject: [PATCH] GameOver NetworkSupport --- DangerousD/GameCore/GameObjects/GameObject.cs | 1 + .../LivingEntities/Monsters/Zombie.cs | 20 +++++++++---- DangerousD/GameCore/Managers/AppManager.cs | 13 ++++++++- DangerousD/GameCore/Network/NetworkTask.cs | 29 +++++++++---------- .../Network/NetworkTaskOperationEnum.cs | 2 +- 5 files changed, 43 insertions(+), 22 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs index 8526427..60009ee 100644 --- a/DangerousD/GameCore/GameObjects/GameObject.cs +++ b/DangerousD/GameCore/GameObjects/GameObject.cs @@ -15,6 +15,7 @@ namespace DangerousD.GameCore protected Vector2 _pos; public Vector2 Pos => _pos; public int id; + public bool isChildEntity = false; public bool isIdFromHost = false; public int Width { get; set; } public int Height { get; set; } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs index c1737f2..c8c685c 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using DangerousD.GameCore.Managers; +using DangerousD.GameCore.Network; namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { @@ -62,6 +63,10 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } public override void Attack() + { + AppManager.Instance.GameManager.GetPlayer1.Death(name); + } + public void PlayAttackAnimation() { velocity.X = 0; isAttaking = true; @@ -71,7 +76,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { GraphicsComponent.StartAnimation("ZombieRightAttack"); } - AppManager.Instance.GameManager.players[0].Death(name); } else if (!isGoRight) { @@ -79,7 +83,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { GraphicsComponent.StartAnimation("ZombieLeftAttack"); } - AppManager.Instance.GameManager.players[0].Death(name); } } @@ -120,12 +123,19 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } public override void OnCollision(GameObject gameObject) { - if(gameObject is Player) + if (gameObject.id == AppManager.Instance.GameManager.GetPlayer1.id && AppManager.Instance.GameManager.GetPlayer1.IsAlive) { - if (AppManager.Instance.GameManager.players[0].IsAlive) + if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.Client) { Attack(); - + } + } + else if (gameObject is Player) + { + if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) + { + NetworkTask task = new NetworkTask(); + AppManager.Instance.NetworkTasks.Add(task.KillPlayer(gameObject.id, name)); } } base.OnCollision(gameObject); diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index 5a2cf29..12616f9 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -220,7 +220,12 @@ namespace DangerousD.GameCore { switch (networkTask.operation) { - case NetworkTaskOperationEnum.TakeDamage: + case NetworkTaskOperationEnum.DeleteObject: + GameObject gameObject = GameManager.GetAllGameObjects.Find(x => x.id == networkTask.objId); + if (gameObject != null) + { + GameManager.Remove(gameObject); + } break; case NetworkTaskOperationEnum.SendSound: SoundManager.StartSound(networkTask.name, networkTask.position, GameManager.GetPlayer1.Pos); @@ -276,6 +281,12 @@ namespace DangerousD.GameCore remoteConnectedPlayer.id = networkTask.objId; remoteConnectedPlayer.GetGraphicsComponent().parentId = networkTask.objId; break; + case NetworkTaskOperationEnum.KillPlayer: + Player player1 = GameManager.players.Find(x => x.id==networkTask.objId); + player1.Death(networkTask.name); + NetworkTask task1 = new NetworkTask(); + NetworkTasks.Add(task1.DeleteObject(player1.id)); + break; default: break; } diff --git a/DangerousD/GameCore/Network/NetworkTask.cs b/DangerousD/GameCore/Network/NetworkTask.cs index 8611d78..f9b6072 100644 --- a/DangerousD/GameCore/Network/NetworkTask.cs +++ b/DangerousD/GameCore/Network/NetworkTask.cs @@ -20,18 +20,6 @@ namespace DangerousD.GameCore.Network public Type type { get; set; } public NetworkTask() { } - /// - /// Нанести урон сущности - /// - /// - /// - public NetworkTask(int LivingEntityId, int Damage) - { - operation = NetworkTaskOperationEnum.TakeDamage; - objId = LivingEntityId; - value = Damage; - } - /// /// Проиграть звук на позиции /// @@ -49,14 +37,12 @@ namespace DangerousD.GameCore.Network /// /// /// - /// /// - public NetworkTask(Type EntityType, Vector2 EntityPosition, Vector2 EntityVelocity, int ParentId) + public NetworkTask(Type EntityType, Vector2 EntityPosition, int ParentId) { operation = NetworkTaskOperationEnum.CreateEntity; type = EntityType; position = EntityPosition; - velocity = EntityVelocity; objId = ParentId; } @@ -134,5 +120,18 @@ namespace DangerousD.GameCore.Network position = playerPosition; return this; } + public NetworkTask DeleteObject(int objectId) + { + operation = NetworkTaskOperationEnum.DeleteObject; + objId = objectId; + return this; + } + public NetworkTask KillPlayer(int playerId, string mosterName) + { + operation = NetworkTaskOperationEnum.KillPlayer; + name = mosterName; + objId = playerId; + return this; + } } } diff --git a/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs b/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs index 7fad430..5b746f5 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, AddConnectedPlayer + DeleteObject, SendSound, CreateEntity, SendPosition, ChangeState, ConnectToHost, GetClientPlayerId, AddConnectedPlayer, KillPlayer } }