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; } } } }
/// <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; } } } }