void ParseWeaponFilterElement(XElement weaponFilterElement, ref WeaponCategoryFlags?flags, ref WeaponCategoryMatchType matchType) { //Optionally get match type XAttribute matchTypeAttribute = weaponFilterElement.Attribute("matchType"); if (matchTypeAttribute != null) { if (!Enum.TryParse <WeaponCategoryMatchType>(matchTypeAttribute.Value, out matchType)) { _errorCollection.AddAttributeValueInvalidValue(weaponFilterElement, matchTypeAttribute); } } //Iterate through all elements. IEnumerable <XElement> elements = weaponFilterElement.Elements(); foreach (XElement element in elements) { if (element.Name.LocalName != "Category") { _errorCollection.AddInvalidElement(element); continue; } //Get name XAttribute nameAttribute = element.Attribute("name"); if (nameAttribute != null) { WeaponCategoryFlags weaponCategoryFlag; if (Enum.TryParse <WeaponCategoryFlags>(nameAttribute.Value, out weaponCategoryFlag)) { if (!flags.HasValue) { flags = weaponCategoryFlag; } else { flags |= weaponCategoryFlag; } } else { _errorCollection.AddAttributeValueInvalidValue(element, nameAttribute); } } else { _errorCollection.AddAttributeNotFound("name", element); } } }
public static bool HasWeaponCategoryFlags(WeaponTypes weaponType, WeaponCategoryFlags flags, WeaponCategoryMatchType matchType = WeaponCategoryMatchType.Any) { WeaponCategoryFlags weaponFlags = WeaponCategoryFlagsArray[(int)weaponType]; switch (matchType) { case WeaponCategoryMatchType.Any: return((weaponFlags & flags) != 0); case WeaponCategoryMatchType.All: return((weaponFlags & flags) == flags); case WeaponCategoryMatchType.Exact: return((weaponFlags & ~flags) == 0); } return(false); }