Пример #1
0
        private void SetCharacteristics(WarshipDto warshipDto)
        {
            GameObject prefab = Resources.Load <GameObject>("Prefabs/LobbyWarshipModalWindow/Empty_Parameter");

            //Заполнить раздел защиты
            Transform defenceParent = warshipsUiStorage.defenceHorizontalLayout.transform;

            SetSectionParameters(warshipDto.PowerLevel, warshipDto.WarshipCharacteristics.DefenceParameters, prefab, defenceParent);

            //Заполнить раздел атаки
            Transform attackParent = warshipsUiStorage.attackGridLayout.transform;

            SetSectionParameters(warshipDto.PowerLevel, warshipDto.WarshipCharacteristics.AttackParameters, prefab, attackParent);

            //Заполнить раздел ульты
            Transform ultimateParent = warshipsUiStorage.ultimateGridLayout.transform;

            SetSectionParameters(warshipDto.PowerLevel, warshipDto.WarshipCharacteristics.UltimateParameters, prefab, ultimateParent);

            warshipsUiStorage.attackDescription.text   = warshipDto.WarshipCharacteristics.AttackDescription;
            warshipsUiStorage.ultimateDescription.text = warshipDto.WarshipCharacteristics.UltimateDescription;

            warshipsUiStorage.attackName.text   = warshipDto.WarshipCharacteristics.AttackName;
            warshipsUiStorage.ultimateName.text = warshipDto.WarshipCharacteristics.UltimateName;
        }
Пример #2
0
        private void ShowWarshipOverview(WarshipDto warshipDto)
        {
            UpdateData(warshipDto);

            //Обновить уникальный компонент для листания и переключения скинов
            lobbyUiContext.ReplaceWarshipOverviewCurrentSkinModel(warshipDto.CurrentSkinIndex, warshipDto);
        }
Пример #3
0
        protected override void Execute(List <LobbyUiEntity> entities)
        {
            foreach (var warshipEntity in entities)
            {
                WarshipDto warshipDto = warshipEntity.warship.warshipDto;

                string     skinName  = warshipDto.GetCurrentSkinName();
                GameObject prefab    = Resources.Load <GameObject>("Prefabs/" + skinName);
                GameObject warshipGo = Object.Instantiate(prefab, gameViewsParent, false);
                warshipGo.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f);

                LobbyUiEntity oldWarshipEntity = warshipsGroup.AsEnumerable()
                                                 .SingleOrDefault(entity =>
                {
                    return(entity.warship.warshipDto.WarshipTypeEnum == warshipDto.WarshipTypeEnum);
                });

                if (oldWarshipEntity != null)
                {
                    oldWarshipEntity.view.gameObject.Unlink();
                    Object.Destroy(oldWarshipEntity.view.gameObject);
                    oldWarshipEntity.Destroy();
                }

                warshipEntity.AddView(warshipGo);
                warshipGo.Link(warshipEntity);
            }
        }
Пример #4
0
 private void ShowOverviewLayer(WarshipDto warshipDto)
 {
     warshipsUiStorage.hint.SetActive(false);
     ShowWarshipOverview(warshipDto);
     warshipsUiStorage.warshipListRootGameObject.SetActive(false);
     warshipsUiStorage.warshipRootGameObject.SetActive(true);
     warshipsUiStorage.warshipRoot.SetActive(true);
 }
Пример #5
0
        public string GetSkinName(WarshipTypeEnum modelWarshipTypeEnum)
        {
            WarshipDto warshipDto = contexts.lobbyUi
                                    .GetGroup(LobbyUiMatcher.Warship)
                                    .AsEnumerable()
                                    .Select(entity => entity.warship.warshipDto)
                                    .Single(item => item.WarshipTypeEnum == modelWarshipTypeEnum);

            return(warshipDto.GetCurrentSkinName());
        }
Пример #6
0
        public int GetWarshipPowerPoints(WarshipTypeEnum modelWarshipTypeEnum)
        {
            WarshipDto warshipDto = contexts.lobbyUi
                                    .GetGroup(LobbyUiMatcher.Warship)
                                    .AsEnumerable()
                                    .Select(entity => entity.warship.warshipDto)
                                    .Single(item => item.WarshipTypeEnum == modelWarshipTypeEnum);

            return(warshipDto.PowerPoints);
        }
