Files
RPGLibrary/RPGLibrary.Implementation/AttackCommand.cs
2023-02-28 19:40:12 -08:00

32 lines
932 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<StrengthAttackData> _damageCalculator;
public AttackCommand(Character[] target, StrengthAttackData attackData, IDamageCalculator<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);
}
}
}
}