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); }
public void AddConvertedResources(ResourcesConvertedData converted) { resourcesConverted.Add(converted); }