Example #1
0
        public async Task <bool> Create(string sku, string token)
        {
            HttpClient httpClient = new HttpClient();

            try
            {
                HttpResponseMessage response;
                using (MultipartFormDataContent formData = new MultipartFormDataContent())
                {
                    formData.Add(new StringContent(sku), "sku");
                    formData.Add(new StringContent(token), "token");
                    response = await httpClient.PostAsync(NetworkGlobals.ValidatePurchaseUrl, formData);
                }

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception("Статус ответа " + response.StatusCode);
                }
            }
            catch (Exception e)
            {
                UiSoundsManager.Instance().PlayError();
                log.Error("Упало при скачивании модели " + e.Message + " " + e.StackTrace);
                return(false);
            }

            return(true);
        }
        private IEnumerator StartAnimation()
        {
            if (ResourcesAccrualStorage.Instance.IsLootboxNeeded)
            {
                lootboxEcsController.ShowLootbox();
            }
            else
            {
                lootboxEcsController.DisableItemsLeftMenu();
            }

            DateTime delayTime = DateTime.UtcNow + maxWaitingTime;

            yield return(new WaitUntil(() =>
            {
                return ResourcesAccrualStorage.Instance.ResourceModels != null || DateTime.UtcNow > delayTime;
            }));

            if (ResourcesAccrualStorage.Instance.ResourceModels != null)
            {
                lootboxEcsController.SetResourceModels(ResourcesAccrualStorage.Instance.ResourceModels);
            }
            else
            {
                UiSoundsManager.Instance().PlayError();
                lootboxSceneSwitcher.LoadLobbyScene();
            }
        }
        public void Product_OnClick([NotNull] PurchaseModel purchaseModel)
        {
            UiSoundsManager.Instance().PlayClick();
            log.Info($"{nameof(Product_OnClick)} {nameof(purchaseModel.productModel.Id)} {purchaseModel.productModel.Id}");
            log.Info("Тип валюты " + purchaseModel.productModel.CostModel.CostTypeEnum);

            if (purchaseModel.productModel.IsDisabled)
            {
                textTooltip.Show("This product has already been purchased.");
                log.Info("Попытка купить недоступный товар.");
                return;
            }

            //Если покупка за реальную валюту, то вызвать api платёжной системы
            if (purchaseModel.productModel.CostModel.CostTypeEnum == CostTypeEnum.RealCurrency)
            {
                log.Info("Покупка за реальную валюту");
                purchasingService.BuyProduct(purchaseModel);
            }
            else
            {
                log.Info("Показ окна подтверждения покупки");
                //Если покупка за внутриигровую валюту, то показать меню подтверждения покупки

                lobbyEcsController.ShowPurchaseConfirmationWindow(purchaseModel);
            }
        }
        private IEnumerator OpenAnimation(Action callback, Transform parent)
        {
            isOpened = true;
            UiSoundsManager.Instance().PlayLootbox();
            yield return(new WaitForSeconds(0.2f));

            closedBox.gameObject.SetActive(false);
            Transform  transform1 = closedBox.transform;
            Vector3    position   = transform1.position;
            Quaternion rotation   = transform1.rotation;

            openedBox.gameObject.SetActive(true);
            yield return(new WaitForSeconds(0.1f));

            Instantiate(effectPrefab, position, rotation, parent);
            float shakeDuration = 0.1f;

            CameraShake.myCameraShake.ShakeCamera(0.3f, shakeDuration);
            yield return(new WaitForSeconds(shakeDuration));

            //Время задержки перед заменой лутбокса на ресурс
            yield return(new WaitForSeconds(1));

            callback?.Invoke();
        }
        private void Awake()
        {
            lobbyLoaderController = GetComponent <LobbyLoaderController>();
            // battleUiController = GetComponent<BattleUiController>();

            uiSoundsManager  = UiSoundsManager.Instance();
            joysticksManager = JoysticksManager.Instance();
        }
Example #6
0
 public void Show(string message)
 {
     UiSoundsManager.Instance().PlayError();
     text.text = message;
     hingGo.SetActive(true);
     StopAllCoroutines();
     StartCoroutine(Disable());
     StartCoroutine(MoveUp());
 }
Example #7
0
        private void Awake()
        {
            lobbySoundsManager = UiSoundsManager.Instance();
            var buttons = FindObjectsOfType <Button>();

            foreach (var button in buttons) // Возможно, потом стоит заменить на что-то лучшее
            {
                button.onClick.AddListener(lobbySoundsManager.PlayClick);
            }
        }
