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; } } } }
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; }