diff --git a/DangerousD/Content/animations/BallMoveRight b/DangerousD/Content/animations/BallMoveRight new file mode 100644 index 0000000..fe03349 --- /dev/null +++ b/DangerousD/Content/animations/BallMoveRight @@ -0,0 +1 @@ +{"id":"BallMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":229,"Y":332,"Width":16,"Height":16},"frameSecond":[{"Item1":0,"Item2":8}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/FlameSkullMoveLeft b/DangerousD/Content/animations/FlameSkullMoveLeft new file mode 100644 index 0000000..8b2ffbd --- /dev/null +++ b/DangerousD/Content/animations/FlameSkullMoveLeft @@ -0,0 +1 @@ +{"id":"FlameSkullMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":593,"Width":24,"Height":16},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/FlameSkullMoveRight b/DangerousD/Content/animations/FlameSkullMoveRight new file mode 100644 index 0000000..c0c96b6 --- /dev/null +++ b/DangerousD/Content/animations/FlameSkullMoveRight @@ -0,0 +1 @@ +{"id":"FlameSkullMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":576,"Width":24,"Height":16},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostAttack b/DangerousD/Content/animations/GhostAttack new file mode 100644 index 0000000..7ada2dc --- /dev/null +++ b/DangerousD/Content/animations/GhostAttack @@ -0,0 +1 @@ +{"id":"GhostAttack","textureName":"MonstersAnimations","startSpriteRectangle":{"X":101,"Y":503,"Width":24,"Height":31},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":false,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostMoveLeft b/DangerousD/Content/animations/GhostMoveLeft new file mode 100644 index 0000000..32b880b --- /dev/null +++ b/DangerousD/Content/animations/GhostMoveLeft @@ -0,0 +1 @@ +{"id":"GhostMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":536,"Width":24,"Height":26},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostMoveRight b/DangerousD/Content/animations/GhostMoveRight new file mode 100644 index 0000000..74911c7 --- /dev/null +++ b/DangerousD/Content/animations/GhostMoveRight @@ -0,0 +1 @@ +{"id":"GhostMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":503,"Width":24,"Height":26},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/GhostSpawn b/DangerousD/Content/animations/GhostSpawn new file mode 100644 index 0000000..99d53e1 --- /dev/null +++ b/DangerousD/Content/animations/GhostSpawn @@ -0,0 +1 @@ +{"id":"GhostSpawn","textureName":"MonstersAnimations","startSpriteRectangle":{"X":26,"Y":503,"Width":24,"Height":30},"frameSecond":[{"Item1":0,"Item2":20}],"textureFrameInterval":1,"framesCount":3,"isCycle":false,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/HunchmanDaggerLeft b/DangerousD/Content/animations/HunchmanDaggerLeft new file mode 100644 index 0000000..b21064a --- /dev/null +++ b/DangerousD/Content/animations/HunchmanDaggerLeft @@ -0,0 +1 @@ +{"id":"HunchmanDaggerLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":224,"Y":129,"Width":9,"Height":6},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/HunchmanDaggerRight b/DangerousD/Content/animations/HunchmanDaggerRight new file mode 100644 index 0000000..43354f1 --- /dev/null +++ b/DangerousD/Content/animations/HunchmanDaggerRight @@ -0,0 +1 @@ +{"id":"HunchmanDaggerRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":224,"Y":116,"Width":9,"Height":6},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderMoveLeft b/DangerousD/Content/animations/SpiderMoveLeft new file mode 100644 index 0000000..262a25b --- /dev/null +++ b/DangerousD/Content/animations/SpiderMoveLeft @@ -0,0 +1 @@ +{"id":"SpiderMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":225,"Width":34,"Height":8},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderMoveRight b/DangerousD/Content/animations/SpiderMoveRight new file mode 100644 index 0000000..ffebe55 --- /dev/null +++ b/DangerousD/Content/animations/SpiderMoveRight @@ -0,0 +1 @@ +{"id":"SpiderMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":199,"Width":34,"Height":8},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderOnWeb b/DangerousD/Content/animations/SpiderOnWeb new file mode 100644 index 0000000..c9f8c45 --- /dev/null +++ b/DangerousD/Content/animations/SpiderOnWeb @@ -0,0 +1 @@ +{"id":"SpiderOnWeb","textureName":"MonstersAnimations","startSpriteRectangle":{"X":80,"Y":199,"Width":16,"Height":24},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SpiderWeb b/DangerousD/Content/animations/SpiderWeb new file mode 100644 index 0000000..39363d6 --- /dev/null +++ b/DangerousD/Content/animations/SpiderWeb @@ -0,0 +1 @@ +{"id":"SpiderWeb","textureName":"MonstersAnimations","startSpriteRectangle":{"X":108,"Y":199,"Width":4,"Height":8},"frameSecond":[{"Item1":0,"Item2":1}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfJumpLeft b/DangerousD/Content/animations/WolfJumpLeft new file mode 100644 index 0000000..2e54b48 --- /dev/null +++ b/DangerousD/Content/animations/WolfJumpLeft @@ -0,0 +1 @@ +{"id":"WolfJumpLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":133,"Y":290,"Width":40,"Height":33},"frameSecond":[{"Item1":0,"Item2":1}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfJumpRight b/DangerousD/Content/animations/WolfJumpRight new file mode 100644 index 0000000..43760af --- /dev/null +++ b/DangerousD/Content/animations/WolfJumpRight @@ -0,0 +1 @@ +{"id":"WolfJumpRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":133,"Y":258,"Width":40,"Height":33},"frameSecond":[{"Item1":0,"Item2":1}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfMoveLeft b/DangerousD/Content/animations/WolfMoveLeft new file mode 100644 index 0000000..924a49c --- /dev/null +++ b/DangerousD/Content/animations/WolfMoveLeft @@ -0,0 +1 @@ +{"id":"WolfMoveLeft","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":292,"Width":32,"Height":32},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":4,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/WolfMoveRight b/DangerousD/Content/animations/WolfMoveRight new file mode 100644 index 0000000..67ca172 --- /dev/null +++ b/DangerousD/Content/animations/WolfMoveRight @@ -0,0 +1 @@ +{"id":"WolfMoveRight","textureName":"MonstersAnimations","startSpriteRectangle":{"X":1,"Y":258,"Width":32,"Height":32},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":4,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs index 51f73ff..bd01861 100644 --- a/DangerousD/GameCore/GameObjects/GameObject.cs +++ b/DangerousD/GameCore/GameObjects/GameObject.cs @@ -14,8 +14,8 @@ namespace DangerousD.GameCore { protected Vector2 _pos; public Vector2 Pos => _pos; - public int Width { get; protected set; } - public int Height { get; protected set; } + public int Width { get; set; } + public int Height { get; set; } public Rectangle Rectangle => new Rectangle((int)Pos.X, (int)Pos.Y, Width, Height); public Vector2 velocity; public Vector2 acceleration; diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs index c521c2e..cd00606 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FlameSkull.cs @@ -14,10 +14,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public FlameSkull(Vector2 position) : base(position) { - + Width = 62; + Height = 40; + monster_speed = 3; + name = "Skull"; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FlameSkullMoveLeft", "FlameSkullMoveRight" }, "FlameSkullMoveRight"); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FlameSkullMoveRight" , "FlameSkullMoveLeft"}, "FlameSkullMoveRight"); public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs index 0434e4d..b0b3429 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Frank.cs @@ -19,7 +19,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters Height = 160; GraphicsComponent.StartAnimation("FrankMoveLeft"); monster_speed = 1; - name = "Фрэнк"; + name = "Frank"; } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "FrankMoveRight", "FrankMoveLeft" }, "FrankMoveRight"); @@ -35,35 +35,27 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters public override void Move(GameTime gameTime) { - /* if (player.Pos.X - _pos.X <= 20 || player.Pos.X - _pos.X <= -20) + var player = AppManager.Instance.GameManager.players[0]; + if (player.Pos.X - _pos.X <= 20 || player.Pos.X - _pos.X <= -20) { player.Death(name); - } */ - + } + if (isGoRight) - { + { if (GraphicsComponent.GetCurrentAnimation != "FrankMoveRight") { GraphicsComponent.StartAnimation("FrankMoveRight"); - velocity = new Vector2(monster_speed, 0); } + velocity.X = monster_speed; } - else if (!isGoRight) + else { if (GraphicsComponent.GetCurrentAnimation != "FrankMoveLeft") { GraphicsComponent.StartAnimation("FrankMoveLeft"); - velocity = new Vector2(-monster_speed, 0); } - } - - if (_pos.X <= 1) - { - isGoRight = true; - } - else if (_pos.X >= 500) - { - isGoRight = false; + velocity.X = -monster_speed; } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs new file mode 100644 index 0000000..7101da2 --- /dev/null +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/FrankBalls.cs @@ -0,0 +1,41 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters +{ + public class FrankBalls : CoreEnemy + { + public FrankBalls(Vector2 position) : base(position) + { + name = "FrankBalls"; + Width = 40; + Height = 40; + monster_speed = 1; + acceleration = Vector2.Zero; + } + + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "BallMoveRight" }, "BallMoveRight"); + + public override void Attack() + { + + } + + public override void Death() + { + + } + + public override void Move(GameTime gameTime) + { + + } + } +} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs index b8827b1..1e47e99 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Ghost.cs @@ -12,11 +12,15 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public Ghost(Vector2 position) : base(position) { + monster_speed = 1; + name = "Ghost"; + Width = 48; + Height = 62; + GraphicsComponent.StartAnimation("GhostSpawn"); } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "GhostMoveRight", "GhostMoveLeft", "GhostSpawn", "GhostAttack" }, ""); - + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "GhostMoveRight", "GhostMoveLeft", "GhostSpawn", "GhostAttack" }, "GhostMoveRight"); public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/HunchmanDagger.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/HunchmanDagger.cs new file mode 100644 index 0000000..9e616ed --- /dev/null +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/HunchmanDagger.cs @@ -0,0 +1,40 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters +{ + public class HunchmanDagger : CoreEnemy + { + public HunchmanDagger(Vector2 position) : base(position) + { + name = "Hunchman"; + monster_speed = 1; + Width = 9; + Height = 6; + } + + protected override GraphicsComponent GraphicsComponent { get; } = new (new List { "HunchmanDaggerRight", "HunchmanDaggerLeft" }, "HunchmanDaggerLeft"); + + public override void Attack() + { + + } + + public override void Death() + { + + } + + public override void Move(GameTime gameTime) + { + + } + } +} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs index 9513d71..bffa5f6 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Spider.cs @@ -12,15 +12,85 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public class Spider : CoreEnemy { + protected SpiderWeb web; + protected float delay; + protected int webLength; + protected bool isDown; + protected bool isDownUp; public Spider(Vector2 position) : base(position) { + isDownUp = true; + isDown = true; + web = new SpiderWeb(Pos); + name = "Spider"; + Width = 112; + Height = 24; + delay = 0; + webLength = 0; + monster_speed = 1; + acceleration = Vector2.Zero; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SpiderMoveRight", "SpiderMoveLeft", "SpiderDown", "SpiderUp" }, ""); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SpiderMoveRight", "SpiderMoveLeft", "SpiderOnWeb" }, "SpiderMoveRight"); - public override void Attack() + public override void Update(GameTime gameTime) { + if (isDownUp) + { + Width = 48; + Height = 72; + delay += (float)gameTime.ElapsedGameTime.TotalSeconds; + if (delay > 0.5 && webLength <= 4 && isDown) + { + StartCicycleAnimation("SpiderOnWeb"); + webLength++; + _pos.Y += 25; + web.Height = webLength * 25; + web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2, Pos.Y - 25 * webLength)); + delay = 0; + if (webLength == 4) + { + isDown = false; + } + } + else if (delay > 0.5 && webLength != 0 && !isDown) + { + StartCicycleAnimation("SpiderOnWeb"); + webLength--; + _pos.Y -= 25; + web.Height = webLength * 25; + web.SetPosition(new Vector2(_pos.X + Width / 2 - web.Width / 2, Pos.Y - 25 * webLength)); + delay = 0; + if (webLength == 0) + { + isDown = true; + } + } + else + { + Width = 112; + Height = 24; + } + } + base.Update(gameTime); + } + public override void Attack() + { //48 72 + + } + + public override void Draw(SpriteBatch spriteBatch) + { + if (GraphicsComponent.GetCurrentAnimation == "SpiderOnWeb") + { + GraphicsComponent.DrawAnimation(new Rectangle((int)Pos.X, (int)Pos.Y, 48, 72), spriteBatch); + + } + else + { + base.Draw(spriteBatch); + } } public override void Death() diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SpiderWeb.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SpiderWeb.cs new file mode 100644 index 0000000..d91ccaf --- /dev/null +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SpiderWeb.cs @@ -0,0 +1,41 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters +{ + public class SpiderWeb : CoreEnemy + { + public SpiderWeb(Vector2 position) : base(position) + { + name = "Web"; + monster_speed = 1; + Width = 16; + Height = 0; + acceleration = Vector2.Zero; + } + + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SpiderWeb" }, "SpiderWeb"); + + public override void Attack() + { + + } + + public override void Death() + { + + } + + public override void Move(GameTime gameTime) + { + + } + } +} diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs index 91af742..9d5acb8 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Werewolf.cs @@ -14,9 +14,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public Werewolf(Vector2 position) : base(position) { + name = "Wolf"; + monster_speed = 1; + Width = 78; + Height = 96; } - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "WolfMoveRight", "WolfMoveLeft", "WolfJumpRight", "WolfJumpLeft" }, ""); + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "WolfMoveRight", "WolfMoveLeft", "WolfJumpRight", "WolfJumpLeft" }, "WolfMoveRight"); public override void Attack() { diff --git a/DangerousD/GameCore/GameObjects/LivingEntity.cs b/DangerousD/GameCore/GameObjects/LivingEntity.cs index 5352489..2826863 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntity.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntity.cs @@ -23,4 +23,12 @@ public abstract class LivingEntity : Entity } base.Update(gameTime); } + + public virtual void StartCicycleAnimation(string animationName) + { + if (GraphicsComponent.GetCurrentAnimation != animationName) + { + GraphicsComponent.StartAnimation(animationName); + } + } } \ No newline at end of file diff --git a/DangerousD/GameCore/Levels/Level1.cs b/DangerousD/GameCore/Levels/Level1.cs index c140696..c3558d9 100644 --- a/DangerousD/GameCore/Levels/Level1.cs +++ b/DangerousD/GameCore/Levels/Level1.cs @@ -2,7 +2,7 @@ using DangerousD.GameCore.GameObjects.MapObjects; using Microsoft.Xna.Framework; using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; - +using System.Collections.Generic; namespace DangerousD.GameCore.Levels { @@ -11,10 +11,15 @@ namespace DangerousD.GameCore.Levels public void InitLevel() { new Player(new Vector2(80,0)); - var Zombie = new Zombie(new Vector2(140, 128)); var Frank = new Frank(new Vector2(384, 128)); + var Spider = new Spider(new Vector2(112, 0)); + var FlameSkull = new FlameSkull(new Vector2(512, 0)); + var Werewolf = new Werewolf(new Vector2(640, 0)); + var Ghost = new Ghost(new Vector2(730, 0)); + var FrankBalls = new FrankBalls(new Vector2(Frank.Pos.X, Frank.Pos.Y)); + new GrassBlock(new Vector2(0, 224)); for (int i = 0; i < 50; i++) {