Пример #1
0
        public override void Attack(AFighter target)
        {
            if (_manaPoint >= _spells[0].ManaModifier)
            {
                if (_healingMode)
                {
                    UseSpell(1, this);
                }
                else
                {
                    UseSpell(0, target);
                    OnFighterDied(target);
                }
            }
            else
            {
                OnAttacked(target);

                int damage =
                    Math.Max((_attack + _random.Next(_attack)) - (target.Defense + _random.Next(target.Defense)), 0);

                _manaPoint += _random.Next(1, 3);
                target.TakeDamage(damage);
                OnFighterDied(target);
            }
        }
Пример #2
0
        public override void Attack(AFighter target)
        {
            if (_healthPoint <= _maxHealthPoint / 4 && _objects.Count > 0)
            {
                UseObject(-1, this);
            }
            else
            {
                int damage =
                    Math.Max((_attack + _random.Next(_attack)) - (target.Defense + _random.Next(target.Defense)), 0);

                OnAttacked(target);

                if (target.Mana < 5)
                {
                    _isShieldMode = false;
                }
                else if (_healthPoint <= _maxHealthPoint / 2 || _isShieldMode)
                {
                    _isShieldMode = true;
                    OnActivatedShieldMode();
                    damage /= 2;
                }

                target.TakeDamage(damage);
                OnFighterDied(target);
            }
        }
Пример #3
0
 private void UseSpell(int spellId, AFighter target)
 {
     if (_spells?[spellId] != null)
     {
         OnUsedSpell(_spells[spellId]);
         _spells[spellId].Use(target);
         _manaPoint -= _spells[spellId].ManaModifier;
     }
 }
Пример #4
0
 protected virtual void OnFighterDied(AFighter opponent)
 {
     if (opponent.Life <= 0)
     {
         FighterDied?.Invoke(_name, opponent.Name);
     }
     else if (_healthPoint <= 0)
     {
         FighterDied?.Invoke(opponent.Name, _name);
     }
 }
Пример #5
0
 /*----- Methodes -----*/
 protected void UseObject(int objectId, AFighter target)
 {
     if (_objects != null && _objects.Count > 0)
     {
         if (objectId < 0)
         {
             _objects.First().Use(ref target);
             OnUsedObject(_objects.First());
             _objects.RemoveAt(0);
         }
         else if (objectId < _objects.Count)
         {
             _objects[objectId].Use(ref target);
             OnUsedObject(_objects[objectId]);
             _objects.RemoveAt(objectId);
         }
     }
 }
Пример #6
0
 public abstract void Attack(AFighter target);
Пример #7
0
 /*----- Events Methodes -----*/
 protected virtual void OnAttacked(AFighter target)
 {
     Attacked?.Invoke(this, target);
 }