From 2bc78fc7b1f522576b103faa7c377f9c6ca6bfef Mon Sep 17 00:00:00 2001 From: Christian Kauer Date: Thu, 28 Dec 2023 16:46:52 +0100 Subject: [PATCH] dev --- .../GameHandler/DeathGameHandlerTests.cs | 23 +++++++++---- GameHandler/ExpenseHandler.cs | 34 +++++++------------ GameHandler/GameHandler/DeathGameHandler.cs | 2 +- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs b/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs index 68d1d94..9a6a394 100644 --- a/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs +++ b/GameHandler.UnitTests/GameHandler/DeathGameHandlerTests.cs @@ -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(); + _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(); + _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); } diff --git a/GameHandler/ExpenseHandler.cs b/GameHandler/ExpenseHandler.cs index c0a1467..dbd61be 100644 --- a/GameHandler/ExpenseHandler.cs +++ b/GameHandler/ExpenseHandler.cs @@ -31,10 +31,18 @@ namespace GameHandler } List 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 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 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() }; } diff --git a/GameHandler/GameHandler/DeathGameHandler.cs b/GameHandler/GameHandler/DeathGameHandler.cs index e731a1a..b5c0684 100644 --- a/GameHandler/GameHandler/DeathGameHandler.cs +++ b/GameHandler/GameHandler/DeathGameHandler.cs @@ -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();