示例#1
0
        public void Update(GameTime gameTime)
        {
            for (int i = 0; i < SceneGameplay.enemieManager.lstEnemies.Count; i++)
            {
                Enemie enemie = SceneGameplay.enemieManager.lstEnemies[i];
                if (enemie.GotHurt)
                {
                    Damage   = enemie.LastDamageTaken;
                    Position = new Vector2(enemie.Position.X,
                                           enemie.Position.Y - enemie.BoundingBox.Height / 1.5f);
                    enemie.GotHurt = false;
                    CurrentColor   = color;
                    DrawDamage     = true;
                }
            }

            if (DrawDamage)
            {
                timer       += (float)gameTime.ElapsedGameTime.TotalSeconds;
                CurrentColor = new Color(CurrentColor.R, CurrentColor.G, CurrentColor.B, CurrentColor.A * 0.9f);
                Position     = new Vector2(Position.X, Position.Y - 0.8f);
                if (timer >= time)
                {
                    timer      = 0;
                    DrawDamage = false;
                }
            }
        }
示例#2
0
 public void Update(GameTime gameTime)
 {
     for (int i = 0; i < SceneGameplay.enemieManager.lstEnemies.Count; i++)
     {
         Enemie enemie = SceneGameplay.enemieManager.lstEnemies[i];
         if (enemie.Position.Y - enemie.BoundingBox.Height / 2 > currentScene.myCharacter.Position.Y -
             currentScene.myCharacter.BoundingBox.Height / 2 * 0.7f)
         {
             enemie.SetLayer(0f);
         }
         else
         {
             enemie.SetLayer(1f);
         }
     }
 }
示例#3
0
        public Champiglu(Enemie pCopy, Vector2 pPosition, Hero pPlayer) : base(pCopy, pPlayer)
        {
            Position = pPosition;

            AnimationList = new Dictionary <string, AnimatedSprite>()
            {
                { "walk", new AnimatedSprite(pCopy.lstTextures[0], 25, 100, 25, 25, 0.3f, 2) },
                { "attack", new AnimatedSprite(pCopy.lstTextures[1], 25, 100, 25, 25, 0.2f, 2) },
            };

            CurrentSprite = AnimationList["walk"];
            inMovement    = false;

            CurrentState = eState.idle;
            CurrentSpeed = Speed;

            spawnPosition = Position;

            basicAI = new BasicAI(this, pPlayer);
        }
示例#4
0
        private void ParticleUpdate(GameTime gameTime, Particle particle)
        {
            particle.timer += (float)gameTime.ElapsedGameTime.TotalSeconds;

            Vector2 newTargetPosition = new Vector2(targetPosition.X + particle.AleaNumber, particle.BeginPosition.Y
                                                    + (targetPosition.Y - particle.BeginPosition.Y));
            Vector2 newPos2 = new Vector2(particle.BeginPosition.X + particle.AleaNumber +
                                          (targetPosition.X - particle.BeginPosition.X) * 2 / 3,
                                          particle.BeginPosition.Y - 400);

            particle.Position = new Vector2(particle.Position.X + (float)Math.Cos(particle.Angle) * particle.Velocity.X,
                                            particle.Position.Y + (float)Math.Sin(particle.Angle) * particle.Velocity.Y);
            particle.Velocity *= 1.01f;

            for (int a = 0; a < SceneGameplay.enemieManager.lstEnemies.Count; a++)
            {
                Enemie enemie = SceneGameplay.enemieManager.lstEnemies[a];
                if (enemie.BoundingBox.Contains(particle.Position))
                {
                    Die(particle);
                    enemie.GetDamage(Damage);
                    if (enemie.CurrentState == Enemie.eState.idle)
                    {
                        enemie.Aggro();
                    }
                }
            }

            for (int i = 0; i < TileMap.LstCollision.Count; i++)
            {
                if (TileMap.LstCollision[i].Contains(particle.Position) || particle.Position.X < 0 ||
                    particle.Position.Y < 0 || particle.Position.X >= TileMap.MapWidth * TileMap.TileWidth ||
                    particle.Position.Y >= TileMap.MapHeight * TileMap.TileHeight)
                {
                    Die(particle);
                }
            }
        }