Example #8
0
 public CanvasClickHandlerSystem(Contexts contexts, LootboxSceneSwitcher lootboxLobbyLoaderController,
                                 UiSoundsManager uiSoundsManager, LootboxUiStorage lootboxUiStorage)
     : base(contexts.lootbox)
 {
     currentPrizeIndex                 = -1;
     lootboxContext                    = contexts.lootbox;
     this.uiSoundsManager              = uiSoundsManager;
     this.lootboxUiStorage             = lootboxUiStorage;
     this.lootboxLobbyLoaderController = lootboxLobbyLoaderController;
 }
Example #9
0
        public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs purchaseEventArgs)
        {
            log.Debug(nameof(ProcessPurchase));
            string receipt = purchaseEventArgs.purchasedProduct.receipt;

            bool   purchaseIsValid = true;
            string sku             = purchaseEventArgs.purchasedProduct.definition.id;
            string token           = null;


#if UNITY_ANDROID || UNITY_IOS || UNITY_STANDALONE_OSX
            CrossPlatformValidator validator = new CrossPlatformValidator(GooglePlayTangle.Data(),
                                                                          AppleTangle.Data(), Application.identifier);

            purchaseEventArgs.purchasedProduct.LogProduct(log);

            try
            {
                IPurchaseReceipt[] result = validator.Validate(purchaseEventArgs.purchasedProduct.receipt);

                log.Debug("Receipt is valid. Contents:");
                foreach (IPurchaseReceipt productReceipt in result)
                {
                    log.Debug(productReceipt.productID);
                    log.Debug(productReceipt.purchaseDate.ToString());
                    log.Debug(productReceipt.transactionID);
                    if (productReceipt is GooglePlayReceipt google)
                    {
                        log.Debug(google.transactionID);
                        log.Debug(google.purchaseState.ToString());
                        log.Debug(google.purchaseToken);
                        token = google.purchaseToken;
                    }
                }
            }
            catch (IAPSecurityException)
            {
                log.Error("Invalid receipt, not unlocking content");
                purchaseIsValid = false;
            }
            catch (Exception e)
            {
                log.Error(e.Message + " " + e.StackTrace);
            }
#endif
            if (!purchaseIsValid)
            {
                log.Fatal($"Покупка не прошла локальную проверку");
                UiSoundsManager.Instance().PlayError();
            }

            serverValidator.StartValidation(sku, token);
            return(PurchaseProcessingResult.Pending);
        }
Example #10
0
        public static void LogProduct(this Product purchasedProduct, ILog log)
        {
            log.Debug(nameof(LogProduct) + " " + purchasedProduct.definition.id);
            try
            {
                var definitionEnabled = purchasedProduct.definition.enabled;
                var definitionId      = purchasedProduct.definition.id;
                var definitionPayout  = purchasedProduct.definition.payout;

                if (purchasedProduct.definition.payout != null)
                {
                    var payoutData       = purchasedProduct.definition.payout.data;
                    var payoutQuantity   = purchasedProduct.definition.payout.quantity;
                    var payoutSubtype    = purchasedProduct.definition.payout.subtype;
                    var payoutTypeString = purchasedProduct.definition.payout.typeString;

                    // log.Debug($"{nameof(payoutData)} {payoutData}");
                    // log.Debug($"{nameof(payoutQuantity)} {payoutQuantity}");
                    // log.Debug($"{nameof(payoutSubtype)} {payoutSubtype}");
                    // log.Debug($"{nameof(payoutTypeString)} {payoutTypeString}");
                }

                var purchasedProductDefinition    = purchasedProduct.definition;
                var purchasedProductReceipt       = purchasedProduct.receipt;
                var purchasedProductHasReceipt    = purchasedProduct.hasReceipt;
                var purchasedProductTransactionId = purchasedProduct.transactionID;
                var metadataLocalizedPrice        = purchasedProduct.metadata.localizedPrice;
                var metadataLocalizedTitle        = purchasedProduct.metadata.localizedTitle;
                var metadataIsoCurrencyCode       = purchasedProduct.metadata.isoCurrencyCode;
                var metadataLocalizedPriceString  = purchasedProduct.metadata.localizedPriceString;

                // log.Debug($"{nameof(definitionEnabled)} {definitionEnabled}");
                // log.Debug($"{nameof(definitionId)} {definitionId}");
                // log.Debug($"{nameof(definitionPayout)} {definitionPayout}");
                // log.Debug($"{nameof(purchasedProductDefinition)} {purchasedProductDefinition}");
                // log.Debug($"{nameof(purchasedProductReceipt)} {purchasedProductReceipt}");
                // log.Debug($"{nameof(purchasedProductHasReceipt)} {purchasedProductHasReceipt}");
                // log.Debug($"{nameof(purchasedProductTransactionId)} {purchasedProductTransactionId}");
                // log.Debug($"{nameof(metadataLocalizedPrice)} {metadataLocalizedPrice}");
                // log.Debug($"{nameof(metadataLocalizedTitle)} {metadataLocalizedTitle}");
                // log.Debug($"{nameof(metadataIsoCurrencyCode)} {metadataIsoCurrencyCode}");
                // log.Debug($"{nameof(metadataLocalizedPriceString)} {metadataLocalizedPriceString}");
            }
            catch (Exception exception)
            {
                UiSoundsManager.Instance().PlayError();
                log.Error(exception.Message);
            }
        }
