Fix typing

This commit is contained in:
2023-02-28 19:40:12 -08:00
parent c13f80e2ab
commit 8391a47e4e
5 changed files with 17 additions and 20 deletions

View File

@@ -1,10 +1,9 @@
using RPGLibrary.Abstraction.Character; using RPGLibrary.Abstraction.Services;
using RPGLibrary.Abstraction.Services;
using RPGLibrary.Command; using RPGLibrary.Command;
namespace RPGLibrary.Implementation.Command namespace RPGLibrary.Implementation.Command
{ {
public class AttackCommand : ICommand public class AttackCommand : ICommand<Character>
{ {
private readonly Character[] _target; private readonly Character[] _target;
private readonly StrengthAttackData _attackData; private readonly StrengthAttackData _attackData;
@@ -18,11 +17,12 @@ namespace RPGLibrary.Implementation.Command
} }
public async IAsyncEnumerable<ICharacter> Execute() public async IAsyncEnumerable<Character> Execute()
{ {
foreach (var character in _target) foreach (var character in _target)
{ {
var damage = _damageCalculator.Calculate(character, (dynamic)_attackData); var damage = _damageCalculator.Calculate(character, _attackData);
var newCurrentHP = new HP(character.HP.Value - damage, character.HP.Maximum); var newCurrentHP = new HP(character.HP.Value - damage, character.HP.Maximum);
yield return character.With(newCurrentHP); yield return character.With(newCurrentHP);
} }

View File

@@ -25,7 +25,7 @@ namespace RPGLibrary.Implementation
return $"{HP}, {Strength}, {Defense}"; return $"{HP}, {Strength}, {Defense}";
} }
public ICharacter With(HP hp) => new Character(Name, hp, Strength, Defense); public Character With(HP hp) => new Character(Name, hp, Strength, Defense);
} }
} }

View File

@@ -16,13 +16,13 @@ namespace RPGLibrary.Test
var attackData = new StrengthAttackData(source, source.Strength); var attackData = new StrengthAttackData(source, source.Strength);
var command = new AttackCommand(new[] { target }, attackData, damageCalculator); var command = new AttackCommand(new[] { target }, attackData, damageCalculator);
var commands = new[] { command }; var commands = new[] { command };
var results = CommandExecuter.Singleton.Execute(commands, new CancellationToken()); var results = CommandExecuter.Singleton.Execute<Character>(commands, new CancellationToken());
var actual = new List<Character>(); var actual = new List<Character>();
await foreach (var resultOfCommand in results) await foreach (var resultOfCommand in results)
{ {
await foreach (var resultOfAttack in resultOfCommand) await foreach (var resultOfAttack in resultOfCommand)
actual.Add((Character)resultOfAttack); actual.Add(resultOfAttack);
} }
@@ -45,13 +45,13 @@ namespace RPGLibrary.Test
var command = new AttackCommand(target, attackData, damageCalculator); var command = new AttackCommand(target, attackData, damageCalculator);
var commands = new[] { command }; var commands = new[] { command };
var results = CommandExecuter.Singleton.Execute(commands, new CancellationToken()); var results = CommandExecuter.Singleton.Execute<Character>(commands, new CancellationToken());
var actual = new List<Character>(); var actual = new List<Character>();
await foreach (var resultOfCommand in results) await foreach (var resultOfCommand in results)
{ {
await foreach (var resultOfAttack in resultOfCommand) await foreach (var resultOfAttack in resultOfCommand)
actual.Add((Character)resultOfAttack); actual.Add(resultOfAttack);
} }
@@ -78,14 +78,14 @@ namespace RPGLibrary.Test
var commandC = new AttackCommand(target, attackData, damageCalculator); var commandC = new AttackCommand(target, attackData, damageCalculator);
var commands = new[] { commandA, commandB, commandC }; var commands = new[] { commandA, commandB, commandC };
var results = CommandExecuter.Singleton.Execute(commands, new CancellationToken()); var results = CommandExecuter.Singleton.Execute<Character>(commands, new CancellationToken());
await foreach (var resultOfCommand in results) await foreach (var resultOfCommand in results)
{ {
var characterList = new List<Character>(); var characterList = new List<Character>();
await foreach (var r in resultOfCommand) await foreach (var r in resultOfCommand)
{ {
characterList.Add((Character)r); characterList.Add(r);
} }
Assert.That(characterList[0].HP.Value, Is.EqualTo(32)); Assert.That(characterList[0].HP.Value, Is.EqualTo(32));

View File

@@ -1,5 +1,4 @@
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using RPGLibrary.Abstraction.Character;
namespace RPGLibrary.Command namespace RPGLibrary.Command
{ {
@@ -12,8 +11,8 @@ namespace RPGLibrary.Command
private CommandExecuter() { } private CommandExecuter() { }
public async IAsyncEnumerable<IAsyncEnumerable<ICharacter>> Execute( public async IAsyncEnumerable<IAsyncEnumerable<T>> Execute<T>(
IEnumerable<ICommand> commands, IEnumerable<ICommand<T>> commands,
[EnumeratorCancellation] CancellationToken ct) [EnumeratorCancellation] CancellationToken ct)
{ {
foreach (var command in commands) foreach (var command in commands)

View File

@@ -1,10 +1,8 @@
using RPGLibrary.Abstraction.Character; namespace RPGLibrary.Command
namespace RPGLibrary.Command
{ {
public interface ICommand public interface ICommand<T>
{ {
public IAsyncEnumerable<ICharacter> Execute(); public IAsyncEnumerable<T> Execute();
} }
} }