Пример #7
0
        private void CreateWarshipComponents(List <WarshipDto> warships, LobbyUiContext lobbyUiContextArg)
        {
            log.Info("Старт создания сущностей для кораблей");
            for (var i = 0; i < warships.Count; i++)
            {
                log.Info("Создание сущности для корабля " + i);
                WarshipDto warshipDto = warships[i];
                lobbyUiContext.CreateEntity().AddWarship(warshipDto);
            }

            log.Info("Создание сущностей для кораблей окончено");
        }
        public AccountDto Map(AccountDbDto account)
        {
            AccountDto result = new AccountDto
            {
                Username           = account.Username,
                AccountRating      = account.Rating,
                SoftCurrency       = account.SoftCurrency,
                HardCurrency       = account.HardCurrency,
                BigLootboxPoints   = 0,
                SmallLootboxPoints = account.LootboxPoints,
                Warships           = new List <WarshipDto>(),
                AccountId          = account.Id
            };

            foreach (WarshipDbDto warshipDbDto in account.Warships)
            {
                WarshipDto warshipDto = new WarshipDto();
                warshipDto.Rating                 = warshipDbDto.WarshipRating;
                warshipDto.CombatRoleName         = warshipDbDto.WarshipType.WarshipCombatRole.Name;
                warshipDto.Description            = warshipDbDto.WarshipType.Description;
                warshipDto.WarshipName            = warshipDbDto.WarshipType.Name;
                warshipDto.PowerPoints            = warshipDbDto.WarshipPowerPoints;
                warshipDto.Id                     = warshipDbDto.Id;
                warshipDto.PowerLevel             = warshipDbDto.WarshipPowerLevel;
                warshipDto.WarshipCharacteristics = warshipsCharacteristicsService
                                                    .GetWarshipCharacteristics(warshipDbDto.WarshipType.Id);
                warshipDto.WarshipTypeEnum = warshipDbDto.WarshipType.Id;


                List <SkinTypeDto> skinTypeDtos = new List <SkinTypeDto>();
                foreach (SkinType skinType in warshipDbDto.Skins)
                {
                    SkinTypeDto skinTypeDto = new SkinTypeDto()
                    {
                        Id   = skinType.Id,
                        Name = skinType.Name
                    };
                    skinTypeDtos.Add(skinTypeDto);
                }
                warshipDto.Skins = skinTypeDtos;

                warshipDto.CurrentSkinIndex = warshipDto.Skins
                                              .FindIndex((skin) => skin.Id == warshipDbDto.CurrentSkinTypeId);


                result.Warships.Add(warshipDto);
            }

            return(result);
        }
Пример #9
0
        private void AddListenerToImproveButton(WarshipDto warshipDto)
        {
            var button = warshipsUiStorage.modalWindowImproveButton.GetComponent <Button>();

            button.onClick.RemoveAllListeners();
            button.onClick.AddListener(() =>
            {
                UnityThread.ExecuteCoroutine(Coroutine());
            });

            IEnumerator Coroutine()
            {
                //Отправить запрос
                var downloader = new WarshipImprovementDownloader().TryBuy(warshipDto.Id);

                yield return(new WaitUntil(() => downloader.IsCompleted));

                bool success = downloader.Result;

                if (success)
                {
                    UiSoundsManager.Instance().PlayLevelUp();
                    //Показать анимацию получения нового уровня
                    log.Info("Успешное получение уровня");
                    //Перезагрузить сцену
                    lobbySceneSwitcher.ReloadScene();
                    var newLobbyEcs = Object.FindObjectOfType <LobbyEcsController>();
                    yield return(new WaitUntil(() => newLobbyEcs.IsWarshipsCreationCompleted()));

                    yield return(new WaitUntil(() => newLobbyEcs.IsSoftCurrencyReady()));

                    //Показать текущее меню
                    newLobbyEcs.ShowWarshipList();

                    newLobbyEcs.ShowWarshipOverviewById(warshipDto.Id);
                }
                else
                {
                    UiSoundsManager.Instance().PlayError();
                    //Показать уведомление, что ресурсов недостаточно
                    log.Error("Не удалось получить новый уровень");
                }
            }
        }
Пример #10
0
        protected override void Execute(List <LobbyUiEntity> entities)
        {
            List <LobbyUiEntity> warshipsList = warshipsGroup.GetEntities().ToList();

            // log.Debug($"кол-во кораблей до спавна "+warshipsList.Count);
            foreach (var warshipEntity in entities)
            {
                // log.Debug("Спавн корабля с id = "+warshipEntity.warship.warshipDto.WarshipTypeEnum.ToString());
                WarshipDto warshipDto = warshipEntity.warship.warshipDto;

                string skinName = warshipDto.GetCurrentSkinName();
                // log.Debug("Название скина перед спавном "+skinName);
                GameObject prefab    = Resources.Load <GameObject>("Prefabs/" + skinName);
                GameObject warshipGo = Object.Instantiate(prefab, gameViewsParent, false);
                warshipGo.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f);

                LobbyUiEntity oldWarshipEntity = warshipsGroup.AsEnumerable()
                                                 .SingleOrDefault(entity => entity.warship.warshipDto.WarshipTypeEnum == warshipDto.WarshipTypeEnum);

                if (oldWarshipEntity != null)
                {
                    // log.Debug("Корабль этого типа существует");
                    oldWarshipEntity.view.gameObject.Unlink();
                    Object.Destroy(oldWarshipEntity.view.gameObject);
                    oldWarshipEntity.Destroy();
                    // log.Debug("Корабль этого типа уничтожен");
                }

                // warshipGo.SetActive(false);
                warshipEntity.AddView(warshipGo);
                warshipGo.Link(warshipEntity);
            }


            isWarshipCreationCompleted = true;
        }
Пример #11
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);
                }
            });
        }
Пример #12
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);
                });
            }
        }
Пример #13
0
 public void ShowWarshipCharacteristics(WarshipDto warshipDto)
 {
     contexts.lobbyUi.CreateEntity().AddEnableWarshipOverviewModalWindow(warshipDto);
 }
Пример #14
0
 public void ShowWarshipImprovementModalWindow(WarshipDto warshipDto)
 {
     contexts.lobbyUi.CreateEntity().AddEnableWarshipImprovementModalWindow(warshipDto);
 }
Пример #15
0
 public void ShowWarshipOverview(WarshipDto warshipDto)
 {
     contexts.lobbyUi.CreateEntity().AddEnableWarshipOverviewUiLayer(warshipDto);
 }
Пример #16
0
 public void AddOrUpdate(WarshipTypeEnum warshipTypeEnum, WarshipDto warshipDto)
 {
     warships.AddOrUpdate(warshipTypeEnum, warshipDto,
                          (key, oldValue) => warshipDto);
 }