Example #11
0
        public bool TryGetProductCostById(string sku, ref string cost)
        {
            try
            {
                Product product = storeController.products.WithID(sku);
                cost = product.metadata.localizedPriceString;
                return(true);
            }
            catch (Exception e)
            {
                UiSoundsManager.Instance().PlayError();
                log.Error($"Не удалось получить стоимость продукта через api. " +
                          $"{nameof(sku)} {sku} {e.Message} {e.StackTrace}");
            }

            return(false);
        }
Example #12
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("Не удалось получить новый уровень");
                }
            }
        }
Example #13
0
        private void Start()
        {
            contexts = Contexts.sharedInstance;
            canvasClickHandlerSystem = new CanvasClickHandlerSystem(contexts, lobbyLoaderController,
                                                                    UiSoundsManager.Instance(), lootboxUiStorage);

            SystemsContainer systemsContainer = new SystemsContainer()
                                                .Add(new LootboxSpawnSystem(contexts.lootbox, lootboxUiStorage.lootboxPrefab,
                                                                            lootboxUiStorage.resourcesRoot.transform))
                                                .Add(new LootboxOpeningSystem(contexts.lootbox, lootboxUiStorage.resourcesRoot.transform, this))
                                                .Add(canvasClickHandlerSystem)
                                                .Add(new ShowPrizeSystem(contexts, particlesColorUpdater, lootboxUiStorage))
                                                .Add(new ItemsLeftChangedSystem(contexts, lootboxUiStorage))
                                                .Add(new ItemsLeftDisablingSystem(contexts, lootboxUiStorage))
                                                .Add(new ResourcesInitializeSystem(lootboxUiStorage))
            ;

            systems = systemsContainer.GetSystems();
            systems.Initialize();
        }
        public StartButtonHandler(LobbyUiContext context, LobbyUiStorage lobbyUiStorage, UiSoundsManager lobbySoundsManager)
            : base(context)
        {
            lobbyUiContext = context;

            battleLoadingMenu = lobbyUiStorage.battleLoadingMenu;
            matchSearchCanvas = lobbyUiStorage.matchSearchCanvas;
            overlayCanvas     = lobbyUiStorage.overlayCanvas;
            gameViewsRoot     = lobbyUiStorage.gameViewsRoot;

            if (battleLoadingMenu == null)
            {
                throw new NullReferenceException($"{nameof(battleLoadingMenu)} was null");
            }
            if (matchSearchCanvas == null)
            {
                throw new NullReferenceException($"{nameof(matchSearchCanvas)} was null");
            }

            this.lobbySoundsManager = lobbySoundsManager;
        }
Example #15
0
        public void BuyProduct(PurchaseModel purchaseModel)
        {
            var realCurrencyCostModel =
                ZeroFormatterSerializer.Deserialize <RealCurrencyCostModel>(purchaseModel.productModel.CostModel
                                                                            .SerializedCostModel);
            string sku = realCurrencyCostModel.GoogleProductId;

            log.Debug($"{nameof(sku)} " + sku);
            bool isStoreInitialized = IsStoreInitialized();

            log.Debug($"{nameof(isStoreInitialized)} {isStoreInitialized}");
            if (!isStoreInitialized)
            {
                UiSoundsManager.Instance().PlayError();
                log.Error($"Вызов покупки был сделан до того как магазин " +
                          $"был инициализирован. {nameof(sku)} {sku}");
            }

            Product product = storeController.products.WithID(sku);

            if (product == null || !product.availableToPurchase)
            {
                log.Error($"product is null or not available for purchase");
            }

            if (!PlayerIdStorage.TryGetServiceId(out string playerServiceId))
            {
                UiSoundsManager.Instance().PlayError();
                log.Error($"Не удалось выполнить покупку потому, что {nameof(playerServiceId)} не доступен");
            }

            if (playerServiceId == null)
            {
                log.Error($"{nameof(playerServiceId)} is null");
                throw new Exception($"{nameof(playerServiceId)} is null");
            }

            storeController.InitiatePurchase(sku);
        }
