public void UpgradeTower(int choice)
    {
        if (PlayerPrefs.HasKey("Used stars"))
        {
            int currentlyUsedStars = PlayerPrefs.GetInt("Used stars");
            PlayerPrefs.SetInt("Used stars", currentlyUsedStars + levelPrice);
        }
        else
        {
            PlayerPrefs.SetInt("Used stars", levelPrice);
        }
        PlayerPrefs.SetInt(gameObject.name, 1);
        starsCounter.Calculate();
        SetButtonsInteractable(false);
        PlayerPrefs.SetInt(gameObject.name + " choice", choice);

        IceTowerUpgrade previousTowerUpgrades = SaveLoad.Load(towerName);

        SaveLoad.Save(previousTowerUpgrades + upgradeSelection[choice]);
        if (!subscribedToDeleteUpgrades)
        {
            subscribedToDeleteUpgrades = true;
            deleteUpgrades            += DeleteUpgrades;
        }
        isUpgraded = true;
        UpdateInfo();
        towerInfoMenu.UpdateTowerInfo();
    }
 public static IceTowerUpgrade Load(string towerName)
 {
     if (File.Exists(Path.Combine(Application.persistentDataPath, towerName + ".ug")))
     {
         BinaryFormatter bf          = new BinaryFormatter();
         FileStream      file        = File.Open(Path.Combine(Application.persistentDataPath, towerName + ".ug"), FileMode.Open);
         IceTowerUpgrade upgradeInfo = (IceTowerUpgrade)bf.Deserialize(file);
         file.Close();
         return(upgradeInfo);
     }
     return(new IceTowerUpgrade(towerName));
 }
    public static void Save(IceTowerUpgrade upgradeInfo)
    {
        BinaryFormatter bf = new BinaryFormatter();
        FileStream      file;

        if (File.Exists(Path.Combine(Application.persistentDataPath, upgradeInfo.towerName + ".ug")))
        {
            file = File.Open(Path.Combine(Application.persistentDataPath, upgradeInfo.towerName + ".ug"), FileMode.Truncate);
        }
        else
        {
            file = File.Create(Path.Combine(Application.persistentDataPath, upgradeInfo.towerName + ".ug"));
        }
        bf.Serialize(file, upgradeInfo);
        file.Close();
    }
    public static IceTowerUpgrade operator +(IceTowerUpgrade tower1, IceTowerUpgrade tower2)
    {
        IceTowerUpgrade newTower = new IceTowerUpgrade();

        newTower.towerName = tower1.towerName;

        newTower.starsPrice               = tower1.starsPrice + tower2.starsPrice;
        newTower.additionalDamage         = tower1.additionalDamage + tower2.additionalDamage;
        newTower.armorPiercing            = tower1.armorPiercing + tower2.armorPiercing;
        newTower.additionalAttackSpeed    = tower1.additionalAttackSpeed + tower2.additionalAttackSpeed;
        newTower.basePriceDecrease        = tower1.basePriceDecrease + tower2.basePriceDecrease;
        newTower.upgradePriceDecrease     = tower1.upgradePriceDecrease + tower2.upgradePriceDecrease;
        newTower.additionalRange          = tower1.additionalRange + tower2.additionalRange;
        newTower.additionalExplosionRange = tower1.additionalExplosionRange + tower2.additionalExplosionRange;
        newTower.additionalFreezingRate   = tower1.additionalFreezingRate + tower2.additionalFreezingRate;
        newTower.additionalFreezingTime   = tower1.additionalFreezingTime + tower2.additionalFreezingTime;

        return(newTower);
    }
    public void Calculate()
    {
        int starsAmount = 0;

        for (int i = 1; i <= numberOfLevels; i++)
        {
            string saveName = "Level " + i + " stars";

            if (PlayerPrefs.HasKey(saveName))
            {
                starsAmount += PlayerPrefs.GetInt(saveName);
            }
        }

        foreach (string name in towerNames)
        {
            IceTowerUpgrade info = SaveLoad.Load(name);
            starsAmount -= info.starsPrice;
        }

        starsNumber.text = starsAmount.ToString();
        TotalStars       = starsAmount;
    }
 void Awake()
 {
     iceTowerAttack = gameObject.GetComponent <IceTowerAttack>();
     upgradeBonuses = SaveLoad.Load(towerName);
 }