private async Task ShowRatingCalculation(int currentWarshipRating, int deltaRating)
        {
            CancellationTokenSource cancellationTokenSourceForTrophy = new CancellationTokenSource();

            StartTrophyAnimationAsync(cancellationTokenSourceForTrophy.Token);

            Text textObj = spaceshipRatingScaleText.GetComponent <Text>();

            spaceshipRatingScaleText.SetActive(true);

            int frameRatingDelta = deltaRating >= 0 ? 1 : -1;
            int startRating      = currentWarshipRating - deltaRating;
            int finishValue      = currentWarshipRating;
            int currentRank      = 0;

            while (startRating != finishValue + frameRatingDelta)
            {
                WarshipRankModel warshipRankModel = WarshipRatingScaleStorage.Instance.GetRankModel(startRating);
                textObj.text = warshipRankModel.ToString();

                spaceshipRatingScaleSlider.value = warshipRankModel.rankProgress;

                if (currentRank != warshipRankModel.currentRank)
                {
                    spaceshipRankValueText.text = warshipRankModel.currentRank.ToString();
                    currentRank = warshipRankModel.currentRank;
                }

                startRating += frameRatingDelta;
                // ReSharper disable once MethodSupportsCancellation
                await Task.Delay(20);
            }

            cancellationTokenSourceForTrophy.Cancel();
        }
        protected override void Execute(List <LobbyUiEntity> entities)
        {
            //получить данные о корабле
            WarshipTypeEnum warshipTypeEnum         = entities.Last().currentWarshipTypeEnum.value;
            var             currentWarshipComponent = lobbyUiContext
                                                      .GetGroup(LobbyUiMatcher.Warship)
                                                      .AsEnumerable()
                                                      .Single(entity => entity.warship.warshipDto.WarshipTypeEnum == warshipTypeEnum).warship;
            int rating = currentWarshipComponent.warshipDto.Rating;
            WarshipRankModel rankModel = WarshipRatingScaleStorage.Instance.GetRankModel(rating);

            //вставить значения
            rankText.text   = rankModel.currentRank.ToString();
            ratingText.text = rankModel.ToString();
            slider.value    = rankModel.rankProgress;
        }
Пример #3
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);
                }
            });
        }
Пример #4
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);
                });
            }
        }