private void ApplyTooltip(Vector3Int mapPosition, SelectionCoinController coinController, BuildingManager.BuildingAction buildingAction) { GameObject buildingLogic = BuildingManager.instance._positionToBuildingLogic[mapPosition]; BuildingHealth health = buildingLogic.GetComponent <BuildingHealth>(); BuildingLogicBase logic = buildingLogic.GetComponent <BuildingLogicBase>(); switch (buildingAction) { case BuildingManager.BuildingAction.UPGRADE_HEALTH: coinController.titleText = "Upgrade: Add Walls"; coinController.bodyText = "Add walls to the building, upgrading its health."; coinController.cost = BuildingManager.GetHealthUpgradeCost(health); coinController.benefit = health.PredictHealthUpgradeIncrease(); return; case BuildingManager.BuildingAction.UPGRADE_PRODUCTION: coinController.titleText = "Upgrade: Renovate Building"; coinController.bodyText = "Improve the efficiency of this building."; coinController.cost = BuildingManager.GetProductionUpgradeCost(logic); return; case BuildingManager.BuildingAction.REPAIR: coinController.titleText = "Repair"; coinController.bodyText = "Repair this building to full health. Cost based on damage."; coinController.cost = BuildingManager.instance.GetRepairCost(health); coinController.benefit = health.MaxHealth - health.CurrentHealth; return; } }
private int AggregateBuildingStats(Func <BuildingLogicBase, int> statGetter) { return(_activeBuildingLogic.Aggregate(0, (sum, buildingLogic) => { if (buildingLogic == null) { return sum; } BuildingLogicBase logic = buildingLogic.GetComponent <BuildingLogicBase>(); if (logic == null) { return sum; } return sum + statGetter(logic); })); }
public int GetProductionUpgradeCost(BuildingLogicBase logic) { int baseCost = logic.GetComponent <BuildingInfo>().BaseCost; switch (logic.ProductionLevel) { case 0: return(baseCost / 4); case 1: return(baseCost / 3); default: Debug.LogError("Unexpected branch in GetUpgradeCost"); Debug.LogError($"Building production level {logic.ProductionLevel}"); return(baseCost); } }
public void ExecuteActionOnBuilding(Vector3Int position, BuildingAction action) { GameObject buildingLogic = _positionToBuildingLogic[position]; BuildingHealth health = buildingLogic.GetComponent <BuildingHealth>(); BuildingLogicBase logic = buildingLogic.GetComponent <BuildingLogicBase>(); switch (action) { case BuildingAction.UPGRADE_HEALTH: int healthUpgradeCost = GetHealthUpgradeCost(health); if (healthUpgradeCost > playerStats.GetMind()) { Debug.Log("Upgrade health failed"); return; } health.DoUpgradeHealth(); playerStats.UpdateMind(-healthUpgradeCost); ConstructionSpace space = _positionToConstructionSpace[position]; if (health.WallSprite != null && !_constructionSpaceToWallSprite.ContainsKey(space)) { GameObject wallSprite = Instantiate(WallPrefab); wallSprite.GetComponent <SpriteRenderer>().sprite = health.WallSprite; wallSprite.transform.position = GetConstructionSpaceWorldCenter(space) + Vector3.back; _constructionSpaceToWallSprite[space] = wallSprite; } switch (logic.GetBuildingType()) { case "library": audioManager.PlayUpLibrary(); break; case "market": audioManager.PlayUpMarket(); break; case "gym": audioManager.PlayUpGym(); break; case "amp": audioManager.PlayUpAmp(); break; case "vice": audioManager.PlayUpVice(); break; } return; case BuildingAction.UPGRADE_PRODUCTION: int productionUpgradeCost = GetProductionUpgradeCost(logic); if (productionUpgradeCost > playerStats.GetMind()) { Debug.Log("Upgrade production failed"); return; } logic.DoUpgradeProduction(); playerStats.UpdateMind(-productionUpgradeCost); switch (logic.GetBuildingType()) { case "library": audioManager.PlayUpLibrary(); break; case "market": audioManager.PlayUpMarket(); break; case "gym": audioManager.PlayUpGym(); break; case "amp": audioManager.PlayUpAmp(); break; case "vice": audioManager.PlayUpVice(); break; } return; case BuildingAction.REPAIR: audioManager.PlayBuildingBuilt(); int repairCost = GetRepairCost(health); if (repairCost > playerStats.GetMind()) { Debug.Log("Repair failed"); return; } health.DoRepair(); playerStats.UpdateMind(-repairCost); return; } }