Exemple #1
0
        public static bool CanBuyImprovement(AgricolaPlayer player, ImprovementActionData data, out ResourceCache[] costs)
        {
            costs = null;
            var card = ((AgricolaGame)player.Game).GetCard(data.Id);

            if (!Curator.IsImprovementAvailable(player, data.Id) ||
                !Curator.CanAffordCard(player, data.Id, data.PaymentOption, out costs) ||
                (card is MinorImprovement && !card.PrerequisitesMet(player)))
            {
                return(false);
            }
            return(true);
        }
Exemple #2
0
 public void TakeImprovementAction(int actionId, ImprovementActionData data)
 {
     TakeAction(actionId, data);
 }
Exemple #3
0
        public static void BuyImprovement(AgricolaPlayer player, ImprovementActionData data, List <GameActionNotice> resultingNotices)
        {
            var improvementData = (ImprovementActionData)data;
            var card            = ((AgricolaGame)player.Game).GetCard(improvementData.Id);
            var cost            = Curator.GetCardCost(player, improvementData.Id, improvementData.PaymentOption);

            if (cost is ResourceCardCost)
            {
                var rcCost = (ResourceCardCost)cost;
                foreach (var resource in rcCost.Resources)
                {
                    if (resource.Type.IsAnimal())
                    {
                        player.RemoveAnimals((AnimalResource)resource.Type, resource.Count);
                    }
                    else
                    {
                        player.AddResource(resource.Type, -resource.Count);
                    }
                }
            }
            else if (cost is ReturnCardCardCost)
            {
                var miCost       = (ReturnCardCardCost)cost;
                var ownedCardIds = player.OwnedCardIds;

                foreach (var id in miCost.Ids)
                {
                    if (ownedCardIds.Contains(id))
                    {
                        ((AgricolaGame)player.Game).ReturnCard(player, id);
                        break;
                    }
                }
            }
            else if (!(cost is FreeCardCost))
            {
                throw new NotImplementedException("Cost type not supported.");
            }

            // Apply the card
            if (card is MajorImprovement)
            {
                ((AgricolaGame)player.Game).AssignMajorImprovement(improvementData.Id, player);
            }
            else if (card is MinorImprovement)
            {
                if (((MinorImprovement)card).PassesLeft)
                {
                    ((AgricolaGame)player.Game).PassCardLeft(player, (MinorImprovement)card);
                }
                else
                {
                    player.PlayCard(card);
                }
            }

            resultingNotices.Add(new GameActionNotice(player.Name, NoticeVerb.PurchaseImprovement.ToString(), new IdPredicate(data.Id)));
            foreach (var evnt in card.OnPlayEvents)
            {
                evnt.Execute(player, null, card, resultingNotices);
            }
        }
Exemple #4
0
 public static bool CanBuyImprovement(AgricolaPlayer player, ImprovementActionData data)
 {
     ResourceCache[] costs;
     return(CanBuyImprovement(player, data, out costs));
 }