Ejemplo n.º 1
0
        private bool InsufficientResources(ProductModel productModel, out SectionTypeEnum?sectionTypeEnum)
        {
            switch (productModel.CostModel.CostTypeEnum)
            {
            case CostTypeEnum.SoftCurrency:
            {
                var costModel = ZeroFormatterSerializer
                                .Deserialize <InGameCurrencyCostModel>(productModel.CostModel.SerializedCostModel);
                if (lobbyEcsController.GetSoftCurrency() < costModel.Cost)
                {
                    log.Error("Не хватает обычной валюты");
                    sectionTypeEnum = SectionTypeEnum.SoftCurrency;
                    return(true);
                }

                sectionTypeEnum = null;
                return(false);
            }

            case CostTypeEnum.HardCurrency:
            {
                var costModel = ZeroFormatterSerializer
                                .Deserialize <InGameCurrencyCostModel>(productModel.CostModel.SerializedCostModel);
                log.Debug($"текущее кол-во хард валюты {lobbyEcsController.GetHardCurrency()} а нужно {costModel.Cost}");
                if (lobbyEcsController.GetHardCurrency() < costModel.Cost)
                {
                    log.Error("Не хватает премиум валюты");
                    sectionTypeEnum = SectionTypeEnum.HardCurrency;
                    return(true);
                }

                sectionTypeEnum = null;
                return(false);
            }

            case CostTypeEnum.RealCurrency:
                log.Fatal("Покупка за реальную валюту не должна тут обрабатываться");
                sectionTypeEnum = null;
                return(true);

            case CostTypeEnum.Free:
                sectionTypeEnum = null;
                return(false);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Ejemplo n.º 2
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);
                }
            });
        }
Ejemplo n.º 3
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);
                });
            }
        }