void Start()
    {
        ProjectileTower = GetComponent <ProjectileTower>();

        if (Barrel == null || Turret == null)
        {
            return;
        }

        if (Barrel.parent != Turret)
        {
            Barrel.parent = Turret;
        }
    }
    /// <summary>
    /// Returns Dictionary of Tower types from XML file
    ///
    /// Author: Cole Twitchell
    /// </summary>
    /// <returns>Dictionary of tower types</returns>
    public static Dictionary <string, Tower> GetTowersFromXml()
    {
        if (towers != null)
        {
            return(towers);
        }

        Dictionary <string, Tower> retDictionary = new Dictionary <string, Tower>();

        XmlDocument doc       = new XmlDocument();
        TextAsset   textasset = (TextAsset)Resources.Load(TOWERS_XML_FILEPATH, typeof(TextAsset));

        doc.LoadXml(textasset.text);

        Transform prefabHolder = GameObject.Find("PrefabHolder").transform;

        foreach (XmlNode node in doc.SelectSingleNode("towers").SelectNodes("proj-tower"))
        {
            string    name             = node.SelectSingleNode("name").InnerText;
            int       cost             = int.Parse(node.SelectSingleNode("cost").InnerText);
            int       upgradeCost      = int.Parse(node.SelectSingleNode("upgrade-cost").InnerText);
            float     upgradeCostScale = float.Parse(node.SelectSingleNode("upgrade-cost-scale").InnerText);
            int       maxLevel         = int.Parse(node.SelectSingleNode("max-level").InnerText);
            float     range            = float.Parse(node.SelectSingleNode("range").InnerText);
            ColorType color            = (ColorType)ColorType.Parse(typeof(ColorType), node.SelectSingleNode("color").InnerText);
            string    description      = node.SelectSingleNode("description").InnerText;

            // Projectile tower specific
            float projectileDamage = float.Parse(node.SelectSingleNode("proj-damage").InnerText);
            float projectileSpeed  = float.Parse(node.SelectSingleNode("proj-speed").InnerText);
            float attackRate       = float.Parse(node.SelectSingleNode("attack-rate").InnerText);

            ProjectileTower tower = (GameObject.Instantiate(Resources.Load("Prefabs/Towers/TowerPrefabs/" + name), LevelManager.PrefabHolderParent) as GameObject).GetComponent <ProjectileTower>();
            tower.Initialize(name, cost, upgradeCost, upgradeCostScale, maxLevel, range, color, description, attackRate, projectileSpeed, projectileDamage);

            retDictionary.Add(name, tower);
        }

        foreach (XmlNode node in doc.SelectSingleNode("towers").SelectNodes("aoe-tower"))
        {
            string    name             = node.SelectSingleNode("name").InnerText;
            int       cost             = int.Parse(node.SelectSingleNode("cost").InnerText);
            int       upgradeCost      = int.Parse(node.SelectSingleNode("upgrade-cost").InnerText);
            float     upgradeCostScale = float.Parse(node.SelectSingleNode("upgrade-cost-scale").InnerText);
            int       maxLevel         = int.Parse(node.SelectSingleNode("max-level").InnerText);
            float     range            = float.Parse(node.SelectSingleNode("range").InnerText);
            ColorType color            = (ColorType)ColorType.Parse(typeof(ColorType), node.SelectSingleNode("color").InnerText);
            string    description      = node.SelectSingleNode("description").InnerText;

            // Projectile tower specific
            float aoeDamage  = float.Parse(node.SelectSingleNode("aoe-damage").InnerText);
            float attackRate = float.Parse(node.SelectSingleNode("attack-rate").InnerText);

            AoETower tower = (GameObject.Instantiate(Resources.Load("Prefabs/Towers/TowerPrefabs/" + name), LevelManager.PrefabHolderParent) as GameObject).GetComponent <AoETower>();
            tower.Initialize(name, cost, upgradeCost, upgradeCostScale, maxLevel, range, color, description, attackRate, aoeDamage);

            retDictionary.Add(name, tower);
        }

        foreach (XmlNode node in doc.SelectSingleNode("towers").SelectNodes("dot-tower"))
        {
            string    name             = node.SelectSingleNode("name").InnerText;
            int       cost             = int.Parse(node.SelectSingleNode("cost").InnerText);
            int       upgradeCost      = int.Parse(node.SelectSingleNode("upgrade-cost").InnerText);
            float     upgradeCostScale = float.Parse(node.SelectSingleNode("upgrade-cost-scale").InnerText);
            int       maxLevel         = int.Parse(node.SelectSingleNode("max-level").InnerText);
            float     range            = float.Parse(node.SelectSingleNode("range").InnerText);
            ColorType color            = (ColorType)ColorType.Parse(typeof(ColorType), node.SelectSingleNode("color").InnerText);
            string    description      = node.SelectSingleNode("description").InnerText;

            // Projectile tower specific
            float doTDamage = float.Parse(node.SelectSingleNode("dot-damage").InnerText);

            DoTTower tower = (GameObject.Instantiate(Resources.Load("Prefabs/Towers/TowerPrefabs/" + name), LevelManager.PrefabHolderParent) as GameObject).GetComponent <DoTTower>();
            tower.Initialize(name, cost, upgradeCost, upgradeCostScale, maxLevel, range, color, description, doTDamage);

            retDictionary.Add(name, tower);
        }

        towers = retDictionary;

        return(retDictionary);
    }