示例#5
0
        public override void Update(GameTime gameTime)
        {
            switch (CurrentState)
            {
            case eState.idle:
                inMovement = false;
                if (util.getDistance(Position, Player.Position) < RadiusVisionLength &&
                    basicAI.CanSeePlayer)
                {
                    CurrentState = eState.walkTo;
                }
                break;

            case eState.walkTo:
                inMovement = true;
                if (util.getDistance(Position, spawnPosition) > 400)
                {
                    CurrentState = eState.comeBack;
                }
                else if (util.getDistance(Position, Player.Position) > 20)
                {
                    Vector2 pos       = TileMap.GetTilePosAt((int)Position.X, (int)Position.Y, 0);
                    Vector2 playerPos = TileMap.GetTilePosAt((int)Player.Position.X, (int)Player.Position.Y, 0);

                    float angle = util.getAngle(Player.Position, Position);
                    Direction = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));

                    if (util.getDistance(Position, Player.Position) > 200)
                    {
                        CurrentSpeed = SprintSpeed;
                    }
                    else
                    {
                        CurrentSpeed = Speed;
                    }

                    Position += Direction * CurrentSpeed;
                }
                else if (attackReady && CurrentSprite.count == 0)
                {
                    CurrentSprite       = AnimationList["attack"];
                    CurrentSprite.count = 0;
                    CurrentState        = eState.attack;
                }
                break;

            case eState.attack:
                inMovement   = true;
                attackTimer += (float)gameTime.ElapsedGameTime.TotalSeconds;
                Console.WriteLine("test");
                if (attackTimer > attackTime)
                {
                    attackTimer = 0;
                    Console.WriteLine("Attack");
                    CurrentSprite = AnimationList["walk"];
                    attackReady   = false;
                    CurrentState  = eState.walkTo;
                }
                break;

            case eState.comeBack:
                inMovement = true;
                if (!(Position.X > spawnPosition.X - 1 && Position.X < spawnPosition.X + 1) &&
                    !(Position.Y > spawnPosition.Y - 1 && Position.Y < spawnPosition.Y + 1))
                {
                    float angle = util.getAngle(spawnPosition, Position);
                    Direction  = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
                    Position  += Direction * Speed;
                    inMovement = true;
                }
                else
                {
                    CurrentSprite.count = 0;
                    CurrentState        = eState.idle;
                }
                break;

            default:
                break;
            }

            if (!attackReady)
            {
                attackCooldownTimer += (float)gameTime.ElapsedGameTime.TotalSeconds;;
                if (attackCooldownTimer > attackCooldown)
                {
                    attackReady         = true;
                    attackCooldownTimer = 0;
                }
            }

            if (inMovement)
            {
                CurrentSprite.Update(gameTime);
            }

            for (int i = 0; i < SceneGameplay.enemieManager.lstEnemies.Count; i++)
            {
                Enemie friend = SceneGameplay.enemieManager.lstEnemies[i];
                if (util.getDistance(Position, friend.Position) < 100)
                {
                    if ((friend.CurrentState == Enemie.eState.attack ||
                         friend.CurrentState == Enemie.eState.walkTo) &&
                        (CurrentState == eState.idle) && friend != this && basicAI.CanSeePlayer)
                    {
                        Aggro();
                    }
                }
            }

            if (util.getDistance(Position, Player.Position) < MainGame.ScreenWidth)
            {
                basicAI.Update(gameTime);
            }

            base.Update(gameTime);
        }
示例#6
0
 public Enemie(Enemie pCopy, Hero pPlayer)
 {
     //AnimationList = pCopy.AnimationList;
     Life   = pCopy.Life;
     Player = pPlayer;
 }
示例#7
0
 public void AddEnemie(Enemie pEnemie)
 {
     lstEnemies.Add(pEnemie);
 }
示例#8
0
 public BasicAI(Enemie pEnemie, Hero pPlayer)
 {
     enemie    = pEnemie;
     player    = pPlayer;
     primitive = new Primitive();
 }