32 lines
954 B
C#
32 lines
954 B
C#
using RPGLibrary.Abstraction.Services;
|
|
using RPGLibrary.Command;
|
|
|
|
namespace RPGLibrary.Implementation.Command
|
|
{
|
|
public class AttackCommand : ICommand<Character>
|
|
{
|
|
private readonly Character[] _target;
|
|
private readonly StrengthAttackData _attackData;
|
|
private readonly IDamageCalculator<Character, StrengthAttackData> _damageCalculator;
|
|
|
|
public AttackCommand(Character[] target, StrengthAttackData attackData, IDamageCalculator<Character, StrengthAttackData> damageCalculator)
|
|
{
|
|
_target = target;
|
|
_attackData = attackData;
|
|
_damageCalculator = damageCalculator;
|
|
}
|
|
|
|
|
|
public async IAsyncEnumerable<Character> Execute()
|
|
|
|
{
|
|
foreach (var character in _target)
|
|
{
|
|
var damage = _damageCalculator.Calculate(character, _attackData);
|
|
var newCurrentHP = new HP(character.HP.Value - damage, character.HP.Maximum);
|
|
yield return character.With(newCurrentHP);
|
|
}
|
|
}
|
|
}
|
|
|
|
} |