/// <summary>
        /// Main method for updating the _enemies logic
        /// </summary>
        /// <param name="player">The player object</param>
        /// <param name="elapsedTime">Elapsed time in milleseconds</param>
        public void Update(Player player, float elapsedTime)
        {
            _enemySpellSystem.Update(elapsedTime);
            //Checks the list with dead _enemies and handles their respawn
            Enemy_spawnList(player);
            //Set to false here and true whithin the loop if an enemy is attacking the player
            player.InCombat = false;

            foreach (Model.Enemy enemy in _enemies)
            {
                if (enemy.Target != null)
                {
                    //If the enemy target is dead; stop attacking and evade to it's starting position
                    if (!enemy.Target.IsAlive())
                    {
                        enemy.IsEvading      = true;
                        enemy.IsAttacking    = false;
                        enemy.Target         = null;
                        enemy.IsCastingSpell = false;
                        MoveToTarget(enemy, Vector2.Zero);
                    }
                }

                DecreaseGlobalCD(enemy, elapsedTime);

                if (enemy.Type == Enemy.CLASS_MAGE || enemy.Type == Enemy.BOSS_A)
                {
                    RegenerateMana(elapsedTime, enemy);
                }

                if (enemy.IsActive && enemy.ThisUnit.Bounds.Intersects(enemy.EnemyZone) && !enemy.IsEvading)
                {
                    if (enemy.IsAttacking)
                    {
                        EnemyAttack(enemy, player);
                    }
                    else
                    {
                        CheckEnemyAggro(enemy, player);
                    }
                }
                else
                {
                    enemy.IsEvading   = true;
                    enemy.IsAttacking = false;
                }

                if (enemy.IsEvading)
                {
                    EnemyEvade(enemy);
                }

                //Adds the enemy to the _spawnList if he got killed
                AddTo_spawnList(enemy);
            }

            _enemies.RemoveAll(Enemy => !Enemy.IsAlive());
            _enemies.OrderByDescending(Enemy => Enemy.ThisUnit.Bounds.Y);
        }
Exemple #2
0
        public void Update(Player a_player, float a_elapsedTime)
        {
            m_enemySpellSystem.Update(a_elapsedTime);
            EnemySpawnList(a_player);

            //Sätts till true om en fiende attackerar.
            a_player.InCombat = false;

            foreach (Model.Enemy enemy in m_enemies)
            {
                //BUGGFIX måste ta dän enemy target för mages....nåt konstigt.
                if (enemy.Target != null)
                {
                    if (!enemy.Target.IsAlive())
                    {
                        enemy.IsEvading      = true;
                        enemy.IsAttacking    = false;
                        enemy.Target         = null;
                        enemy.IsCastingSpell = false;
                        MoveToTarget(enemy, Vector2.Zero);
                    }
                }

                //Decrease GCD
                DecreaseGlobalCD(enemy, a_elapsedTime);

                //Kontrollerar om det är en mage eller boss, isf ska han regga mana.
                if (enemy.Type == Enemy.CLASS_MAGE || enemy.Type == Enemy.BOSS_A)
                {
                    RegenerateMana(a_elapsedTime, enemy);
                }

                //Om fienden är aktiv
                if (enemy.IsActive && enemy.ThisUnit.Bounds.Intersects(enemy.EnemyZone) && !enemy.IsEvading)
                {
                    //Testar om fienden redan attackerar.
                    if (enemy.IsAttacking)
                    {
                        EnemyAttack(enemy, a_player);
                    }
                    //Testar om fienden aggras av något.
                    else
                    {
                        CheckEnemyAggro(enemy, a_player);
                    }
                }
                //Fienden slutar attackera.
                else
                {
                    enemy.IsEvading   = true;
                    enemy.IsAttacking = false;
                }

                if (enemy.IsEvading)
                {
                    EnemyEvade(enemy);
                }

                SpawnEnemy(enemy);
            }

            m_enemies.RemoveAll(Enemy => !Enemy.IsAlive());
            m_enemies.OrderByDescending(Enemy => Enemy.ThisUnit.Bounds.Y);
        }
