Пример #1
0
        /// <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);
        }