示例#1
0
        public override GameAction OnExecute(AgricolaPlayer player, Data.GameActionData data)
        {
            var rsData = (SelectResourcesActionData)data;
            var list   = rsData.Resources.Select(x => new ResourceCache(x, 1)).ToArray();

            ActionService.AssignResources(player, list, ResultingNotices);
            return(this);
        }
        protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            var totalConverted = 0;

            foreach (var resource in ((ResourceConversionTrigger)trigger).TriggeringResourcesConverted)
            {
                totalConverted += resource.AmountConverted;
            }

            var activations  = totalConverted / perNumConverted;
            var newResources = new Dictionary <Resource, int>();

            foreach (var resourceData in Resources)
            {
                if (((AgricolaGame)player.Game).CurrentRound >= resourceData.FromRound)
                {
                    newResources[resourceData.Resource.Type] = resourceData.Resource.Count * activations;
                }
            }

            var nonAnimals = new List <ResourceCache>();
            var animals    = new List <ResourceCache>();

            foreach (var resource in newResources)
            {
                if (resource.Key.IsAnimal())
                {
                    animals.Add(new ResourceCache(resource.Key, resource.Value));
                }
                else
                {
                    nonAnimals.Add(new ResourceCache(resource.Key, resource.Value));
                }
            }


            if (nonAnimals.Count > 0)
            {
                ActionService.AssignResources(player, nonAnimals.ToArray(), resultingNotices);
            }

            if (animals.Count > 0)
            {
                ((AgricolaGame)player.Game).AddInterrupt(new AssignAnimalsAction(player, animals.ToArray(), resultingNotices));
            }
        }
示例#3
0
        protected override void OnExecute(AgricolaPlayer player, GameEventTrigger trigger, Card card, List <GameActionNotice> resultingNotices)
        {
            var nonAnimals = new List <ResourceCache>();
            var animals    = new List <ResourceCache>();

            foreach (var resourceData in Resources)
            {
                int executionCount = 0;
                if (card != null)
                {
                    Object fieldData;
                    ImmutableDictionary <string, object> metadata;
                    if (player.TryGetCardMetadataField(card, GameEvent.MetadataKeyExecutionCount, out metadata, out fieldData))
                    {
                        executionCount = (int)fieldData;
                    }
                }

                if (((AgricolaGame)player.Game).CurrentRound >= resourceData.FromRound &&
                    executionCount >= resourceData.FromExecution &&
                    executionCount < resourceData.UntilExecution)
                {
                    if (resourceData.Resource.Type.IsAnimal())
                    {
                        animals.Add(resourceData.Resource);
                    }
                    else
                    {
                        nonAnimals.Add(resourceData.Resource);
                    }
                }
            }

            if (nonAnimals.Count > 0)
            {
                ActionService.AssignResources(player, nonAnimals.ToArray(), resultingNotices);
            }

            if (animals.Count > 0)
            {
                ((AgricolaGame)player.Game).AddInterrupt(new AssignAnimalsAction(player, animals.ToArray(), resultingNotices));
            }
        }