private void ExecuteBonusProduction(BonusProduction bonusProduction, IPlayer player) { if (!_isProducedByRoleOwner[bonusProduction.GoodType]) { throw new GameException($"{bonusProduction.GoodType} was not produced"); } var zeroOrOneGoodList = Game.Goods.Where(g => g.Type == bonusProduction.GoodType).Take(1).ToList(); Game.Goods.RemoveAll(zeroOrOneGoodList.Contains); player.AddGoods(zeroOrOneGoodList); SetPlayerPhase(player, EndedPhase); }
private int Produce <TGood>(IPlayer player) where TGood : IGood { var countOfWorkingPlantation = GetCountOfWorkingPlantationOfType <TGood>(player); var sumOfBuildingWorkers = typeof(TGood) == typeof(Corn) ? countOfWorkingPlantation : GetSumOfBuildingWorkersOfType <TGood>(player); var producedBarrels = Game.Goods.OfType <TGood>().Take(Math.Min(sumOfBuildingWorkers, countOfWorkingPlantation)) .Select(g => g as IGood).ToList(); Game.Goods.RemoveAll(producedBarrels.Contains); player.AddGoods(producedBarrels); return(producedBarrels.Count); }