コード例 #1
0
ファイル: ActionService.cs プロジェクト: zerowhale/monkey
        public static void Cook(AgricolaPlayer player, ImmutableList <GameEventTrigger> eventTriggers, ResourceConversionData[] data, List <GameActionNotice> resultingNotices)
        {
            var availableConversions = Curator.GetAnytimeResourceConversions(player);

            var trigger = new ResourceConversionTrigger();

            foreach (var conversion in data)
            {
                var conversionDefinition = availableConversions.Where(x => x.Id == conversion.Id &&
                                                                      x.InType == conversion.InType && x.InAmount == conversion.InAmount &&
                                                                      x.OutType == conversion.OutType).OrderByDescending(a => a.OutAmount).FirstOrDefault();


                if (!conversionDefinition.InType.IsAnimal())
                {
                    var inputCache  = new ResourceCache(conversionDefinition.InType, -conversion.Count);
                    var outputCache = new ResourceCache(conversionDefinition.OutType, (conversion.Count / conversionDefinition.InAmount) * conversionDefinition.OutAmount);
                    // Deduct the cost
                    player.AddResource(inputCache);

                    if (!conversionDefinition.OutType.IsAnimal())
                    {
                        // Add the converted resources
                        player.AddResource(outputCache);
                    }
                    else
                    {
                        ((AgricolaGame)player.Game).AddInterrupt(new AssignAnimalsAction(player, (AnimalResource)conversionDefinition.OutType, conversionDefinition.OutAmount, resultingNotices));
                    }

                    inputCache = new ResourceCache(inputCache.Type, inputCache.Count * -1);
                    resultingNotices.Add(new GameActionNotice(player.Name, NoticeVerb.Converted.ToString(), new ConversionPredicate(inputCache, outputCache)));

                    trigger.AddConvertedResources(ResourcesConvertedData.FromResourceConversion(conversionDefinition, conversion.Count / conversionDefinition.InAmount));
                }
            }

            ProcessEventTrigger(player, trigger, resultingNotices);

            CheckTriggers(player, eventTriggers, resultingNotices);
        }
コード例 #2
0
 public void AddConvertedResources(ResourcesConvertedData converted)
 {
     resourcesConverted.Add(converted);
 }