public static GameObject FromSnapshot(TowerSnapshot snapshot)
        {
            var tower = Instantiate(GameState.Instance.TowersByName[snapshot.Name], snapshot.Position, Quaternion.identity);

            var towerBase = tower.GetComponentInChildren <TowerBase>();

            towerBase.Level              = snapshot.Level;
            towerBase.Experience         = snapshot.Experience;
            towerBase.ExperienceRequired = snapshot.ExperienceRequired;
            towerBase.DamageDone         = snapshot.DamageDone;
            towerBase.Kills              = snapshot.Kills;
            towerBase.SellCost.Base      = snapshot.SellCost.Base;
            towerBase.SellCost.Gain      = snapshot.SellCost.Gain;

            towerBase.Items.Clear();
            foreach (var item in snapshot.Items)
            {
                towerBase.Items.Add(ItemBase.FromSnapshot(item));
            }

            towerBase._upgradeLevels = snapshot.Upgrades;
            towerBase._isLoading     = true;

            return(tower);
        }