Ejemplo n.º 1
0
    private void UpdateBuildingImage(ECityBuildingKey buildingKey, bool isFirstLoad)
    {
        if (buildingKey == ECityBuildingKey.Idle)
        {
            return;
        }

        CBConstructionRequirement cr = CityConfig.Instance.GetBuildingData(buildingKey).GetConstructionRequirements(Global.Instance.Player.City.GetBuilding(buildingKey).Level);

        if (cr != null)
        {
            Sprite             spriteResource = UIResourcesManager.Instance.GetResource <Sprite>(string.Format("{0}/{1}", GameConstants.Paths.UI_CITY_BUILDINGS_RESOURCES, cr.IconPath));
            UICityBuildingIcon buildingIcon   = null;

            if (spriteResource != null)
            {
                switch (buildingKey)
                {
                case ECityBuildingKey.TownHall:
                    buildingIcon = _cbiTownHall;
                    break;

                case ECityBuildingKey.Barracks:
                    buildingIcon = _cbiBarracks;
                    break;

                case ECityBuildingKey.Fort:
                    buildingIcon = _cbiFort;
                    break;

                case ECityBuildingKey.HeroesHall:
                    buildingIcon = _cbiHeroesHall;
                    break;

                case ECityBuildingKey.Market:
                    buildingIcon = _cbiMarket;
                    break;

                case ECityBuildingKey.Warehouse:
                    buildingIcon = _cbiWarehouse;
                    break;
                }

                if (buildingIcon != null)
                {
                    if (!isFirstLoad && buildingIcon.ImgBuilding.sprite != null)
                    {
                        Sprite s = buildingIcon.ImgBuilding.sprite;
                        buildingIcon.ImgBuilding.sprite = null;
                        UIResourcesManager.Instance.FreeResource(s);
                    }

                    buildingIcon.ImgBuilding.sprite = spriteResource;
                }
            }
        }
    }
Ejemplo n.º 2
0
    public void StartConstruction(ECityBuildingKey buildingKey)
    {
        CityBuildingInfo bInfo = GetBuilding(buildingKey);

        //check level
        if (bInfo.IsLevelMaxed)
        {
            return;
        }
        //check current building is not under construction
        if (bInfo.IsUnderCoustruction)
        {
            return;
        }

        CBConstructionRequirement requirements = CityConfig.Instance.GetBuildingData(buildingKey).GetConstructionRequirements(bInfo.Level + 1);

        //check resources requirements
        if (Global.Instance.Player.Resources.Credits < requirements.CostCredits ||
            Global.Instance.Player.Resources.Minerals < requirements.CostMinerals ||
            Global.Instance.Player.Resources.Fuel < requirements.CostFuel)
        {
            return;
        }

        //check necessary buildings requirements
        for (int i = 0; i < requirements.BuildingRequirements.Length; i++)
        {
            if (GetBuilding(requirements.BuildingRequirements[i].Key).Level < requirements.BuildingRequirements[i].Level)
            {
                return;
            }
        }

        //all conditions match: remove resources and start construction
        Global.Instance.Player.Resources.Credits  -= requirements.CostCredits;
        Global.Instance.Player.Resources.Minerals -= requirements.CostMinerals;
        Global.Instance.Player.Resources.Fuel     -= requirements.CostFuel;
        bInfo.ConstructionCompletionTimestamp      = Utils.UnixTimestamp + requirements.BuildTime;

        StartConstructionInternal(buildingKey, bInfo.ConstructionCompletionTimestamp);
    }
    public void Setup(ECityBuildingKey buildingKey)
    {
        StopAllCoroutines();

        if (_imgBuilding.sprite != null)
        {
            _imgBuilding.sprite = null;
            UIResourcesManager.Instance.FreeResource(string.Format("{0}/{1}", GameConstants.Paths.UI_CITY_BUILDINGS_RESOURCES, CityConfig.Instance.GetBuildingData(_buildingKey).GetConstructionRequirements(_buildngLevel).IconPath));
        }

        _imgBuilding.enabled = false;
        _buildingKey         = buildingKey;

        bool       canUpgrade   = false;
        CBBaseData buildingData = CityConfig.Instance.GetBuildingData(_buildingKey);

        if (buildingData != null)
        {
            CityBuildingInfo playerBuildingInfo = Global.Instance.Player.City.GetBuilding(_buildingKey);
            if (playerBuildingInfo != null)
            {
                _buildngLevel = playerBuildingInfo.Level;

                //setup image
                Sprite sprResource = UIResourcesManager.Instance.GetResource <Sprite>(string.Format("{0}/{1}", GameConstants.Paths.UI_CITY_BUILDINGS_RESOURCES, buildingData.GetConstructionRequirements(_buildngLevel).IconPath));
                if (sprResource != null)
                {
                    _imgBuilding.sprite  = sprResource;
                    _imgBuilding.enabled = true;
                }

                if (playerBuildingInfo.IsLevelMaxed)
                {
                    //TODO: set correct text
                    _lblCaption.text = "Building has maximum level";

                    _lblFuelCost.text     = "-";
                    _lblMineralsCost.text = "-";
                    _lblCreditsCost.text  = "-";
                    _lblTimeCost.text     = "-";
                }
                else
                {
                    if (playerBuildingInfo.IsUnderCoustruction)
                    {
                        StartCoroutine(UpdateConstriuctionTime(playerBuildingInfo.ConstructionCompletionTimestamp - Utils.UnixTimestamp));

                        _lblFuelCost.text     = "-";
                        _lblMineralsCost.text = "-";
                        _lblCreditsCost.text  = "-";
                        _lblTimeCost.text     = "-";
                    }
                    else
                    {
                        _lblCaption.text = string.Format("Ready to upgrade {0} to {1} lvl?", GetBuildingName(), (_buildngLevel + 1));

                        CBConstructionRequirement nextLevelRequirenemts = buildingData.GetConstructionRequirements(_buildngLevel + 1);
                        _lblFuelCost.text     = nextLevelRequirenemts.CostFuel.ToString();
                        _lblMineralsCost.text = nextLevelRequirenemts.CostMinerals.ToString();
                        _lblCreditsCost.text  = nextLevelRequirenemts.CostCredits.ToString();
                        _lblTimeCost.text     = nextLevelRequirenemts.BuildTime == 0 ? "instant" : Utils.FormatTime(nextLevelRequirenemts.BuildTime);                           //TODO: setup correct "instant" text

                        canUpgrade = true;

                        if (Global.Instance.Player.Resources.Fuel < nextLevelRequirenemts.CostFuel)
                        {
                            _lblFuelCost.color = Color.red;
                            canUpgrade         = false;
                        }
                        else
                        {
                            _lblFuelCost.color = Color.white;
                        }
                        if (Global.Instance.Player.Resources.Minerals < nextLevelRequirenemts.CostMinerals)
                        {
                            _lblMineralsCost.color = Color.red;
                            canUpgrade             = false;
                        }
                        else
                        {
                            _lblMineralsCost.color = Color.white;
                        }
                        if (Global.Instance.Player.Resources.Credits < nextLevelRequirenemts.CostCredits)
                        {
                            _lblCreditsCost.color = Color.red;
                            canUpgrade            = false;
                        }
                        else
                        {
                            _lblCreditsCost.color = Color.white;
                        }
                    }
                }
            }
        }
        _btnUpgrade.interactable = canUpgrade;
    }