public OverrideBaseTests()
        {
            GameData          gameData          = new FileGameData(ModsTestFolder);
            XmlDataOverriders xmlDataOverriders = XmlDataOverriders.Load(gameData, OverrideFileNameSuffix);

            HeroOverrideLoader = (HeroOverrideLoader)xmlDataOverriders.GetOverrider(typeof(HeroDataParser));
            HeroDataOverride   = HeroOverrideLoader.GetOverride(CHeroId);

            LoadInitialValues();
        }
        public void HeroUnitTests()
        {
            Assert.IsTrue(HeroDataOverride.ContainsHeroUnit("LittleLoco"));

            HeroDataOverride heroUnitOverride = HeroOverrideLoader.GetOverride("LittleLoco");

            Assert.IsTrue(heroUnitOverride.EnergyTypeOverride.Enabled);
            Assert.AreEqual("None", heroUnitOverride.EnergyTypeOverride.EnergyType);

            Assert.IsTrue(heroUnitOverride.EnergyOverride.Enabled);
            Assert.AreEqual(0, heroUnitOverride.EnergyOverride.Energy);
        }
 public void HeroIdDoesntExistTest()
 {
     Assert.IsNull(HeroOverrideLoader.GetOverride("KaboomBaby"));
 }
        /// <summary>
        /// Returns the parsed game data from the given ids. Multiple ids may be used to identity one item.
        /// </summary>
        /// <param name="id">The ids of the item to parse.</param>
        /// <returns></returns>
        public Hero Parse(params string[] ids)
        {
            string heroId = ids.FirstOrDefault();

            if (string.IsNullOrEmpty(heroId))
            {
                return(null);
            }

            TalentsArray = new XmlArrayElement();

            UnitData unitData = XmlDataService.UnitData;

            unitData.IsAbilityTierFilterEnabled = true;
            unitData.IsAbilityTypeFilterEnabled = true;
            unitData.IsHeroParsing = true;
            unitData.Localization  = Localization;

            Hero hero = new Hero
            {
                Name        = GameData.GetGameString(DefaultData.HeroData.HeroName.Replace(DefaultData.IdPlaceHolder, heroId)),
                Description = new TooltipDescription(GameData.GetGameString(DefaultData.HeroData.HeroDescription.Replace(DefaultData.IdPlaceHolder, heroId)), Localization),
                CHeroId     = heroId,
                Id          = heroId,
            };

            HeroDataOverride = HeroOverrideLoader.GetOverride(heroId) ?? new HeroDataOverride();

            XElement heroElement = GameData.MergeXmlElements(GameData.Elements(ElementType).Where(x => x.Attribute("id")?.Value == heroId));

            if (heroElement == null)
            {
                return(null);
            }

            SetDefaultValues(hero);

            // must be done first to any find any units.
            FindUnits(heroElement, hero);

            // adds from overrides, parses for abilities
            AddHeroUnits(hero, unitData);

            // parses the hero's unit data; abilities
            // this must come after AddHeroUnits to correctly set the abilityTalentLinks for the talents
            unitData.SetUnitData(hero, HeroDataOverride, true);

            // parses the hero's hero data; talents
            SetData(heroElement, hero);
            SetTalents(hero);

            ClearHeroUnitsFromUnitIds(hero);

            // execute all overrides
            ApplyOverrides(hero, HeroDataOverride);
            foreach (Hero heroUnit in hero.HeroUnits)
            {
                ApplyOverrides(heroUnit, HeroOverrideLoader.GetOverride(heroUnit.CHeroId) ?? new HeroDataOverride());
            }

            ValidateAbilityTalentLinkIds(hero);

            return(hero);
        }