/// <summary>
        /// Builds the EnhancerData represented by this builder's parameters.
        /// </summary>
        /// <returns>The newly created EnhancerData</returns>
        public EnhancerData Build()
        {
            EnhancerData enhancerData = new EnhancerData();
            var          t            = Traverse.Create(enhancerData);

            // Set the name for the unity object
            enhancerData.name = this.ID;

            // Upgrades are contained within a relic effect - this is mandatory or the game will crash
            List <RelicEffectData> Effects = new List <RelicEffectData>
            {
                new RelicEffectDataBuilder
                {
                    relicEffectClassName  = "RelicEffectCardUpgrade",
                    ParamCardUpgradeData  = Upgrade.Build(),
                    ParamCardType         = CardType,
                    ParamCharacterSubtype = "SubtypesData_None",
                }.Build()
            };

            t.Field("effects").SetValue(Effects);

            // Grab the LinkedClass from the ClanID
            this.LinkedClass = ProviderManager.SaveManager.GetAllGameData().FindClassData(this.ClanID);
            t.Field("linkedClass").SetValue(LinkedClass);

            // Take care of the localized strings
            BuilderUtils.ImportStandardLocalization(this.DescriptionKey, this.Description);
            t.Field("descriptionKey").SetValue(DescriptionKey);

            BuilderUtils.ImportStandardLocalization(this.NameKey, this.Name);
            t.Field("nameKey").SetValue(NameKey);

            // Create the icon from the asset path
            if (this.AssetPath != null)
            {
                Sprite iconSprite = CustomAssetManager.LoadSpriteFromPath(this.BaseAssetPath + "/" + this.AssetPath);
                t.Field("icon").SetValue(iconSprite);
            }

            // A steak pun is a rare medium well done.
            t.Field("rarity").SetValue(Rarity);

            return(enhancerData);
        }