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); } }
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); } }
private void UseSpell(int spellId, AFighter target) { if (_spells?[spellId] != null) { OnUsedSpell(_spells[spellId]); _spells[spellId].Use(target); _manaPoint -= _spells[spellId].ManaModifier; } }
protected virtual void OnFighterDied(AFighter opponent) { if (opponent.Life <= 0) { FighterDied?.Invoke(_name, opponent.Name); } else if (_healthPoint <= 0) { FighterDied?.Invoke(opponent.Name, _name); } }
/*----- 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); } } }
public abstract void Attack(AFighter target);
/*----- Events Methodes -----*/ protected virtual void OnAttacked(AFighter target) { Attacked?.Invoke(this, target); }