70 lines
2.1 KiB
C#
70 lines
2.1 KiB
C#
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<MemberExpense>());
|
|
|
|
public ExpenseModel CheckThrow(BoardState currentState, PinThrow pinThrow)
|
|
{
|
|
var memberExpenses = new List<MemberExpense>(_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() };
|
|
}
|
|
}
|
|
}
|