public static BuildUpgrade SetUpgrade(BuildUpgrade bu, GameResource currentCost)
        {
            var curRes = bu.StorageResources.Current;

            var enoughtRes = MaterialResource.EnoughResourses(curRes, currentCost);

            if (!enoughtRes)
            {
                return(bu);
            }

            var newResourse = MaterialResource.CalcNewResoursesFromBuy(curRes, currentCost);

            var upgradedData = new BuildUpgrade
            {
                StorageResources =
                    bu.StorageResources.SetStorageResource(newResourse, bu.StorageResources.Max),
                Progress = new ItemProgress
                {
                    Level      = bu.Progress.Level,
                    IsProgress = true,
                    Duration   = currentCost.TimeProduction
                },
                NativeName = bu.NativeName
            };


            return(upgradedData);
        }
        /// <summary>
        ///     Вычисляет данные для записи нового эллемента очереди юнита на мезере ил планете
        /// </summary>
        /// <param name="unitType">Native name Unit</param>
        /// <param name="count">Желаемое количество для покупки</param>
        /// <param name="resource">текушие ресурсы пользователя</param>
        /// <param name="unit">тип юнита который мы покупаем</param>
        /// <param name="resultPrice">Итоговая стоимость пачки с учетом проверки на нехватку ресурсов</param>
        /// <param name="unitTurnModel">новый эллемент очереди (еще не просумированный с основной очередью)</param>
        private static void InitializeUnitTurn(UnitType unitType, int count, StorageResources resource, UnitModel unit, out MaterialResource resultPrice, out TurnedUnit unitTurnModel)
        {
            var basePrice = unit.BasePrice;

            //вычисляем стоимость пачки
            var price = MaterialResource.CalcUnitsPrice(basePrice, count);
            int resultCount;

            //проверяем хватает ли ресурсов
            if (MaterialResource.EnoughResourses(resource.Current, price))
            {
                resultCount = count;
                resultPrice = price;
            }
            else
            {
                var newCount = CalculateMaxCount(basePrice, resource.Current);
                if (newCount == 0)
                {
                    throw new Exception(Error.NotEnoughResources);
                }
                resultCount = newCount;
                resultPrice = MaterialResource.CalcUnitsPrice(basePrice, newCount);
            }

            //устанавливаем модель
            var time = UnixTime.UtcNow();

            unitTurnModel = new TurnedUnit
            {
                TotalCount      = resultCount,
                DateCreate      = time,
                UnitType        = unitType,
                DateLastUpgrade = time
            };
        }