Esempio n. 1
0
        /// <summary>
        /// Executes the requested bake operation.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="data"></param>
        public static void Bake(AgricolaPlayer player, ImmutableList <GameEventTrigger> eventTriggers, List <GameActionNotice> resultingNotices, ImmutableArray <ResourceConversionData> data)
        {
            if (data != null && data.Length > 0)
            {
                var bakeInput  = new ResourceCache(Resource.Grain, 0);
                var bakeOutput = new ResourceCache(Resource.Food, 0);
                foreach (var bake in data)
                {
                    var card      = ((AgricolaGame)player.Game).GetCard(bake.Id);
                    var resources = Curator.GetBakeOutput(player, bake.Id, bake.Count);
                    if (resources != null)
                    {
                        player.AddResource(card.BakeProperties.InType, -bake.Count);
                        player.AddResource(resources);

                        bakeInput  = bakeInput.updateCount(bake.Count);
                        bakeOutput = bakeOutput.updateCount(resources.Count);
                    }
                }

                resultingNotices.Add(new GameActionNotice(player.Name, NoticeVerb.Bake.ToString(), new ConversionPredicate(bakeInput, bakeOutput)));

                var trigger = new BakeTrigger(bakeInput.Count);
                ProcessEventTrigger(player, trigger, resultingNotices);
                CheckTriggers(player, eventTriggers, resultingNotices);
            }
        }