Exemple #3
0
        public void Update(float a_elapsedTime, List <Model.Enemy> a_enemies)
        {
            m_player.Update();

            RegenerateMana(a_elapsedTime, m_player);

            RegenerateHp(a_elapsedTime, m_player);

            m_spellSystem.Update(a_elapsedTime);

            DecreaseGlobalCD(m_player, a_elapsedTime);

            //Tar bort en spelares target om fienden dör eller evadar.
            if (m_player.Target != null && m_player.Target.GetType() == GameModel.ENEMY_NPC)
            {
                Enemy enemy = m_player.Target as Enemy;
                if (!m_player.Target.IsAlive() || enemy.IsEvading)
                {
                    m_player.Target      = null;
                    m_player.IsAttacking = false;
                }
            }

            //Kollar om spelaren attackerar.
            if (m_player.IsAttacking)
            {
                m_player.InCombat = true;
                //Testar om spelaren och hans target kolliderar / är i range för hitboxen.
                if (m_player.Target.ThisUnit.Bounds.Intersects(m_player.PlayerArea))
                {
                    m_player.IsWithinMeleRange = true;
                    //Om spelarens hit cooldown är mindre än 0 så slår spelaren.
                    if (m_player.SwingTime <= 0)
                    {
                        //Om player target fienden lever så sänks hans hp.
                        if (m_player.Target.IsAlive() && m_player.IsAlive())
                        {
                            m_player.Target.CurrentHp -= (m_player.AutohitDamage - m_player.Target.Armor);
                        }
                        //Sätter cooldown på ett slag.
                        m_player.SwingTime = 50;
                    }
                    else if (!m_player.IsCastingSpell)
                    {
                        m_player.SwingTime -= 1;
                    }
                }
                else
                {
                    m_player.IsWithinMeleRange = false;
                }
            }
            else
            {
                m_player.InCombat = false;
            }

            if (!m_player.IsAlive())
            {
                m_player.Target      = null;
                m_player.IsAttacking = false;

                if (m_player.SpawnTimer < 0)
                {
                    m_player.Spawn();
                }
                else
                {
                    m_player.SpawnTimer -= a_elapsedTime;
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Main method ffor updating the player logic
        /// </summary>
        /// <param name="elapsedTime">Elapsed time in milleseconds</param>
        /// <param name="enemies">List of active enemies</param>
        public void Update(float elapsedTime, List <Model.Enemy> enemies)
        {
            _player.Update();

            RegenerateMana(elapsedTime, _player);

            RegenerateHp(elapsedTime, _player);

            _spellSystem.Update(elapsedTime);

            DecreaseGlobalCD(_player, elapsedTime);

            //Untarget the players target if it is dead or evading
            if (_player.Target != null && _player.Target.GetType() == GameModel.ENEMY_NPC)
            {
                Enemy enemy = _player.Target as Enemy;
                if (!_player.Target.IsAlive() || enemy.IsEvading)
                {
                    _player.Target      = null;
                    _player.IsAttacking = false;
                }
            }
            if (_player.IsAttacking)
            {
                _player.InCombat = true;
                //Checks if the player is in range of the enemy hitbox
                if (_player.Target.ThisUnit.Bounds.Intersects(_player.PlayerArea))
                {
                    _player.IsWithinMeleRange = true;
                    //Hit cooldown has ended
                    if (_player.SwingTime <= 0)
                    {
                        //If enemy is alive; reduce its hp
                        if (_player.Target.IsAlive() && _player.IsAlive())
                        {
                            _player.Target.CurrentHp -= (_player.AutohitDamage - _player.Target.Armor);
                        }

                        //Setting new cooldown
                        _player.SwingTime = 50;
                    }
                    else if (!_player.IsCastingSpell)
                    {
                        _player.SwingTime -= 1;
                    }
                }
                else
                {
                    _player.IsWithinMeleRange = false;
                }
            }
            else
            {
                _player.InCombat = false;
            }

            //If player is not alive
            if (!_player.IsAlive())
            {
                _player.Target      = null;
                _player.IsAttacking = false;

                if (_player.SpawnTimer < 0)
                {
                    _player.Spawn();
                }
                else
                {
                    _player.SpawnTimer -= elapsedTime;
                }
            }
        }