This commit is contained in:
Christian Kauer 2023-12-28 16:46:52 +01:00
parent 527975e977
commit 2bc78fc7b1
3 changed files with 30 additions and 29 deletions

View File

@ -74,22 +74,33 @@ namespace GameHandler.UnitTests.DeathGame
public void InvalidFirstThrow_RaisesExpense()
{
var gm = _gh.InitGameModel(_players, _settings);
Coffin? failedCoffin = null;
_gh.FirstThrowFailed += (trigger) => failedCoffin = trigger;
int failedCoffinPlayerId = 0;
ExpenseTrigger[] failed = Array.Empty<ExpenseTrigger>();
_gh.GameExpenseOccured += (sender, arg) =>
{
failed = ((GameExenseEventArgs)arg).Triggers;
failedCoffinPlayerId = ((GameExenseEventArgs)arg).PlayerId;
};
var newGm = _gh.CalcNextModel(gm, 2, true, false);
Assert.That(failedCoffin.PlayerId, Is.EqualTo(newGm.Coffins.Last().PlayerId));
Assert.That(failedCoffinPlayerId, Is.EqualTo(newGm.Coffins.Last().PlayerId));
}
[Test]
public void ValidFirstThrow_DoesNotRaisesExpense()
{
var gm = _gh.InitGameModel(_players, _settings);
Coffin? failedCoffin = null;
_gh.FirstThrowFailed += (trigger) => failedCoffin = trigger;
int failedCoffinPlayerId = 0;
ExpenseTrigger[] failed = Array.Empty<ExpenseTrigger>();
_gh.GameExpenseOccured += (sender, arg) =>
{
failed = ((GameExenseEventArgs)arg).Triggers;
failedCoffinPlayerId = ((GameExenseEventArgs)arg).PlayerId;
};
var newGm = _gh.CalcNextModel(gm, 3, true, false);
Assert.That(failedCoffin, Is.Null);
Assert.That(failed, Is.Empty);
Assert.That(failedCoffinPlayerId, Is.Zero);
}

View File

@ -31,10 +31,18 @@ namespace GameHandler
}
List<MemberExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
var triggers = gameExenseEventArgs.Triggers;
var destExpenses = _expenseRepository.GetAll().Where(_ => _.ExpenseTriggers.Any(et => gameExenseEventArgs.Triggers.Any(et2 => et2 == et)));
AssignExpenses(gameExenseEventArgs.PlayerId, gameExenseEventArgs.PlayerIds, memberExpenses, triggers);
var inversePlayers = gameExenseEventArgs.PlayerIds.Where(_ => _ != gameExenseEventArgs.PlayerId);
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
}
private void AssignExpenses(int playerId, int[] playerIds, List<MemberExpense> memberExpenses, ExpenseTrigger[] triggers)
{
var destExpenses = _expenseRepository.GetAll().Where(_ => _.ExpenseTriggers.Any(et => triggers.Any(et2 => et2 == et)));
var inversePlayers = playerIds.Where(_ => _ != playerId);
foreach (var expense in destExpenses)
{
if (expense.IsInverse)
@ -46,11 +54,9 @@ namespace GameHandler
}
else
{
memberExpenses.Add(MemberExpense.Create(gameExenseEventArgs.PlayerId, expense));
memberExpenses.Add(MemberExpense.Create(playerId, expense));
}
}
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
}
public ExpenseModel CheckThrow(BoardState currentState, PinThrow pinThrow, int[] PlayerIds, ExpenseModel expenseModelToAppend = null)
@ -63,23 +69,7 @@ namespace GameHandler
List<MemberExpense> memberExpenses = PrepareResult(ref expenseModelToAppend);
var triggers = pinThrow.GetExpenseTriggers(currentState);
var destExpenses = _expenseRepository.GetAll().Where(_ => _.ExpenseTriggers.Any(et => triggers.Any(et2 => et2 == et)));
var inversePlayers = PlayerIds.Where(_ => _ != pinThrow.PlayerId);
foreach (var expense in destExpenses)
{
if (expense.IsInverse)
{
foreach (var player in inversePlayers)
{
memberExpenses.Add(MemberExpense.Create(player, expense));
}
}
else
{
memberExpenses.Add(MemberExpense.Create(pinThrow.PlayerId, expense));
}
}
AssignExpenses(pinThrow.PlayerId, PlayerIds, memberExpenses, triggers);
return expenseModelToAppend with { MemberExpenses = memberExpenses.ToArray() };
}

View File

@ -79,7 +79,7 @@ namespace GameHandler.DeathGame
return CalcNextModel(gameModel as DeathGameModel, pinThrow.PinCount, isTrowIntoAllPins, boardCleared);
}
private DeathGameModel CalcNextModel(DeathGameModel gm, int pinCount, bool isTrowIntoAllPins, bool boardCleared)
public DeathGameModel CalcNextModel(DeathGameModel gm, int pinCount, bool isTrowIntoAllPins, bool boardCleared)
{
var current = gm.Coffins.First();
var next = gm.Coffins.Skip(1).First();