Exemplo n.º 1
0
    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;
        }
    }
Exemplo n.º 2
0
 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);
     }));
 }
Exemplo n.º 3
0
    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);
        }
    }
Exemplo n.º 4
0
    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;
        }
    }