From bed41c5bf02452482a29fc6f5a29501d8c1d22dc Mon Sep 17 00:00:00 2001 From: AnloGames <7383an@gmail.com> Date: Fri, 18 Aug 2023 12:30:44 +0300 Subject: [PATCH] NetworkAnimationSupport(ChangeState) --- DangerousD/GameCore/GameObjects/GameObject.cs | 5 +++ .../LivingEntities/Player/Player.cs | 38 ++++++++++--------- .../GameCore/Graphics/GraphicsComponent.cs | 10 +++++ DangerousD/GameCore/Managers/AppManager.cs | 28 +++++++++++--- DangerousD/GameCore/Managers/GameManager.cs | 9 ++++- 5 files changed, 65 insertions(+), 25 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs index 65bf8c9..a2f0881 100644 --- a/DangerousD/GameCore/GameObjects/GameObject.cs +++ b/DangerousD/GameCore/GameObjects/GameObject.cs @@ -30,6 +30,7 @@ namespace DangerousD.GameCore LoadContent(); AppManager.Instance.GameManager.Register(this); + GraphicsComponent.parentId = id; } public virtual void OnCollision(GameObject gameObject) @@ -62,5 +63,9 @@ namespace DangerousD.GameCore //wdaspriteBatch.Draw(debugTexture,new Rectangle(Rectangle.X-GraphicsComponent.CameraPosition.X,Rectangle.Y-GraphicsComponent.CameraPosition.Y,Rectangle.Width,Rectangle.Height), Color.White); } + public GraphicsComponent GetGraphicsComponent() + { + return this.GraphicsComponent; + } } } \ 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 d0c144a..c55155f 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -32,14 +32,17 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities private int bullets; public bool FallingThroughPlatform = false; public bool isUping = false; + public bool isNetworkPlayer; + + - public int Bullets { get { return bullets; } } public Player(Vector2 position, bool isNetworkPlayer = false) : base(position) { + this.isNetworkPlayer = isNetworkPlayer; Width = 16; Height = 32; @@ -48,24 +51,24 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities AppManager.Instance.InputManager.ShootEvent += Shoot; AppManager.Instance.InputManager.MovEventJump += Jump; AppManager.Instance.InputManager.MovEventDown += MoveDown; + velocity = new Vector2(0, 0); + rightBorder = (int)position.X + 100; + leftBorder = (int)position.X - 100; + bullets = 5; + + this.GraphicsComponent.actionOfAnimationEnd += (a) => + { + if (a == "playerShootLeft" || a == "playerShootRight") + { + isShooting = false; + } + if (a == "playerReload") + { + bullets++; + } + }; } - velocity = new Vector2(0, 0); - rightBorder = (int)position.X + 100; - leftBorder = (int)position.X - 100; - bullets = 5; - - this.GraphicsComponent.actionOfAnimationEnd += (a) => - { - if (a == "playerShootLeft" || a == "playerShootRight") - { - isShooting = false; - } - if (a == "playerReload") - { - bullets++; - } - }; } public bool IsAlive { get { return isAlive; } } @@ -251,6 +254,5 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities isOnGround = false; AppManager.Instance.DebugHUD.Log("FallingThroughPlatform"); } - } } diff --git a/DangerousD/GameCore/Graphics/GraphicsComponent.cs b/DangerousD/GameCore/Graphics/GraphicsComponent.cs index 00d6298..fb72991 100644 --- a/DangerousD/GameCore/Graphics/GraphicsComponent.cs +++ b/DangerousD/GameCore/Graphics/GraphicsComponent.cs @@ -1,4 +1,5 @@ using DangerousD.GameCore.Managers; +using DangerousD.GameCore.Network; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; @@ -18,6 +19,7 @@ namespace DangerousD.GameCore.Graphics private List texturesNames; private AnimationContainer currentAnimation; static private int scaling = 4; + public int parentId; public AnimationContainer CurrentAnimation { get @@ -105,6 +107,14 @@ namespace DangerousD.GameCore.Graphics public void StartAnimation(string startedanimationId) { + if (startedanimationId == "playerShootRight" && parentId == 17) + { + string a = "2"; + } + if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer && startedanimationId != GetCurrentAnimation) + { + AppManager.Instance.NetworkTasks.Add(new NetworkTask(parentId, startedanimationId, Vector2.Zero)); + } currentFrame = 0; currentAnimation = animations.Find(x => x.Id == startedanimationId); diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index 33327c7..acd833f 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -111,9 +111,8 @@ namespace DangerousD.GameCore { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); - - if (GameManager.GetPlayer1 != null) - DebugHUD.Set("Objid: ", GameManager.GetPlayer1.id.ToString()); + if (GameManager.GetPlayer1 != null) + DebugHUD.Set("id: ", GameManager.GetPlayer1.id.ToString()); InputManager.Update(); SoundManager.Update(); @@ -229,10 +228,11 @@ namespace DangerousD.GameCore case NetworkTaskOperationEnum.CreateEntity: break; case NetworkTaskOperationEnum.SendPosition: - if (networkTask.objId != GameManager.GetPlayer1.id) + if (networkTask.objId != GameManager.GetPlayer1.id ) { LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId); - entity.SetPosition(networkTask.position); + if (entity != null) + entity.SetPosition(networkTask.position); if (multiPlayerStatus == MultiPlayerStatus.Host) { NetworkTasks.Add(networkTask); @@ -240,6 +240,20 @@ namespace DangerousD.GameCore } break; case NetworkTaskOperationEnum.ChangeState: + if (networkTask.objId != GameManager.GetPlayer1.id) + { + List gcs = new List(); + foreach (var player in GameManager.players) + { + gcs.Add(player.GetGraphicsComponent()); + } + LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId); + if (entity != null) + { + GraphicsComponent gc = entity.GetGraphicsComponent(); + gc.StartAnimation(networkTask.name); + } + } break; case NetworkTaskOperationEnum.ConnectToHost: Player connectedPlayer = new Player(Vector2.Zero, true); @@ -257,13 +271,15 @@ namespace DangerousD.GameCore if (!GameManager.GetPlayer1.isIdFromHost) { GameManager.GetPlayer1.id = networkTask.objId; + GraphicsComponent gcsd = GameManager.GetPlayer1.GetGraphicsComponent(); + gcsd.parentId = networkTask.objId; GameManager.GetPlayer1.isIdFromHost = true; } break; case NetworkTaskOperationEnum.AddConnectedPlayer: Player remoteConnectedPlayer = new Player(networkTask.position, true); remoteConnectedPlayer.id = networkTask.objId; - + remoteConnectedPlayer.GetGraphicsComponent().parentId = networkTask.objId; break; default: break; diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index 53ffa61..f4a213a 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -150,14 +150,21 @@ namespace DangerousD.GameCore } else - { for (int i = 0; i < livingEntitiesWithoutPlayers.Count; i++) { livingEntitiesWithoutPlayers[i].PlayAnimation(); } } + foreach (Player player in players) + { + if (player.id != GetPlayer1.id) + { + player.PlayAnimation(); + } + } GetPlayer1.Update(gameTime); + foreach (var item in otherObjects) item.Update(gameTime);