using GameContract; using GameHandler.Extensions; using GameModel; using GameModel.DeathGame; using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; namespace GameHandler { public class ExpenseHandler { //public delegate void OnExpense(MemberExpense memberExpense); IExpenseRepository _expenseRepository; public ExpenseHandler(IExpenseRepository expenseRepository) { _expenseRepository = expenseRepository; } private int[] PlayersAtGameStart; private int[] PlayersInGame; public void StartGame(int[] playerIds) { PlayersAtGameStart = playerIds; } private ExpenseModel _expenseModel = new ExpenseModel(Array.Empty()); public ExpenseModel CheckThrow(BoardState currentState, PinThrow pinThrow) { var memberExpenses = new List(_expenseModel.MemberExpenses); var triggers = pinThrow.GetExpenseTriggers(currentState); if (currentState.ThrowMode == ThrowMode.Decrease && currentState.PinPicture.AllUp) { } if (pinThrow.IsCircle) { var inversePlayers = PlayersAtGameStart.Where(_ => _ != pinThrow.PlayerId); var destExpenses = _expenseRepository.GetAll().Where(_ => _.ExpenseTriggers.Any(tr => tr == ExpenseTrigger.Circle)); 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)); } } } return _expenseModel with { MemberExpenses = memberExpenses.ToArray() }; } } }