예제 #1
0
 [Timeout(25)] //Assert
 public void GetModel_ValidLevel_FastRecalculations()
 {
     for (var i = 1; i <= 10; i++)
     {
         WarshipPowerScale.GetModel(i);
     }
 }
        public bool CanAPurchaseBeMade(int softCurrency, int warshipPowerLevel, int warshipPowerPoints,
                                       out FaultReason?faultReason)
        {
            // Console.WriteLine($"{nameof(warshipPowerLevel)} {warshipPowerLevel} {nameof(warshipPowerPoints)} {warshipPowerPoints}");
            //Достать цену улучшения
            WarshipImprovementModel improvementModel = WarshipPowerScale.GetModel(warshipPowerLevel);

            if (improvementModel == null)
            {
                Console.WriteLine("У корабля уже максимальный уровень");
                faultReason = FaultReason.MaximumLevelAlreadyReached;
                return(false);
            }

            if (softCurrency < improvementModel.SoftCurrencyCost)
            {
                faultReason = FaultReason.InsufficientSoftCurrency;
                return(false);
            }

            if (warshipPowerPoints < improvementModel.PowerPointsCost)
            {
                faultReason = FaultReason.InsufficientWarshipPowerPoints;
                return(false);
            }

            faultReason = null;
            return(true);
        }
예제 #3
0
        private async Task <ShopModel> InitWppModel(ShopModel shopModel)
        {
            // log.Debug("Ожидание спавна кораблей");
            await MyTaskExtensions.WaitUntil(lobbyEcsController.IsWarshipsCreationCompleted);

            // log.Debug(lobbyEcsController.GetCountOfSpawnedWarships());
            // log.Debug("Ожидание спавна закончено");
            var products = shopModel.UiSections.Select(section => section.UiItems)
                           .SelectMany(item => item)
                           .SelectMany(item => item)
                           .ToList()
            ;

            // log.Debug("Кол-во продуктов "+products.Count());
            foreach (ProductModel productModel in products)
            {
                if (productModel.ResourceTypeEnum == ResourceTypeEnum.WarshipPowerPoints)
                {
                    // log.Debug("Упаковка вспомогательной информации для продукта с id "+productModel.Id);
                    try
                    {
                        WarshipPowerPointsProductModel model = ZeroFormatterSerializer
                                                               .Deserialize <WarshipPowerPointsProductModel>(productModel.SerializedModel);

                        // log.Debug($"{nameof(model.Increment)} {model.Increment}" +
                        //           $"{nameof(model.WarshipId)} {model.WarshipId}"+
                        //           $"{nameof(model.SupportClientModel)} {model.SupportClientModel}"+
                        //           $"{nameof(model.WarshipTypeEnum)} {model.WarshipTypeEnum}"+
                        //           "");
                        int powerLevel = lobbyEcsController.GetWarshipPowerLevel(model.WarshipTypeEnum);
                        var powerModel = WarshipPowerScale.GetModel(powerLevel);

                        var supportModel = new WppSupportClientModel()
                        {
                            StartValue       = lobbyEcsController.GetWarshipPowerPoints(model.WarshipTypeEnum),
                            WarshipSkinName  = lobbyEcsController.GetSkinName(model.WarshipTypeEnum),
                            MaxValueForLevel = powerModel.PowerPointsCost
                        };

                        model.SupportClientModel = supportModel;

                        productModel.SerializedModel = ZeroFormatterSerializer.Serialize(model);
                    }
                    catch (Exception e)
                    {
                        log.Error(e.Message + " " + e.StackTrace);
                        return(null);
                    }
                }
            }

            return(shopModel);
        }
예제 #4
0
        public void GetModel_ValidLevel_OkResult(int powerLevel, int expectedPowerPoints, int expectedSoftCurrency)
        {
            //Arrange
            WarshipImprovementModel model;

            //Act
            model = WarshipPowerScale.GetModel(powerLevel);

            //Assert
            Assert.AreEqual(expectedPowerPoints, model.PowerPointsCost, "Wrong power points.");
            Assert.AreEqual(expectedSoftCurrency, model.SoftCurrencyCost, "Wrong soft currency.");
        }
        public WarshipImprovementModel GetImprovementModel(int warshipPowerLevel)
        {
            WarshipImprovementModel improvementModel = WarshipPowerScale.GetModel(warshipPowerLevel);

            return(improvementModel);
        }
