private void Awake()
        {
            _linkedTower = GetComponentInParent<Tower>();

            // We should change our rank when it actually changes
            _linkedTower.RankedHasChangedEvent += SetImageSpriteBasedOnRank;

            _rankImage = GetComponent<SpriteRenderer>();

            SetImageSpriteBasedOnRank(_linkedTower.Rank);
        }
        /// <summary>
        /// Changing the cost logic
        /// We're not only getting the cost, but also dimming the Upgrade button
        /// </summary>
        /// <param name="tower"></param>
        /// <returns></returns>
        protected override int GetCostFromTower(Tower tower)
        {
            var towerUpgradePrice = tower.TowerPreferences[tower.Rank].UpgradeCost;

            if (towerUpgradePrice > PlayerStatus.Instance.Money)
            {
                GetComponent<Image>().color = Color.gray;
                // And subscribe to the money changed event so possobly later we will be able to buy that tower
                GlobalEventSystem<MoneyChangedEvent>.EventHappened += MoneyHasChangedEvent;
            }

            return towerUpgradePrice;
        }
 /// <summary>
 /// Gets cost from the provided tower
 /// </summary>
 /// <param name="tower">Tower from which we should get cost</param>
 /// <returns>Cost</returns>
 protected virtual int GetCostFromTower(Tower tower)
 {
     return -tower.TowerPreferences[tower.Rank].SellCost;
 }