From fef09f3d4aa6c70d88a31cff9611581ac5c8ca28 Mon Sep 17 00:00:00 2001 From: Lev Date: Mon, 19 Aug 2024 02:25:09 +0300 Subject: [PATCH 1/2] upgrade player movement and upgrade InputManager --- ZoFo/GameCore/GameManagers/InputManager.cs | 110 +++++++----------- .../Entities/LivingEntities/Player/Player.cs | 15 +-- 2 files changed, 52 insertions(+), 73 deletions(-) diff --git a/ZoFo/GameCore/GameManagers/InputManager.cs b/ZoFo/GameCore/GameManagers/InputManager.cs index c390273..fbb0dce 100644 --- a/ZoFo/GameCore/GameManagers/InputManager.cs +++ b/ZoFo/GameCore/GameManagers/InputManager.cs @@ -82,37 +82,7 @@ namespace ZoFo.GameCore.GameManagers #endregion // Cheats #region set ScopeState - int currentSection = (int)Math.Ceiling(Math.Atan2(InputMovementDirection.Y, - InputMovementDirection.X) * 180 / Math.PI * 16 / 360); - switch(currentSection){ - case 1 or 0 or 16: - currentScopeState = ScopeState.Right; - break; - case 2 or 3: - currentScopeState = ScopeState.StraightRight; - break; - case 4 or 5: - currentScopeState = ScopeState.Straight; - break; - case 6 or 7: - currentScopeState = ScopeState.StraightLeft; - break; - case 8 or 9: - currentScopeState = ScopeState.Left; - break; - case 10 or 11: - currentScopeState = ScopeState.BackLeft; - break; - case 12 or 13: - currentScopeState = ScopeState.Back; - break; - case 14 or 15: - currentScopeState = ScopeState.BackRight; - break; - default: - break; - } - + ConvertVector2ToState(InputMovementDirection); #endregion #region Обработка нажатия выстрела. Вызывает событие ShootEvent @@ -171,48 +141,21 @@ namespace ZoFo.GameCore.GameManagers #region Обработка состояния объекта. Задает значение полю scopeState. if (keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.W)) { - currentScopeState = ScopeState.Straight; - InputMovementDirection = new Vector2(0, -1); + InputMovementDirection += new Vector2(0, -1); } - else if (keyBoardState.IsKeyDown(Keys.Down) || keyBoardState.IsKeyDown(Keys.S)) + if (keyBoardState.IsKeyDown(Keys.Down) || keyBoardState.IsKeyDown(Keys.S)) { - currentScopeState = ScopeState.Back; - InputMovementDirection = new Vector2(0, 1); + InputMovementDirection += new Vector2(0, 1); } - else if(keyBoardState.IsKeyDown(Keys.Left) || keyBoardState.IsKeyDown(Keys.A)) + if (keyBoardState.IsKeyDown(Keys.Right) || keyBoardState.IsKeyDown(Keys.D)) { - currentScopeState = ScopeState.Left; - InputMovementDirection = new Vector2(-1, 0); + InputMovementDirection += new Vector2(1, 0); } - else if(keyBoardState.IsKeyDown(Keys.Right) || keyBoardState.IsKeyDown(Keys.D)) + if (keyBoardState.IsKeyDown(Keys.Left) || keyBoardState.IsKeyDown(Keys.A)) { - currentScopeState = ScopeState.Right; - InputMovementDirection = new Vector2(1, 0); - } - else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Up) || - keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.W)) - { - currentScopeState = ScopeState.StraightRight; - InputMovementDirection = new Vector2(1, 1); - } - else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Up) || - keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.W)) - { - currentScopeState = ScopeState.StraightLeft; - InputMovementDirection = new Vector2(-1, 1); - } - else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Down) || - keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.S)) - { - currentScopeState = ScopeState.BackRight; - InputMovementDirection = new Vector2(1, -1); - } - else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Down) || - keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.S)) - { - currentScopeState = ScopeState.BackLeft; - InputMovementDirection = new Vector2(-1, -1); + InputMovementDirection += new Vector2(-1, 0); } + ConvertVector2ToState(InputMovementDirection); #endregion #region Обработка нажатия выстрела. Вызывает событие ShootEvent @@ -257,5 +200,40 @@ namespace ZoFo.GameCore.GameManagers DebugHUD.Instance.Set("controls", currentScopeState.ToString()); } + #region работа с ScopeState и Vector2 + public ScopeState ConvertVector2ToState(Vector2 vector){ + int currentSection = (int)Math.Ceiling(Math.Atan2(InputMovementDirection.Y, + InputMovementDirection.X) * 180 / Math.PI * 16 / 360); + switch(currentSection){ + case 1 or 0 or 16: + currentScopeState = ScopeState.Right; + break; + case 2 or 3: + currentScopeState = ScopeState.StraightRight; + break; + case 4 or 5: + currentScopeState = ScopeState.Straight; + break; + case 6 or 7: + currentScopeState = ScopeState.StraightLeft; + break; + case 8 or 9: + currentScopeState = ScopeState.Left; + break; + case 10 or 11: + currentScopeState = ScopeState.BackLeft; + break; + case 12 or 13: + currentScopeState = ScopeState.Back; + break; + case 14 or 15: + currentScopeState = ScopeState.BackRight; + break; + default: + break; + } + return currentScopeState; + } + #endregion } } diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs index a03eb95..ec01d6c 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -23,14 +23,15 @@ public class Player : LivingEntity private int health; public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "player_look_down" }, "player_look_down"); private LootData lootData; - //public bool isTryingToInteract { get; set; } + public bool IsTryingToInteract { get; set; } + public bool IsTryingToShoot { get; set; } public Player(Vector2 position) : base(position) { graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); collisionComponent.stopRectangle = new Rectangle(0, 0, 100, 100); speed = 10; - //isTryingToInteract = false; - //IsTryingToShoot = false; + IsTryingToInteract = false; + IsTryingToShoot = false; StartAnimation("player_look_down"); } @@ -38,7 +39,7 @@ public class Player : LivingEntity public override void Update() { - + //StartAnimation("wood"); MovementLogic(); } public void MovementLogic() @@ -53,10 +54,10 @@ public class Player : LivingEntity } public void HandleInteract(UpdateInputInteraction updateInputInteraction) { - //isTryingToInteract = true; + IsTryingToInteract = true; } public void HandleShoot(UpdateInputShoot updateInputShoot) { - + IsTryingToShoot = true; } -} +} \ No newline at end of file From 3742690e5c34145d562ccbbf72a25a6885c81c42 Mon Sep 17 00:00:00 2001 From: Lev Date: Tue, 20 Aug 2024 00:39:20 +0300 Subject: [PATCH 2/2] fix InputManager and add some logic in player for his attack --- .../CollisionManager/CollisionManager.cs | 13 ++++++ ZoFo/GameCore/GameManagers/InputManager.cs | 45 +++++++++++-------- ZoFo/GameCore/GameObjects/Entities/Entity.cs | 1 - .../Entities/LivingEntities/Player/Player.cs | 43 +++++++++++++++++- 4 files changed, 81 insertions(+), 21 deletions(-) diff --git a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs index fc9ee75..362caa4 100644 --- a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs @@ -205,6 +205,19 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager } return players.ToArray(); } + public Entity[] GetEntities(Rectangle rectangle) + { + + List entities = new List(); + foreach (var item in AppManager.Instance.server.entities)//фильтрация + { + if (item.collisionComponent.stopRectangle.SetOrigin(item.position).Intersects(rectangle)) + { + entities.Add(item); + } + } + return entities.ToArray(); + } } public static class ExtentionClass diff --git a/ZoFo/GameCore/GameManagers/InputManager.cs b/ZoFo/GameCore/GameManagers/InputManager.cs index fbb0dce..08adde3 100644 --- a/ZoFo/GameCore/GameManagers/InputManager.cs +++ b/ZoFo/GameCore/GameManagers/InputManager.cs @@ -8,13 +8,14 @@ using System.Diagnostics; using System.Formats.Tar; using System.Linq; using System.Reflection.Metadata.Ecma335; +using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using ZoFo.GameCore.GUI; namespace ZoFo.GameCore.GameManagers { - public enum ScopeState { Idle, Left, Right, Straight, Back, StraightLeft, StraightRight, BackLeft, BackRight } + public enum ScopeState { Idle, Left, Right, Top, Down, TopLeft, TopRight, DownLeft, DownRight } public class InputManager { @@ -198,36 +199,44 @@ namespace ZoFo.GameCore.GameManagers prevCurrentScopeState = currentScopeState; #endregion - DebugHUD.Instance.Set("controls", currentScopeState.ToString()); + DebugHUD.Instance.Set("controls", currentScopeState.ToString()); } #region работа с ScopeState и Vector2 - public ScopeState ConvertVector2ToState(Vector2 vector){ - int currentSection = (int)Math.Ceiling(Math.Atan2(InputMovementDirection.Y, - InputMovementDirection.X) * 180 / Math.PI * 16 / 360); - switch(currentSection){ - case 1 or 0 or 16: + public ScopeState ConvertVector2ToState(Vector2 vector) + { + //if() + int currentSection = (int)Math.Ceiling(Math.Atan2(vector.Y, + vector.X) * (180 / Math.PI) / 360 * 16); + + DebugHUD.DebugSet("current section", currentSection.ToString()); + //DebugHUD.DebugSet("y", InputMovementDirection.Y.ToString()); + //DebugHUD.DebugSet("x", InputMovementDirection.X.ToString()); + + switch(currentSection) + { + case 0 or 1: currentScopeState = ScopeState.Right; break; case 2 or 3: - currentScopeState = ScopeState.StraightRight; + currentScopeState = ScopeState.DownRight; break; case 4 or 5: - currentScopeState = ScopeState.Straight; + currentScopeState = ScopeState.Down; break; case 6 or 7: - currentScopeState = ScopeState.StraightLeft; + currentScopeState = ScopeState.DownLeft; break; - case 8 or 9: + case 8 or -7: currentScopeState = ScopeState.Left; break; - case 10 or 11: - currentScopeState = ScopeState.BackLeft; + case -6 or -5: + currentScopeState = ScopeState.TopLeft; break; - case 12 or 13: - currentScopeState = ScopeState.Back; + case -4 or -3: + currentScopeState = ScopeState.Top; break; - case 14 or 15: - currentScopeState = ScopeState.BackRight; + case -2 or -1: + currentScopeState = ScopeState.TopRight; break; default: break; @@ -236,4 +245,4 @@ namespace ZoFo.GameCore.GameManagers } #endregion } -} +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entities/Entity.cs b/ZoFo/GameCore/GameObjects/Entities/Entity.cs index f0e4ebf..a964126 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Entity.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Entity.cs @@ -46,7 +46,6 @@ namespace ZoFo.GameCore.GameObjects.Entities animationId = animationId, IdEntity = Id }); - } public override void Draw(SpriteBatch spriteBatch) { diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs index ec01d6c..facb5e5 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -8,6 +8,8 @@ using ZoFo.GameCore.GameManagers.CollisionManager; using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer; using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; using ZoFo.GameCore.Graphics; +using System.Diagnostics; +using ZoFo.GameCore.GUI; namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player; @@ -21,7 +23,7 @@ public class Player : LivingEntity //public bool IsTryingToShoot { get; set; } private float speed; private int health; - public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "player_look_down" }, "player_look_down"); + public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "player_look_down", "player_running_top_rotate" }, "player_look_down"); private LootData lootData; public bool IsTryingToInteract { get; set; } public bool IsTryingToShoot { get; set; } @@ -39,7 +41,35 @@ public class Player : LivingEntity public override void Update() { - //StartAnimation("wood"); + #region анимация управления, стрельбы + switch(AppManager.Instance.InputManager.ConvertVector2ToState(InputPlayerRotation)) + { + case ScopeState.Top: + + break; + case ScopeState.Down: + + break; + case ScopeState.Right: + //StartAnimation("player_running_top_rotate"); + break; + case ScopeState.Left: + + break; + case ScopeState.TopRight: + + break; + case ScopeState.TopLeft: + + break; + case ScopeState.DownRight: + + break; + case ScopeState.DownLeft: + + break; + } + #endregion MovementLogic(); } public void MovementLogic() @@ -59,5 +89,14 @@ public class Player : LivingEntity public void HandleShoot(UpdateInputShoot updateInputShoot) { IsTryingToShoot = true; + + Rectangle rectangle = new Rectangle((int)position.X, (int)position.Y, 200, 200); + Entity[] entities = AppManager.Instance.server.collisionManager.GetEntities(rectangle); + DebugHUD.DebugSet("ent[0]", entities[0].ToString()); + if(entities != null){ + foreach (Entity entity in entities){ + AppManager.Instance.server.DeleteObject(entity); + } + } } } \ No newline at end of file