/// <summary> /// Ensures that the requested animal assignment data is valid. /// </summary> /// <param name="player"></param> /// <param name="data"></param> /// <param name="newAnimals"></param> /// <returns></returns> public static bool CanAssignAnimals(AgricolaPlayer player, AnimalCacheActionData data, AnimalManager manager, Dictionary <AnimalResource, int> newAnimals) { var requestedTotals = AnimalHousingData.GetTotals(data.Assignments); requestedTotals[AnimalResource.Sheep] += data.Free[AnimalResource.Sheep] + data.Cook[AnimalResource.Sheep]; requestedTotals[AnimalResource.Boar] += data.Free[AnimalResource.Boar] + data.Cook[AnimalResource.Boar]; requestedTotals[AnimalResource.Cattle] += data.Free[AnimalResource.Cattle] + data.Cook[AnimalResource.Cattle]; var currentSheep = player.Farmyard.AnimalCount(AnimalResource.Sheep); // If the incoming total of animals in all assignments is different then the currently // assigned total animals plus the new animals being taken from the cache return false. if (requestedTotals[AnimalResource.Sheep] != currentSheep + (newAnimals != null && newAnimals.ContainsKey(AnimalResource.Sheep) ? newAnimals[AnimalResource.Sheep] : 0) || requestedTotals[AnimalResource.Boar] != player.Farmyard.AnimalCount(AnimalResource.Boar) + (newAnimals != null && newAnimals.ContainsKey(AnimalResource.Boar) ? newAnimals[AnimalResource.Boar] : 0) || requestedTotals[AnimalResource.Cattle] != player.Farmyard.AnimalCount(AnimalResource.Cattle) + (newAnimals != null && newAnimals.ContainsKey(AnimalResource.Cattle) ? newAnimals[AnimalResource.Cattle] : 0)) { return(false); } if (!manager.AreAssignmentsValid(data.Assignments)) { return(false); } var cooking = false; foreach (var count in data.Cook.Values) { if (count > 0) { cooking = true; } } if (cooking && !Curator.CanCook(player)) { return(false); } return(true); }