From 4c415fc4f5f4ac8e1c733e186238b4be041baf05 Mon Sep 17 00:00:00 2001 From: bmvolf Date: Thu, 17 Aug 2023 13:01:04 +0300 Subject: [PATCH] try to do vision zombie --- .../LivingEntities/Monsters/Zombie.cs | 33 ++++++++++++++++--- DangerousD/GameCore/Levels/Level1.cs | 16 ++++----- .../GameCore/Managers/PhysicsManager.cs | 2 +- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs index dba2deb..5a5e1a9 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs @@ -7,23 +7,27 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using DangerousD.GameCore.Managers; namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public class Zombie : CoreEnemy { private bool isGoRight = true; - int leftBorder; - int rightBorder; + float leftBorder; + float rightBorder; bool isAttaking = false; + bool isTarget = false; + PhysicsManager physicsManager; public Zombie(Vector2 position) : base(position) { - Width = 72; - Height = 120; + Width = 48; + Height = 80; monster_speed = 3; name = "Zombie"; leftBorder = (int)position.X - 60; rightBorder = (int)position.X + 120; + physicsManager = new PhysicsManager(); } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack" }, "ZombieMoveLeft"); @@ -31,6 +35,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { if (!isAttaking) { + Target(); Move(gameTime); } @@ -106,5 +111,25 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } base.OnCollision(gameObject); } + + public void Target() + { + if(physicsManager.RayCast(this, AppManager.Instance.GameManager.players[0]) == null) + { + if(isGoRight && this._pos.X <= AppManager.Instance.GameManager.players[0].Pos.X) + { + isTarget = true; + leftBorder = Pos.X - 10; + 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; + leftBorder = AppManager.Instance.GameManager.players[0].Pos.X; + } + } + } } } diff --git a/DangerousD/GameCore/Levels/Level1.cs b/DangerousD/GameCore/Levels/Level1.cs index c3558d9..4566358 100644 --- a/DangerousD/GameCore/Levels/Level1.cs +++ b/DangerousD/GameCore/Levels/Level1.cs @@ -11,21 +11,21 @@ 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 Zombie = new Zombie(new Vector2(250, 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)); + //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++) { new GrassBlock(new Vector2(i*32, 256)); } - new GrassBlock(new Vector2(500, 224)); + //new GrassBlock(new Vector2(500, 224)); } } } diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs index 7ae99f9..ab47322 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -136,7 +136,7 @@ namespace DangerousD.GameCore.Managers Rectangle rectangle; Vector2 distance = entity1.Pos - entity2.Pos; - rectangle = new Rectangle((int)entity1.Pos.X, (int)entity1.Pos.Y, entity2.Width, entity2.Height); + rectangle = new Rectangle((int)entity1.Pos.X, (int)entity1.Pos.Y - 5, entity2.Width, entity2.Height); GameObject gameObject = null; double length = distance.Length();