Exemplo n.º 1
0
        public void Setup(ShipModuleInfo module)
        {
            this.module = module;
            ModuleNameData moduleNameData = Services.ResourceService.ModuleNameRepository.GetModuleNameData(module.Id);

            moduleNameText.text = Services.ResourceService.Localization.GetString(moduleNameData.name);
            switch (module.State)
            {
            case ShipModuleState.Opened: {
                currencyIconImage.Deactivate();
                currencyText.Deactivate();
                planetImage.Deactivate();
                buyButton.Deactivate();
            }
            break;

            case ShipModuleState.Available: {
                currencyIconImage.Activate();
                currencyText.Activate();
                planetImage.Deactivate();
                buyButton.Activate();
            }
            break;

            case ShipModuleState.Locked: {
                currencyIconImage.Activate();
                currencyText.Activate();
                planetImage.Activate();
                buyButton.Activate();
            }
            break;
            }
            currencyIconImage.overrideSprite = Services.ResourceService.GetCurrencySprite(module.CurrencyType);
            currencyText.text = BosUtils.GetCurrencyString(Currency.Create(module.CurrencyType, module.Price));

            PlanetNameData planetNameData = Services.ResourceService.PlanetNameRepository.GetPlanetNameData(module.Data.PlanetId);

            if (planetNameData != null)
            {
                planetImage.overrideSprite = Services.ResourceService.GetSpriteByKey(planetNameData.icon);
            }
            else
            {
                planetImage.overrideSprite = Services.ResourceService.Sprites.FallbackSprite;
            }

            buyButton.SetListener(() => {
                var status = Services.GetService <IShipModuleService>().BuyModule(module.Id);
                switch (status)
                {
                case ModuleTransactionState.Success: {
                    Services.SoundService.PlayOneShot(SoundName.buyUpgrade);
                    Setup(module);
                }
                break;

                case ModuleTransactionState.NotEnoughCurrency:
                    {
                        if (module.CurrencyType == CurrencyType.Coins)
                        {
                            Services.ViewService.Show(ViewType.CoinRequiredView, new ViewData {
                                UserData = (int)module.Price
                            });
                        }
                    }
                    break;
                }
            });

            IShipModuleService moduleService = Services.GetService <IShipModuleService>();

            updateTimer.Setup(0.5f, (deltaTime) => {
                ModuleTransactionState moduleTransactionState;
                if (moduleService.IsAllowBuyModule(module.Id, out moduleTransactionState))
                {
                    buyButton.interactable = true;
                }
                else if (moduleTransactionState == ModuleTransactionState.NotEnoughCurrency && module.CurrencyType == CurrencyType.Coins)
                {
                    buyButton.interactable = true;
                }
                else
                {
                    buyButton.interactable = false;
                }
            }, true);

            MoveObject(module);
        }
Exemplo n.º 2
0
        private void Setup()
        {
            if (moduleService == null)
            {
                moduleService = Services.GetService <IShipModuleService>();
            }
            if (module == null)
            {
                module = moduleService.GetModule(moduleId);
            }

            if (moduleNameData == null)
            {
                moduleNameData = Services.ResourceService.ModuleNameRepository.GetModuleNameData(moduleId);
            }

            nameText.text            = Services.ResourceService.Localization.GetString(moduleNameData.name);
            iconImage.overrideSprite = Services.ResourceService.GetSpriteByKey(moduleNameData.icon);

            currencyIconImage.overrideSprite = Services.ResourceService.GetCurrencySprite(module.Data.Currency);
            currencyText.text = BosUtils.GetCurrencyString(module.Data.Currency);

            ModuleTransactionState status;
            bool isAllowedToBuy = moduleService.IsAllowBuyModule(moduleId, out status);

            if (isAllowedToBuy)
            {
                requirementText.text   = string.Empty;
                buyButton.interactable = true;
            }
            else
            {
                switch (status)
                {
                case ModuleTransactionState.NotEnoughCurrency: {
                    requirementText.text   = string.Empty;
                    currencyText.text      = BosUtils.GetCurrencyString(module.Data.Currency, "#FF0000");
                    buyButton.interactable = false;
                }
                break;

                case ModuleTransactionState.NotValidState: {
                    var planetData = Services.ResourceService.Planets.GetPlanet(module.Data.PlanetId);
                    if (planetData == null)
                    {
                        Debug.LogError($"not found planet for upgrade level => {module.Data.PlanetId}");
                        return;
                    }
                    PlanetNameData planetNameData = Services.ResourceService.PlanetNameRepository.GetPlanetNameData(planetData.Id);
                    requirementText.text = string.Format(Services.ResourceService.Localization.GetString("fmt_module_requirement"),
                                                         Services.ResourceService.Localization.GetString(planetNameData.name));
                    buyButton.interactable = false;
                    buyText.color          = Color.grey;
                }
                break;
                }
            }

            buyButton.SetListener(() => {
                var buyStatus = moduleService.BuyModule(moduleId);
                if (buyStatus == ModuleTransactionState.Success)
                {
                    Services.GetService <ISoundService>().PlayOneShot(SoundName.Poof);
                    buyParticles?.Play();
                }
                else
                {
                    Services.GetService <ISoundService>().PlayOneShot(SoundName.click);
                }
            });

            switch (module.State)
            {
            case ShipModuleState.Opened: {
                checkObject.Activate();
                buyButton.Deactivate();
                requirementText.text = string.Empty;
            }
            break;

            default: {
                checkObject.Deactivate();
                buyButton.Activate();
            }
            break;
            }
        }