public int Attack(Entity target, IOffensive offense) { var calculatedDamages = CalculateDamages(target, offense); target.TakeDamages(calculatedDamages); return(calculatedDamages); }
private int CharacteristicDamages(IOffensive offensive, int damages) { double result = damages; switch (offensive.Effect) { case EffectType.Blunt: result = result + Strength * 1.7 + Dexterity * 1.2; break; case EffectType.Sharp: result = result + Strength * 1.3 + Dexterity * 1.3 + Intelligence * 1.1; break; case EffectType.Thrust: result = result + Strength * 1.1 + Dexterity * 1.3 + Intelligence * 1.3; break; case EffectType.Fire: result = result + Strength * 1.2 + Intelligence * 1.7; break; case EffectType.Ice: result = result + Strength * 1.1 + Dexterity * 1.1 + Intelligence * 1.5; break; case EffectType.Wind: result = result + Dexterity * 1.2 + Intelligence * 1.7; break; default: throw new ArgumentOutOfRangeException($"Unknown {offensive.Effect}"); } return((int)result); }
private int CalculateDamages(Entity target, IOffensive offensive) { var damages = offensive.RandomDamages(); damages += MultiplierDamages(target, offensive, damages); damages += CharacteristicDamages(offensive, damages); return(damages); }
public void Equip(IOffensive offensive) { _offensives.Add(offensive); }
private int MultiplierDamages(Entity target, IOffensive offense, int damages) { var effectMultiplier = target.Multipliers.Where(m => m.EffectType == offense.Effect).Select(m => m.Value).Sum(); return(damages * effectMultiplier / 100); }