예제 #6
0
        private void UpdateData(WarshipDto warshipDto)
        {
            //Установить название корабля
            warshipsUiStorage.warshipName.text = warshipDto.WarshipName.ToUpper();
            //Установить тип корабля
            warshipsUiStorage.warshipTypeName.text = warshipDto.CombatRoleName;
            //Установить ранг корабля
            WarshipRankModel rankModel = WarshipRatingScaleStorage.Instance.GetRankModel(warshipDto.Rating);

            warshipsUiStorage.warshipRank.text = rankModel.currentRank.ToString();
            //Установить слайдер для рейтинга
            warshipsUiStorage.trophySlider.value = rankModel.rankProgress;
            //Установить рейтинг корабля
            warshipsUiStorage.trophyText.text = rankModel.ToString();
            //Установить описание корабля
            warshipsUiStorage.warshipDescription.text = warshipDto.Description;
            //Установить уровень силы
            warshipsUiStorage.warshipPowerLevel.text = "POWER " + warshipDto.PowerLevel;
            //TODO Установить характеристики корабля (атаку, защиту, скорость или что там)

            // log.Debug($"attack name "+warshipDto.WarshipCharacteristics.AttackName);
            // log.Debug($"ultimate name "+warshipDto.WarshipCharacteristics.UltimateName);

            var healthParameter = warshipDto.WarshipCharacteristics.DefenceParameters
                                  .SingleOrDefault(p => p.Name == "Health");

            warshipsUiStorage.healthText.text = healthParameter != null?healthParameter.GetCurrentValue(warshipDto.PowerLevel).ToString("0.###") : "undefined";

            var movementSpeed = warshipDto.WarshipCharacteristics.DefenceParameters
                                .SingleOrDefault(p => p.Name == "Movement speed");

            warshipsUiStorage.velocityText.text = movementSpeed != null?movementSpeed.GetCurrentValue(warshipDto.PowerLevel).ToString("0.###") : "undefined";

            warshipsUiStorage.attackNameText.text   = warshipDto.WarshipCharacteristics.AttackName;
            warshipsUiStorage.ultimateNameText.text = warshipDto.WarshipCharacteristics.UltimateName;

            //Проверить на кол-во ресурсов для перехода на новый уровень
            int softCurrency    = lobbyEcsController.GetSoftCurrency();
            var model           = WarshipPowerScale.GetModel(warshipDto.PowerLevel);
            int improvementCost = model.SoftCurrencyCost;
            int maxPowerPoints  = model.PowerPointsCost;

            bool showGreenScale = softCurrency >= improvementCost && warshipDto.PowerPoints >= maxPowerPoints;

            Text powerPointsValueText;

            //Показать нужную шкалу. (Красную или зелёную)
            if (showGreenScale)
            {
                powerPointsValueText = warshipsUiStorage.greenPowerPointsValueText;
                warshipsUiStorage.redScale.SetActive(false);
                warshipsUiStorage.greenScale.SetActive(true);
            }
            else
            {
                warshipsUiStorage.redScale.SetActive(true);
                warshipsUiStorage.greenScale.SetActive(false);
                powerPointsValueText = warshipsUiStorage.powerValueText;
            }

            //Установить кол-во очков силы для текущего уровня
            powerPointsValueText.text = warshipDto.PowerPoints + "/" + maxPowerPoints;

            //Установить слайдер для кол-ва очков силы
            warshipsUiStorage.powerSlider.maxValue = maxPowerPoints;
            warshipsUiStorage.powerSlider.value    = warshipDto.PowerPoints;

            //Установить цену улучшения
            warshipsUiStorage.improveButtonCost.text = improvementCost.ToString();
            //Установить слушатель для кнопки улучшения
            warshipsUiStorage.improveButton.onClick.RemoveAllListeners();
            warshipsUiStorage.improveButton.onClick.AddListener(() =>
            {
                if (warshipDto.PowerPoints < maxPowerPoints)
                {
                    UiSoundsManager.Instance().PlayError();
                    string message = "The warship doesn't have enough power points.";
                    textTooltip.Show(message);
                }
                else if (softCurrency < improvementCost)
                {
                    UiSoundsManager.Instance().PlayError();
                    string message = "There's not enough coins to improve the spaceship.";
                    textTooltip.Show(message);
                }
                else
                {
                    UiSoundsManager.Instance().PlayClick();
                    //показать окно покупки улучшения
                    lobbyEcsController.ShowWarshipImprovementModalWindow(warshipDto);
                }
            });

            string oldSkinName = warshipDto.GetCurrentSkinName();

            //Установить слушатель для кнопки выбора корабля
            warshipsUiStorage.chooseButton.onClick.RemoveAllListeners();
            warshipsUiStorage.chooseButton.onClick.AddListener(() =>
            {
                CurrentWarshipTypeStorage.WriteWarshipType(warshipDto.WarshipTypeEnum);
                // log.Debug("Слушатель работает");
                UiSoundsManager.Instance().PlayClick();
                //заменить скин если нужно
                int actualSkinIndex = lobbyUiContext.warshipOverviewCurrentSkinModel.skinIndex;
                string newSkinName  = warshipDto.GetCurrentSkinName();
                if (oldSkinName != newSkinName)
                {
                    warshipDto.CurrentSkinIndex = actualSkinIndex;
                    int warshipId = warshipDto.Id;
                    var task      = new SkinChangingNotifier().ChangeSkinOnServerAsync(warshipId, newSkinName);
                }
                else
                {
                    log.Info("Скин не был изменён");
                }
                //изменить тип текущего корабля

                lobbyUiContext.ReplaceCurrentWarshipTypeEnum(warshipDto.WarshipTypeEnum);
                //заменть компонент корабля
                lobbyUiContext.CreateEntity().AddWarship(warshipDto);
                //выключить меню обзора корабля
                lobbyUiContext.CreateEntity().messageDisableWarshipOverviewUiLayer = true;
                //выключить меню со списком кораблей
                lobbyUiContext.CreateEntity().messageDisableWarshipListUiLayer = true;
            });

            //Установить стоимость для кнопки покупки улучшения
            warshipsUiStorage.popupWindowCostText.text = improvementCost.ToString();

            //Установить слушатель для кнопки покупки улучшения
            warshipsUiStorage.popupWindowBuyButton.onClick.RemoveAllListeners();
            warshipsUiStorage.popupWindowBuyButton.onClick.AddListener(() =>
            {
                //todo показать окно подтверждения
            });

            //Установить слушатель для меню с характеристиками корабля
            warshipsUiStorage.warshipCharacteristicsButton.onClick.RemoveAllListeners();
            warshipsUiStorage.warshipCharacteristicsButton.onClick.AddListener(() =>
            {
                if (warshipDto.PowerPoints < maxPowerPoints || softCurrency < improvementCost)
                {
                    UiSoundsManager.Instance().PlayClick();
                    lobbyEcsController.ShowWarshipCharacteristics(warshipDto);
                }
                else
                {
                    UiSoundsManager.Instance().PlayClick();
                    //показать окно покупки улучшения
                    lobbyEcsController.ShowWarshipImprovementModalWindow(warshipDto);
                }
            });
        }
