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)); } }
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)); } }