#pragma warning restore 0414 public PlayerCity() { ECityBuildingKey[] buildingKeys = Enum.GetValues(typeof(ECityBuildingKey)) as ECityBuildingKey[]; _buildings = new CityBuildingInfo[buildingKeys.Length - 1]; for (int i = 1; i < buildingKeys.Length; i++) { _buildings[i - 1] = new CityBuildingInfo(buildingKeys[i], 1); } //TODO: setup correct last refresh time _fuelRefresher = new PlayerFuelRefresher(Utils.UnixTimestamp); //TODO: start ongoing constructions //TODO: setup correct buildings info //TODO: setup correct upgrades info //TOOD: setup warehouse collect time if (IsWarehouseFilled) { OnWarehouseFilled(); } else { GameTimer.Instance.AddListener(WarehouseCollectTime, OnWarehouseFilled); } }
private void OnConstructionComplete(ECityBuildingKey buildingKey) { CityBuildingInfo bInfo = GetBuilding(buildingKey); bInfo.Level++; bInfo.ConstructionCompletionTimestamp = -1; EventsAggregator.City.Broadcast <ECityBuildingKey>(ECityEvent.ConstructionEnd, buildingKey); }
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); }
//WARNING! temp! private void SetupLabel() { string strBuildingName = string.Empty; string strEnterCaption = "Enter"; switch (_buildingKey) { case ECityBuildingKey.TownHall: strBuildingName = "Main"; strEnterCaption = "Info"; break; case ECityBuildingKey.Barracks: strBuildingName = "Barracks"; break; case ECityBuildingKey.Fort: strBuildingName = "Fort"; break; case ECityBuildingKey.HeroesHall: strBuildingName = "Heroes Hall"; break; case ECityBuildingKey.Market: strBuildingName = "Merchant"; break; case ECityBuildingKey.Warehouse: strBuildingName = "Warehouse"; break; } CityBuildingInfo buildingInfo = Global.Instance.Player.City.GetBuilding(_buildingKey); int buildingLevel = buildingInfo != null ? buildingInfo.Level : 1; _lblBuildingName.text = string.Format("{0} {1} lvl", strBuildingName, buildingLevel); _lblEnter.text = strEnterCaption; }
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; }