예제 #7
0
        private void CreateItems(List <WarshipDto> warshipDtos)
        {
            for (int index = 0; index < warshipDtos.Count; index++)
            {
                GameObject prefab = Resources.Load <GameObject>("Prefabs/LobbyWarshipsList/Image_WarshipListItem")
                                    ?? throw new Exception("Не удалось найти префаб");
                Transform  parent = warshipsUiStorage.warshipsListBackgroundGameObject.transform;
                GameObject item   = Object.Instantiate(prefab, parent, false);

                //Взять элемент
                WarshipDto warshipDto = warshipDtos[index];

                //Установить картинку
                string skinName = warshipDto.GetCurrentSkinName();
                Image  image    = item.transform.Find("Image_WarshipPreview").GetComponent <Image>();
                image.sprite = Resources.Load <Sprite>($"SkinPreview/{skinName}");
                if (image.sprite == null)
                {
                    log.Error($"Не найден скин skinName {skinName}");
                }

                //Установить название корабля
                Text warshipNameText = item.transform.Find("Image_WarshipPreview/Text_WarshipName").GetComponent <Text>();
                warshipNameText.text = warshipDto.WarshipName.ToUpper();

                //Установить уровень силы
                Text warshipPowerText = item.transform.Find("Image_WarshipPreview/Text_Power").GetComponent <Text>();
                warshipPowerText.text = "POWER " + warshipDto.PowerLevel;


                //Проверить на кол-во ресурсов для перехода на новый уровень
                int softCurrency    = lobbyEcsController.GetSoftCurrency();
                var model           = WarshipPowerScale.GetModel(warshipDto.PowerLevel);
                int improvementCost = model.SoftCurrencyCost;
                int maxPowerPoints  = model.PowerPointsCost;

                bool showImproveAnimation = softCurrency >= improvementCost && warshipDto.PowerPoints >= maxPowerPoints;

                if (showImproveAnimation)
                {
                    item.transform.Find("Empty_PowerValueRoot").gameObject.SetActive(false);
                    item.transform.Find("Empty_FilledPowerScale").gameObject.SetActive(true);
                }
                else
                {
                    item.transform.Find("Empty_PowerValueRoot").gameObject.SetActive(true);
                    item.transform.Find("Empty_FilledPowerScale").gameObject.SetActive(false);

                    //Установить кол-во баллов текущего уровня силы на шкале прогресса
                    Slider slider = item.transform.Find("Empty_PowerValueRoot/Slider").GetComponent <Slider>();
                    slider.maxValue = maxPowerPoints;
                    slider.value    = warshipDto.PowerPoints;

                    //Установить текст кол-ва баллов текущего уровня силы
                    Text sliderText = item.transform.Find("Empty_PowerValueRoot/Text").GetComponent <Text>();
                    sliderText.text = warshipDto.PowerPoints + "/" + maxPowerPoints;
                }


                //Подготовка к показу ранга
                WarshipRankModel warshipRankModel = WarshipRatingScaleStorage.Instance.GetRankModel(warshipDto.Rating);

                //Установить текст уровеня ранга
                Text rankText = item.transform.Find("Empty_WarshipExperienceScale/Image_LeftCircle/Text_RankValue")
                                .GetComponent <Text>();
                rankText.text = warshipRankModel.currentRank.ToString();

                //Установить текст кол-ва трофеев
                Text trophyCountText = item.transform.Find("Empty_WarshipExperienceScale/Image_RightRect/Text")
                                       .GetComponent <Text>();
                trophyCountText.text = warshipDto.Rating.ToString();

                //Установить значение шкалы прогресса кол-ва трофеев
                Slider sliderTrophy = item.transform.Find("Empty_WarshipExperienceScale/Image_RightRect/Slider")
                                      .GetComponent <Slider>();
                sliderTrophy.value = warshipRankModel.rankProgress;

                //Установить обработчик нажатия
                Button button = item.GetComponent <Button>();
                button.onClick.RemoveAllListeners();
                button.onClick.AddListener(() =>
                {
                    UiSoundsManager.Instance().PlayClick();
                    lobbyEcsController.ShowWarshipOverview(warshipDto);
                });
            }
        }
        public ResourceModel Create(List <WarshipDbDto> warships)
        {
            ResourceTypeEnum resourceTypeEnum = lootboxResourceTypeFactory.CreateResourceType();

            switch (resourceTypeEnum)
            {
            case ResourceTypeEnum.SoftCurrency:
            {
                int amount = random.Next(15, 100);
                var model  = new SoftCurrencyResourceModel()
                {
                    Amount = amount
                };
                return(new ResourceModel
                    {
                        SerializedModel = ZeroFormatterSerializer.Serialize(model),
                        ResourceTypeEnum = ResourceTypeEnum.SoftCurrency
                    });
            }

            case ResourceTypeEnum.WarshipPowerPoints:
            {
                int          warshipIndex = random.Next(warships.Count);
                WarshipDbDto warship      = warships[warshipIndex];

                int amount = random.Next(2, 15);

                var model = new WarshipPowerPointsResourceModel();
                var test  = WarshipPowerScale.GetModel(warship.WarshipPowerLevel);
                if (test == null)
                {
                    return(null);
                }
                model.MaxValueForLevel = test.PowerPointsCost;
                model.WarshipSkinName  = warship.CurrentSkinType.Name;
                model.FinishValue      = warship.WarshipPowerPoints + amount;
                model.StartValue       = warship.WarshipPowerPoints;
                model.WarshipId        = warship.Id;
                model.WarshipTypeEnum  = warship.WarshipTypeId;

                warship.WarshipPowerPoints += amount;
                return(new ResourceModel
                    {
                        SerializedModel = ZeroFormatterSerializer.Serialize(model),
                        ResourceTypeEnum = ResourceTypeEnum.WarshipPowerPoints
                    });
            }

            case ResourceTypeEnum.HardCurrency:
            {
                var model = new HardCurrencyResourceModel()
                {
                    Amount = random.Next(2, 15)
                };
                return(new ResourceModel
                    {
                        SerializedModel = ZeroFormatterSerializer.Serialize(model),
                        ResourceTypeEnum = ResourceTypeEnum.HardCurrency
                    });
            }

            default:
                throw new Exception("Неизвестный тип подарка " + resourceTypeEnum);
            }
        }