/// <summary> /// Looks for an ability from the given <paramref name="abilityTalentId"/>, returning a value that indicates whether such value exists. /// </summary> /// <param name="abilityTalentId">The <see cref="AbilityTalentId"/> to look for.</param> /// <param name="ability">The <see cref="Ability"/> that is found.</param> /// <returns><see langword="true"/> if the value was found; otherwise <see langword="false"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="abilityTalentId"/> is <see langword="null"/>.</exception> public bool TryGetAbility(AbilityTalentId abilityTalentId, [NotNullWhen(true)] out Ability?ability) { if (abilityTalentId == null) { throw new ArgumentNullException(nameof(abilityTalentId)); } return(_abilitiesByAbilityTalentId.TryGetValue(abilityTalentId, out ability)); }
/// <summary> /// Gets the ability from the <paramref name="abilityTalentId"/>. /// </summary> /// <param name="abilityTalentId">An <see cref="AbilityTalentId"/>.</param> /// <returns>An <see cref="Ability"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="abilityTalentId"/> is <see langword="null"/>.</exception> /// <exception cref="KeyNotFoundException"><paramref name="abilityTalentId"/> was not found.</exception> public Ability GetAbility(AbilityTalentId abilityTalentId) { if (abilityTalentId == null) { throw new ArgumentNullException(nameof(abilityTalentId)); } return(_abilitiesByAbilityTalentId[abilityTalentId]); }
/// <summary> /// Determines whether the value exists. /// </summary> /// <param name="abilityTalentId">An <see cref="AbilityTalentId"/>.</param> /// <returns><see langword="true"/> if the value was found; otherwise <see langword="false"/>.</returns> /// <exception cref="ArgumentNullException"><paramref name="abilityTalentId"/> is <see langword="null"/>.</exception> public bool ContainsAbility(AbilityTalentId abilityTalentId) { if (abilityTalentId == null) { throw new ArgumentNullException(nameof(abilityTalentId)); } return(_abilitiesByAbilityTalentId.ContainsKey(abilityTalentId)); }
public void EqualsTest(string referenceId, string buttonId, AbilityTypes abilityTypes, bool isPassive) { AbilityTalentId abilityTalentId = new AbilityTalentId(referenceId, buttonId) { AbilityType = abilityTypes, IsPassive = isPassive, }; Assert.AreEqual(abilityTalentId, abilityTalentId); }
public void UpdateGameStringsThrowArgumentNullException() { Ability ability = new() { AbilityTalentId = new AbilityTalentId("AlarakDiscordStrike", "AlarakDiscordStrike") { AbilityType = AbilityTypes.Q, }, }; Assert.ThrowsException <ArgumentNullException>(() => ability.UpdateGameStrings(null !)); }
public void NotSameObjectTest() { AbilityTalentId abilityTalentId = new AbilityTalentId("abil1", "abil77") { AbilityType = AbilityTypes.Q, IsPassive = false, }; Assert.AreNotEqual(new List <string>() { "asdf" }, abilityTalentId); }
public void EqualsMethodTests() { AbilityTalentId abilityTalentId = new AbilityTalentId("abil1", "abilbutton") { AbilityType = AbilityTypes.W, IsPassive = true, }; Assert.IsFalse(abilityTalentId.Equals((int?)null)); Assert.IsFalse(abilityTalentId.Equals(5)); Assert.IsTrue(abilityTalentId.Equals(obj: abilityTalentId)); }
public void UpdateGameStringsThrowArgumentNullException() { Talent talent = new() { AbilityTalentId = new AbilityTalentId("ZuljinWrongPlaceWrongTime", "ZuljinWrongPlaceWrongTime") { AbilityType = AbilityTypes.W, }, Tier = TalentTiers.Level1, }; Assert.ThrowsException <ArgumentNullException>(() => talent.UpdateGameStrings(null !)); }
public void NotEqualsTest(string referenceId, string buttonId, AbilityTypes abilityTypes, bool isPassive) { AbilityTalentId abilityTalentId = new AbilityTalentId("abil1", "abil77") { AbilityType = AbilityTypes.Q, IsPassive = false, }; Assert.AreNotEqual(abilityTalentId, new AbilityTalentId(referenceId, buttonId) { AbilityType = abilityTypes, IsPassive = isPassive, }); }
public void UpdateGameStringsTest() { using GameStringDocument gameStringDocument = GameStringDocument.Parse(LoadEnusLocalizedStringData()); Talent talent = new() { AbilityTalentId = new AbilityTalentId("ZuljinWrongPlaceWrongTime", "ZuljinWrongPlaceWrongTime") { AbilityType = AbilityTypes.W, }, Tier = TalentTiers.Level1, }; talent.UpdateGameStrings(gameStringDocument); Assert.AreEqual("Bonus Twin Cleave damage at apex", talent.Tooltip.ShortTooltip !.RawDescription); }
public void UpdateGameStringsTest() { using GameStringDocument gameStringDocument = GameStringDocument.Parse(LoadEnusLocalizedStringData()); Ability ability = new() { AbilityTalentId = new AbilityTalentId("AlarakDiscordStrike", "AlarakDiscordStrike") { AbilityType = AbilityTypes.Q, }, }; ability.UpdateGameStrings(gameStringDocument); Assert.AreEqual("Discord Strike", ability.Name); Assert.AreEqual("Cooldown: 8 seconds", ability.Tooltip.Cooldown.CooldownTooltip !.RawDescription); Assert.AreEqual("<s val=\"bfd4fd\" name=\"StandardTooltipDetails\">Mana: 55</s>", ability.Tooltip.Energy.EnergyTooltip !.RawDescription); Assert.AreEqual("After a <c val=\"bfd4fd\">0.5</c> second delay, enemies in front of Alarak take <c val=\"bfd4fd\">175~~0.04~~</c> damage and are silenced for <c val=\"bfd4fd\">1.5</c> seconds. ", ability.Tooltip.FullTooltip !.RawDescription); Assert.AreEqual("Damage and silence enemies in an area", ability.Tooltip.ShortTooltip !.RawDescription); Assert.AreEqual("No life", ability.Tooltip.Life.LifeCostTooltip !.RawDescription); }
/// <summary> /// Creates an ability from a <see cref="AbilityTalentId"/>. /// </summary> /// <param name="unitId"></param> /// <param name="abilityTalentId"></param> /// <returns></returns> public Ability?CreateAbility(string unitId, AbilityTalentId abilityTalentId) { if (string.IsNullOrEmpty(unitId)) { throw new ArgumentException("Argument cannot be null or empty", nameof(unitId)); } if (abilityTalentId == null) { throw new ArgumentNullException(nameof(abilityTalentId)); } Ability ability = new Ability { AbilityTalentId = abilityTalentId, Tier = AbilityTiers.Activable, }; ability.AbilityTalentId.AbilityType = AbilityTypes.Active; // find all abilities and loop through them foreach (XElement element in GetAbilityElements(ability.AbilityTalentId.ReferenceId)) { SetAbilityTalentData(element, ability, string.Empty); } XElement?buttonElement = GameData.MergeXmlElements(GameData.Elements("CButton").Where(x => x.Attribute("id")?.Value == abilityTalentId.ButtonId)); if (buttonElement != null) { SetButtonData(buttonElement, ability); } // if no name was set, then use the ability name if (string.IsNullOrEmpty(ability.Name) && DefaultData.AbilData != null && GameData.TryGetGameString(DefaultData.AbilData.AbilName.Replace(DefaultData.IdPlaceHolder, ability.AbilityTalentId.ReferenceId, StringComparison.OrdinalIgnoreCase), out string?value)) { ability.Name = value; } return(ability); }
public void OperatorEqualTest(string referenceId, string buttonId, AbilityTypes abilityTypes, bool isPassive, string referenceId2, string buttonId2, AbilityTypes abilityTypes2, bool isPassive2) { AbilityTalentId abilityTalentId2 = new AbilityTalentId(referenceId2, buttonId2) { AbilityType = abilityTypes2, IsPassive = isPassive2, }; AbilityTalentId abilityTalentId = new AbilityTalentId(referenceId, buttonId) { AbilityType = abilityTypes, IsPassive = isPassive, }; #pragma warning disable SA1131 // Use readable conditions Assert.IsFalse(null ! == abilityTalentId2); #pragma warning restore SA1131 // Use readable conditions Assert.IsFalse(abilityTalentId2 == null !); Assert.IsTrue(null ! == (AbilityTalentId)null !); Assert.IsTrue(abilityTalentId == abilityTalentId2); Assert.AreEqual(abilityTalentId.GetHashCode(), abilityTalentId2 !.GetHashCode()); }
protected override void SetOverride(XElement element) { if (element is null) { throw new ArgumentNullException(nameof(element)); } HeroDataOverride heroDataOverride = new HeroDataOverride(); AbilityPropertyOverride abilityOverride = new AbilityPropertyOverride(); TalentPropertyOverride talentOverride = new TalentPropertyOverride(); WeaponPropertyOverride weaponOverride = new WeaponPropertyOverride(); PortraitPropertyOverride portraitOverride = new PortraitPropertyOverride(); string heroId = element.Attribute("id")?.Value ?? string.Empty; foreach (XElement dataElement in element.Elements()) { string elementName = dataElement.Name.LocalName; string valueAttribute = dataElement.Attribute("value")?.Value ?? string.Empty; XElement?overrideElement; switch (elementName) { case "Name": heroDataOverride.NameOverride = (true, valueAttribute); break; case "HyperlinkId": heroDataOverride.HyperlinkIdOverride = (true, valueAttribute); break; case "CUnit": heroDataOverride.CUnitOverride = (true, valueAttribute); break; case "EnergyType": heroDataOverride.EnergyTypeOverride = (true, valueAttribute); break; case "Energy": string energyValue = valueAttribute; if (int.TryParse(energyValue, out int value)) { if (value < 0) { value = 0; } heroDataOverride.EnergyOverride = (true, value); } else { heroDataOverride.EnergyOverride = (true, 0); } break; case "ParentLink": heroDataOverride.ParentLinkOverride = (true, valueAttribute ?? string.Empty); break; case "Ability": case "Talent": string id = dataElement.Attribute("id")?.Value ?? string.Empty; string?abilityType = dataElement.Attribute("abilityType")?.Value; string?passiveAbility = dataElement.Attribute("passive")?.Value; string?addedAbility = dataElement.Attribute("add")?.Value; AbilityTalentId abilityTalentId = new AbilityTalentId(string.Empty, string.Empty); string[] idSplit = id.Split(',', StringSplitOptions.RemoveEmptyEntries); if (idSplit.Length >= 2) { abilityTalentId.ReferenceId = idSplit[0]; abilityTalentId.ButtonId = idSplit[1]; } else if (idSplit.Length == 1) { abilityTalentId.ReferenceId = idSplit[0]; abilityTalentId.ButtonId = idSplit[0]; } if (Enum.TryParse(abilityType, true, out AbilityTypes abilityTypeResult)) { abilityTalentId.AbilityType = abilityTypeResult; } if (bool.TryParse(passiveAbility, out bool abilityPassiveResult)) { abilityTalentId.IsPassive = abilityPassiveResult; } if (elementName == "Ability") { if (bool.TryParse(addedAbility, out bool abilityAddedResult)) { heroDataOverride.AddAddedAbility(abilityTalentId, abilityAddedResult); if (!abilityAddedResult) { continue; } } } if (!string.IsNullOrEmpty(id)) { overrideElement = dataElement.Element("Override"); if (overrideElement != null) { if (elementName == "Ability") { abilityOverride.SetOverride(abilityTalentId.ToString(), overrideElement, heroDataOverride.PropertyAbilityOverrideMethodByAbilityId); } else { talentOverride.SetOverride(abilityTalentId.ToString(), overrideElement, heroDataOverride.PropertyTalentOverrideMethodByTalentId); } } } break; case "Portrait": overrideElement = dataElement.Element("Override"); if (overrideElement != null) { portraitOverride.SetOverride(heroId, overrideElement, heroDataOverride.PropertyPortraitOverrideMethodByHeroId); } break; case "HeroUnit": string?heroUnitId = dataElement.Attribute("id")?.Value; string?removeHeroUnit = dataElement.Attribute("remove")?.Value; if (string.IsNullOrEmpty(heroUnitId)) { continue; } if (bool.TryParse(removeHeroUnit, out bool heroUnitRemoveResult)) { if (heroUnitRemoveResult) { heroDataOverride.AddRemovedHeroUnit(heroUnitId); continue; } } heroDataOverride.AddHeroUnit(heroUnitId); SetOverride(dataElement); break; case "Weapon": string?weaponId = dataElement.Attribute("id")?.Value; string?addedWeapon = dataElement.Attribute("add")?.Value; if (string.IsNullOrEmpty(weaponId)) { continue; } if (bool.TryParse(addedWeapon, out bool weaponValidResult)) { heroDataOverride.AddAddedWeapon(weaponId, weaponValidResult); if (!weaponValidResult) { continue; } } overrideElement = dataElement.Element("Override"); if (overrideElement != null) { weaponOverride.SetOverride(weaponId, overrideElement, heroDataOverride.PropertyWeaponOverrideMethodByWeaponId); } break; } } DataOverridesById[heroId] = heroDataOverride; }