diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb index 123c029..29141fb 100644 --- a/DangerousD/Content/Content.mgcb +++ b/DangerousD/Content/Content.mgcb @@ -248,6 +248,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/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/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 ed9119d..05c78a5 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; @@ -32,6 +31,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities public bool FallingThroughPlatform = false; public bool isUping = false; public bool isNetworkPlayer; + private int shootLength = 160; @@ -73,7 +73,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities 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() { @@ -103,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) @@ -114,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) @@ -137,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 != null) { - 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)); } } } @@ -179,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; } @@ -192,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); } 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/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index d6ba67f..ae7bf59 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -164,9 +164,10 @@ namespace DangerousD.GameCore } } 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); }