diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb index 36ce98f..ea7bb60 100644 --- a/DangerousD/Content/Content.mgcb +++ b/DangerousD/Content/Content.mgcb @@ -255,6 +255,18 @@ /processorParam:Quality=Best /build:sounds/shotgun_shot.mp3 +#begin SmokeAnimation2.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:SmokeAnimation2.png + #begin textboxbackground1-1.png /importer:TextureImporter /processor:TextureProcessor diff --git a/DangerousD/Content/SmokeAnimation2.png b/DangerousD/Content/SmokeAnimation2.png new file mode 100644 index 0000000..b414b01 Binary files /dev/null and b/DangerousD/Content/SmokeAnimation2.png differ diff --git a/DangerousD/Content/animations/playerShootRight b/DangerousD/Content/animations/playerShootRight index 3b7ef81..fd11db2 100644 --- a/DangerousD/Content/animations/playerShootRight +++ b/DangerousD/Content/animations/playerShootRight @@ -15,7 +15,7 @@ { "Item1": 1, "Item2": 20 - } + } ], "textureFrameInterval": 1, "framesCount": 2, diff --git a/DangerousD/Content/animations/smokeAfterShoot b/DangerousD/Content/animations/smokeAfterShoot new file mode 100644 index 0000000..1377656 --- /dev/null +++ b/DangerousD/Content/animations/smokeAfterShoot @@ -0,0 +1 @@ +{"id":"smokeAfterShoot","textureName":"smokeAnimation2","startSpriteRectangle":{"X":0,"Y":0,"Width":64,"Height":64},"frameSecond":[{"Item1":0,"Item2":3}],"textureFrameInterval":1,"framesCount":10,"isCycle":false,"offset":"0, 0"} diff --git a/DangerousD/Content/lvl.tmx b/DangerousD/Content/lvl.tmx index df88666..5fcea6a 100644 --- a/DangerousD/Content/lvl.tmx +++ b/DangerousD/Content/lvl.tmx @@ -7,7 +7,7 @@ - + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -147,7 +147,7 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,272,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,272,0,0,0,272,0,0,0,0,0,0,0,0,0, 52,52,52,0,0,0,52,52,52,52,52,52,52,52,52,52, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -208,7 +208,7 @@ 0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0 -0,0,0,0,0,0,0,0,0,0,46,0,0,66,67,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,66,67,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,66,67,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,66,67,0, 0,0,0,0,0,0,76,76,76,76,76,76,76,76,76,76, @@ -317,7 +317,7 @@ - + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -336,6 +336,24 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,696,697,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,696,697,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -354,6 +372,24 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, @@ -372,6 +408,42 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,696,697,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,696,697,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, @@ -442,7 +514,7 @@ 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, 157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, 157,157,157,157,157,157,258,157,157,157,149,152,157,157,157,157, -157,157,157,157,157,157,271,157,157,157,150,153,157,696,697,157, +157,157,157,157,157,157,271,157,157,157,150,153,157,0,0,157, 157,157,0,204,204,204,284,204,204,204,151,154,204,709,710,204, 157,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 157,157,144,144,144,144,144,144,144,144,144,144,144,144,144,144, @@ -498,7 +570,7 @@ 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, 29,29,29,19,20,21,22,0,0,29,29,29,29,29,29,29, 29,30,31,32,33,34,35,0,0,29,29,29,29,29,29,29, -29,43,44,45,46,47,48,0,0,29,29,29,29,29,29,29, +29,43,44,45,0,47,48,0,0,29,29,29,29,29,29,29, 64,65,18,58,59,60,18,0,0,29,29,29,29,29,29,29, 77,78,18,71,72,73,18,0,0,68,56,56,55,56,56,69, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 @@ -522,14 +594,14 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -157,157,157,157,267,268,157,696,697,157,157,193,157,157,235,236, +157,157,157,157,267,268,157,0,0,157,157,193,157,157,235,236, 157,0,204,204,280,281,204,709,710,204,204,204,204,204,204,204, 157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 157,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, 157,157,157,178,179,157,157,157,157,157,157,157,157,157,157,157, 157,157,157,191,192,157,248,249,157,157,157,157,157,157,157,157, 157,157,157,157,157,157,250,251,157,217,261,262,263,264,217,157, -272,204,204,204,204,204,239,240,204,230,274,275,276,277,230,204, +0,204,204,204,204,204,239,240,204,230,274,275,276,277,230,204, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, 157,157,157,157,157,157,157,157,243,157,157,209,210,211,212,157, @@ -552,7 +624,7 @@ 144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, 157,157,178,179,157,157,157,157,157,157,157,157,157,157,157,157, 157,157,191,192,157,157,157,157,258,157,157,157,248,249,157,157, -157,157,157,157,157,696,697,157,271,157,157,157,250,251,157,157, +157,157,157,157,157,0,0,157,271,157,157,157,250,251,157,157, 204,204,204,204,204,709,710,204,284,204,204,204,239,240,204,204, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/DangerousD/Content/smokeAnimation.png b/DangerousD/Content/smokeAnimation.png new file mode 100644 index 0000000..3483481 Binary files /dev/null and b/DangerousD/Content/smokeAnimation.png differ diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs index a583904..8526427 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) @@ -68,5 +69,9 @@ namespace DangerousD.GameCore } } + public GraphicsComponent GetGraphicsComponent() + { + return this.GraphicsComponent; + } } } \ No newline at end of file diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs index 5b89e48..41a2fcc 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Slime.cs @@ -12,8 +12,10 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public class Slime : CoreEnemy { + private bool isGoRight = true; private bool isDown = true; + int leftBorder; int rightBorder; bool isAttaking = false; @@ -30,6 +32,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters rightBorder = 400; //acceleration = Vector2.Zero; delay = 30; + } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SlimeMoveLeftTop", "SlimeMoveLeftBottom", "SlimeMoveRightTop", @@ -40,7 +43,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { } - public void Jump() + public void Jump(GameTime gameTime) { var getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle(0, 0, 100, 100)); velocity.X = 0; @@ -56,17 +59,19 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters if (delay <= 0) { - velocity = new Vector2(5, -3); + velocity = new Vector2(5, -4); acceleration.Y = 0; + if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpLeftBottom") { GraphicsComponent.StartAnimation("SlimeJumpLeftBottom"); } getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)Pos.Y - 5, 48, 5)); - if (getCols.Count > 0) + if (getCols.Count > 0 ) { isJumping = false; isDown = false; + isAttaking = false; } } @@ -81,7 +86,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters if (delay <= 0) { - velocity = new Vector2(-5, -3); + velocity = new Vector2(-5, -4); acceleration.Y = 0; if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpRightBottom") { @@ -92,6 +97,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { isJumping = false; isDown = false; + isAttaking = false; } } } @@ -106,19 +112,22 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters if (delay <= 0) { - velocity = new Vector2(5, 3); + velocity = new Vector2(5, 4); acceleration.Y = 0; + if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpLeftTop") { GraphicsComponent.StartAnimation("SlimeJumpLeftTop"); } getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X+1, (int)Pos.Y + Height, 46, 5)); - if (getCols.Count > 0) + if (getCols.Count > 0 ) { isJumping = false; isDown = true; + isAttaking = false; acceleration.Y = 10; + Move(gameTime); } } @@ -132,24 +141,28 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters delay--; if (delay <= 0) { - velocity = new Vector2(-5, 3); + velocity = new Vector2(-5, 4); acceleration.Y = 0; + if (GraphicsComponent.GetCurrentAnimation != "SlimeJumpRightTop") { GraphicsComponent.StartAnimation("SlimeJumpRightTop"); } getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X+1, (int)Pos.Y + Height, 46, 5)); - if (getCols.Count > 0) + if (getCols.Count > 0 ) { isJumping = false; isDown = true; + isAttaking = false; acceleration.Y = 10; + Move(gameTime); } } } + } public override void Draw(SpriteBatch spriteBatch) @@ -246,25 +259,27 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters acceleration.Y = -acceleration.Y; } } - Attack(); - - if (!isJumping) + AppManager.Instance.DebugHUD.Set(name, isAttaking.ToString()); + if(!isJumping) { if (isDown) { - Jump(); + Jump(gameTime); } else if(IsInAim()) { - Jump(); + Jump(gameTime); + isAttaking = true; } - else + else if(!isAttaking) { Move(gameTime); + } - + else { Jump(gameTime); } } + base.Update(gameTime); } @@ -283,6 +298,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters 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; } } @@ -291,10 +307,29 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters 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; } } - + /*/else if (isGoRight && isDown) + { + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X +Width, (int)Pos.Y -500, 200, 500), false); + if (getCols.Count > 0) + { + isAttaking = true; + return true; + } + } + else if (!isGoRight && isDown) + { + getCols = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X - 200, (int)Pos.Y - 500, 200, 500), false); + if (getCols.Count > 0) + { + isAttaking = true; + return true; + } + }/*/ + return false; } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs index a4963bf..f2c9d50 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs @@ -30,11 +30,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters isDownUp = true; isDown = true; physicsManager = AppManager.Instance.GameManager.physicsManager; - web = new SpiderWeb(Pos); name = "Spider"; Width = 112; Height = 24; delay = 0; + web = new SpiderWeb(new Vector2(Pos.X-Width/2,Pos.Y)); webLength = 0; monster_speed = 3; acceleration = new Vector2(0, -50); diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs index ab0a681..c1737f2 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs @@ -39,6 +39,14 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { isGoRight = false; } + + this.GraphicsComponent.actionOfAnimationEnd += (a) => + { + if (a == "ZombieRightAttack" || a == "ZombieLeftAttack") + { + isAttaking = false; + } + }; } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack" }, "ZombieMoveLeft"); @@ -90,19 +98,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { if (isGoRight) { - if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveRight") - { - GraphicsComponent.StartAnimation("ZombieMoveRight"); - } + StartCicycleAnimation("ZombieMoveRight"); velocity.X = monster_speed; } else if (!isGoRight) { - if (GraphicsComponent.GetCurrentAnimation != "ZombieMoveLeft") - { - GraphicsComponent.StartAnimation("ZombieMoveLeft"); - } + StartCicycleAnimation("ZombieMoveLeft"); velocity.X = -monster_speed; } @@ -136,14 +138,14 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters if(isGoRight && this._pos.X <= AppManager.Instance.GameManager.players[0].Pos.X) { isTarget = true; - leftBorder = Pos.X - 10; + leftBorder = Pos.X - 100; rightBorder = 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; + rightBorder = Pos.X + 100; leftBorder = AppManager.Instance.GameManager.players[0].Pos.X; } } @@ -159,6 +161,15 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters rightBorder = 760; } } + public void SwitchToRight() + { + isGoRight = true; + } + + public void SwitchToLeft() + { + isGoRight = false; + } public override void Attack(GameTime gameTime) {} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/AnimationRectangle.cs similarity index 87% rename from DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs rename to DangerousD/GameCore/GameObjects/LivingEntities/Player/AnimationRectangle.cs index 7dda1b1..25e01f0 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/AnimationRectangle.cs @@ -9,9 +9,9 @@ using Microsoft.Xna.Framework; namespace DangerousD.GameCore.GameObjects.PlayerDeath { - public class DeathRectangle : GameObject + public class AnimationRectangle : GameObject { - public DeathRectangle(Vector2 pos, string DeathType) : base(pos) + public AnimationRectangle(Vector2 pos, string DeathType) : base(pos) { Height = 48; Width = 48; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 2d07720..eaae151 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -16,11 +16,10 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public class Player : LivingEntity { bool isAlive = true; - bool isRight; + bool isRight = true; string stayAnimation; bool isJump = false; public int health; - public bool isGoRight = false; public Vector2 playerVelocity; public int rightBorder; public int leftBorder; @@ -31,14 +30,18 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities private int bullets; public bool FallingThroughPlatform = false; public bool isUping = false; + public bool isNetworkPlayer; + private int shootLength = 160; + + - public int Bullets { get { return bullets; } } public Player(Vector2 position, bool isNetworkPlayer = false) : base(position) { + this.isNetworkPlayer = isNetworkPlayer; Width = 16; Height = 32; @@ -47,30 +50,30 @@ 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; } } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "playerMoveLeft", "playerMoveRight", "DeathFromZombie", "playerRightStay", "playerStayLeft", - "playerJumpRight" , "playerJumpLeft", "playerShootLeft", "playerShootRight", "playerReload"}, "playerReload"); + "playerJumpRight" , "playerJumpLeft", "playerShootLeft", "playerShootRight", "playerReload", "smokeAfterShoot"}, "playerReload"); public void Attack() { @@ -100,7 +103,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities isAttacked = true; if(monsterName == "Zombie") { - DeathRectangle deathRectangle = new DeathRectangle(Pos, "DeathFrom" + monsterName); + AnimationRectangle deathRectangle = new AnimationRectangle(Pos, "DeathFrom" + monsterName); deathRectangle.Gr.actionOfAnimationEnd += (a) => { if (a == "DeathFrom" + monsterName) @@ -111,7 +114,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities } else if(monsterName == "Spider") { - DeathRectangle deathRectangle = new DeathRectangle(Pos, "DeathFrom" + monsterName); + AnimationRectangle deathRectangle = new AnimationRectangle(Pos, "DeathFrom" + monsterName); deathRectangle.Gr.actionOfAnimationEnd += (a) => { if (a == "DeathFrom" + monsterName) @@ -134,41 +137,36 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities { if (bullets > 0) { - if (!isShooting) + if (!isAttacked) { - AppManager.Instance.SoundManager.StartSound("shotgun_shot", Pos, Pos); - isShooting = true; - bullets--; - if (isRight) + if (!isShooting) { - if (GraphicsComponent.GetCurrentAnimation != "playerShootRight") + isShooting = true; + bullets--; + if (isRight) { - GraphicsComponent.StartAnimation("playerShootRight"); - } - var targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)(Pos.Y - 10f), 100, 10), typeof(Zombie)); - if (targets != null) - { - foreach (var target in targets) + StartCicycleAnimation("playerShootRight"); + var targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)(Pos.Y - 10f), shootLength + 24, 10), typeof(Zombie)).OrderBy(x => (x.Pos - Pos).LengthSquared()); + if (targets.Count() > 0) { - Zombie targetZombie = (Zombie)target; + Zombie targetZombie = (Zombie)targets.First(); targetZombie.TakeDamage(); } + SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X + 30, Pos.Y + 7)); } - } - else - { - if (GraphicsComponent.GetCurrentAnimation != "playerShootRight") + else { - GraphicsComponent.StartAnimation("playerShootRight"); - } - var targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)(Pos.Y - 10f), -100, 10), typeof(Zombie)); - if (targets != null) - { - foreach (var target in targets) + StartCicycleAnimation("playerShootLeft"); + var targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X - shootLength, (int)(Pos.Y - 10f), shootLength, 10), typeof(Zombie)); + if (targets != null) { - Zombie targetZombie = (Zombie)target; - targetZombie.TakeDamage(); + foreach (var target in targets) + { + Zombie targetZombie = (Zombie)target; + targetZombie.TakeDamage(); + } } + SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X - 12, Pos.Y + 7)); } } } @@ -176,7 +174,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities } public override void Update(GameTime gameTime) { - if (AppManager.Instance.InputManager.ScopeState==ScopeState.Up) + if (AppManager.Instance.InputManager.ScopeState == ScopeState.Up) { isUping = true; } @@ -189,14 +187,22 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities FallingThroughPlatform = false; } GraphicsComponent.SetCameraPosition(Pos); - if (!isAttacked || AppManager.Instance.InputManager.InvincibilityCheat) + if (!isAttacked || AppManager.Instance.InputManager.InvincibilityCheat) { - Move(gameTime); + if (!isShooting) + { + Move(gameTime); + } + else + { + velocity.X = 0; + } } else { velocity.X = 0; } + base.Update(gameTime); } @@ -252,6 +258,5 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities FallingThroughPlatform = true; isOnGround = false; } - } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/SmokeAfterShoot.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/SmokeAfterShoot.cs new file mode 100644 index 0000000..b401ffc --- /dev/null +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/SmokeAfterShoot.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DangerousD.GameCore.GameObjects; +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; + +namespace DangerousD.GameCore.GameObjects.PlayerDeath +{ + public class SmokeAfterShoot : GameObject + { + public SmokeAfterShoot(Vector2 pos) : base(pos) + { + Height = 6; + Width = 6; + PlaySmoke(); + this.GraphicsComponent.actionOfAnimationEnd += (a) => + { + if (a == "smokeAfterShoot") + { + AppManager.Instance.GameManager.Remove(this); + } + }; + } + + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "smokeAfterShoot" }, + "smokeAfterShoot"); + + public GraphicsComponent Gr => GraphicsComponent; + + private void PlaySmoke() + { + if (GraphicsComponent.GetCurrentAnimation != "smokeAfterShoot") + { + GraphicsComponent.StartAnimation("smokeAfterShoot"); + } + } + + } +} \ No newline at end of file diff --git a/DangerousD/GameCore/Graphics/GraphicsComponent.cs b/DangerousD/GameCore/Graphics/GraphicsComponent.cs index 5a659c8..27eeea8 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 7659c09..5582095 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(); @@ -200,9 +199,13 @@ namespace DangerousD.GameCore break; case GameState.Lobby: break; - case GameState.Game: - GameManager.mapManager.LoadLevel("lvl"); - GameManager.FindBorders(); + case GameState.Game: + + GameManager.mapManager.LoadLevel("map"); + + + GameManager.FindBorders(); + break; case GameState.Death: break; @@ -225,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); @@ -236,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); @@ -253,15 +271,17 @@ 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: + default: break; } } diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index d7ed9ab..ae7bf59 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -150,16 +150,24 @@ 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); + for(int i = 0; i < otherObjects.Count; i++) + { + otherObjects[i].Update(gameTime); + } physicsManager.UpdateCollisions(entities, livingEntities, mapObjects, players, gameTime); }