Пример #1
0
        private void EnemyAttack(Enemy a_enemy, Player a_player)
        {
            a_player.InCombat = true;

            //Om fienden är en mage och kan kasta en fireball så gör han det.
            if (a_enemy.Type == Model.Enemy.CLASS_MAGE && !a_enemy.IsCastingSpell)
            {
                if (m_enemySpellSystem.CanCastSpell(SpellSystem.FIRE_BALL, a_enemy))
                {
                    m_enemySpellSystem.AddSpell(SpellSystem.FIRE_BALL, a_enemy);
                }
            }
            //Om fienden är bossA och kan kasta fireball eller heal så gör han det.
            if (a_enemy.Type == Model.Enemy.BOSS_A && !a_enemy.IsCastingSpell)
            {
                //Kastar heal om han har förlorat halva livet.
                if (a_enemy.CurrentHp < a_enemy.TotalHp / 2 && m_enemySpellSystem.CanCastSpell(SpellSystem.INSTANT_HEAL, a_enemy) && a_enemy.Type == Model.Enemy.BOSS_A)
                {
                    m_enemySpellSystem.AddSpell(SpellSystem.INSTANT_HEAL, a_enemy);
                }
                else if (m_enemySpellSystem.CanCastSpell(SpellSystem.FIRE_BALL, a_enemy))
                {
                    m_enemySpellSystem.AddSpell(SpellSystem.FIRE_BALL, a_enemy);
                }
            }
            //Om fienden inte kastar en spell så kan han röra sig.
            if (!a_enemy.IsCastingSpell)
            {
                //@Param: Enemy, Vector2 Where to move
                MoveToTarget(a_enemy, new Vector2(a_enemy.Target.ThisUnit.Bounds.X, a_enemy.Target.ThisUnit.Bounds.Y));

                //Bankar och slår
                if (a_enemy.ThisUnit.Bounds.Intersects(a_player.PlayerArea) && a_enemy.IsAlive())
                {
                    if (a_enemy.SwingTime < 0)
                    {
                        //När en fiende slå så minskar skadan med spelarens armor.
                        a_player.CurrentHp -= (a_enemy.AutohitDamage - a_player.Armor);

                        if (a_player.CurrentHp > a_player.TotalHp)
                        {
                            a_player.CurrentHp = a_player.TotalHp;
                        }

                        a_enemy.SwingTime = 20;
                    }
                    else
                    {
                        a_enemy.SwingTime -= 1;
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Method for generating all enemy attacks
        /// </summary>
        /// <param name="enemy">Enemy object</param>
        /// <param name="player">Player object</param>
        private void EnemyAttack(Enemy enemy, Player player)
        {
            player.InCombat = true;

            //If the enemy is a mage and is able to cast a fireball spell
            if (enemy.Type == Model.Enemy.CLASS_MAGE && !enemy.IsCastingSpell)
            {
                if (_enemySpellSystem.CanCastSpell(SpellSystem.FIRE_BALL, enemy))
                {
                    _enemySpellSystem.AddSpell(SpellSystem.FIRE_BALL, enemy);
                }
            }
            //If the enemy is of boss type A and is able to cast a fireball or healing spell
            if (enemy.Type == Model.Enemy.BOSS_A && !enemy.IsCastingSpell)
            {
                //Casting healing spell if hp is below half
                if (enemy.CurrentHp < enemy.TotalHp / 2 && _enemySpellSystem.CanCastSpell(SpellSystem.INSTANT_HEAL, enemy) && enemy.Type == Model.Enemy.BOSS_A)
                {
                    _enemySpellSystem.AddSpell(SpellSystem.INSTANT_HEAL, enemy);
                }
                //Else; casting fireball spell
                else if (_enemySpellSystem.CanCastSpell(SpellSystem.FIRE_BALL, enemy))
                {
                    _enemySpellSystem.AddSpell(SpellSystem.FIRE_BALL, enemy);
                }
            }
            //If the enemy is not casting it is able to move
            if (!enemy.IsCastingSpell)
            {
                MoveToTarget(enemy, new Vector2(enemy.Target.ThisUnit.Bounds.X, enemy.Target.ThisUnit.Bounds.Y));
                //Autohiting
                if (enemy.ThisUnit.Bounds.Intersects(player.PlayerArea) && enemy.IsAlive())
                {
                    if (enemy.SwingTime < 0)
                    {
                        //Reduce dmg in accordance to player armor stats
                        player.CurrentHp -= (enemy.AutohitDamage - player.Armor);

                        //Make sure that the hp does not go over hp maximum
                        if (player.CurrentHp > player.TotalHp)
                        {
                            player.CurrentHp = player.TotalHp;
                        }

                        enemy.SwingTime = 20;
                    }
                    else
                    {
                        enemy.SwingTime -= 1;
                    }
                }
            }
        }