KoogleV4/GameHandler/ExpenseHandler.cs

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() };
}
}
}