Example #16
0
        private IEnumerator ValidateCoroutine(string sku, string token)
        {
            Task <bool> task = new PurchaseValidatorTaskFactory().Create(sku, token);

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

            if (task.IsCanceled || task.IsFaulted)
            {
                log.Error($"Не удалось подтвердить покупку " +
                          $"{nameof(task.IsCanceled)} {task.IsCanceled}" +
                          $"{nameof(task.IsFaulted)} {task.IsFaulted}");
                UiSoundsManager.Instance().PlayError();
                yield break;
            }

            bool success = purchasingService.TryConfirmPendingPurchase(sku);

            if (!success)
            {
                log.Fatal($"Сервис платёжной системы не завершил покупку.");
                UiSoundsManager.Instance().PlayError();
            }
        }
Example #17
0
        public bool TryConfirmPendingPurchase(string sku)
        {
            bool success = false;

            log.Debug(nameof(TryConfirmPendingPurchase));
            try
            {
                Product product = storeController.products.WithID(sku);
                log.Debug($"Продукт найден по id {nameof(sku)} {sku}");
                log.Debug("Подтверждение транзакции " + product.definition.id);
                storeController.ConfirmPendingPurchase(product);
                log.Debug("Транзакция успешно подтверджена");
                success = true;
            }
            catch (Exception e)
            {
                UiSoundsManager.Instance().PlayError();
                log.Error($"Не удалось подтвердить продукт {nameof(sku)} {sku}." +
                          $" {e.Message} {e.StackTrace}");
            }

            return(success);
        }
 public ShiftSkinRightSystem(Contexts contexts, UiSoundsManager lobbySoundsManager)
     : base(contexts.lobbyUi)
 {
     lobbyUiContext          = contexts.lobbyUi;
     this.lobbySoundsManager = lobbySoundsManager;
 }
Example #19
0
 public void BackButton_OnClick()
 {
     UiSoundsManager.Instance().PlayClick();
     contexts.lobbyUi.CreateEntity().messageBackButtonPressed = true;
 }
Example #20
0
 public MovingIconDestroySystem(Contexts contexts)
 {
     uiSoundsManager   = UiSoundsManager.Instance();
     lobbyUiContext    = contexts.lobbyUi;
     movingAwardsGroup = lobbyUiContext.GetGroup(LobbyUiMatcher.MovingIcon);
 }
Example #21
0
        public async Task <LobbyModel> Load(CancellationToken cts)
        {
            log.Info("Старт скачивания модели аккаунта");
            HttpClient httpClient    = new HttpClient();
            int        attemptNumber = 0;

            while (true)
            {
                log.Info("Номер попытки " + attemptNumber++);
                await Task.Delay(1000, cts);

                try
                {
                    if (!PlayerIdStorage.TryGetServiceId(out string playerServiceId))
                    {
                        log.Warn("Не удалось получить id игрока");
                        continue;
                    }

                    if (!PlayerIdStorage.TryGetUsername(out string username))
                    {
                        log.Warn("Не удалось получить username игрока");
                        continue;
                    }

                    HttpResponseMessage response;
                    using (MultipartFormDataContent formData = new MultipartFormDataContent())
                    {
                        formData.Add(new StringContent(playerServiceId), nameof(playerServiceId));
                        formData.Add(new StringContent(username), nameof(username));
                        response = await httpClient.PostAsync(NetworkGlobals.InitializeLobbyUrl, formData, cts);
                    }


                    if (!response.IsSuccessStatusCode)
                    {
                        log.Warn("Статус ответа " + response.StatusCode);
                        continue;
                    }

                    string base64String = await response.Content.ReadAsStringAsync();

                    if (base64String.Length == 0)
                    {
                        log.Warn("Ответ пуст ");
                        continue;
                    }

                    byte[] data = Convert.FromBase64String(base64String);
                    log.Info("Длина ответа в байтах " + data.Length);
                    LobbyModel result = ZeroFormatterSerializer.Deserialize <LobbyModel>(data);
                    log.Info("Десериализация прошла нормально");
                    return(result);
                }
                catch (TaskCanceledException e)
                {
                    log.Warn("Task был отменён");
                }
                catch (Exception e)
                {
                    UiSoundsManager.Instance().PlayError();
                    log.Error("Упало при скачивании модели " + e.Message + " " + e.StackTrace);
                }
            }
        }
Example #22
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);
                }
            });
        }
 public WppViewDestroySystem(Contexts contexts)
 {
     uiSoundsManager   = UiSoundsManager.Instance();
     context           = contexts.wppAccrual;
     movingAwardsGroup = context.GetGroup(WppAccrualMatcher.MovingIcon);
 }
Example #24
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);
                });
            }
        }
Example #25
0
 private void ShowError(string errorMessage)
 {
     errorText.text = $"<color='red'>{errorMessage}</color>\n<i>Click to return.</i>";
     errorRoot.SetActive(true);
     UiSoundsManager.Instance().PlayError();
 }