Пример #1
0
        void ParseMaximumWeaponCountElement(XElement maximumWeaponCountElement, WeaponSettingGuarantee weaponSettingGuarantee, SettingLimits weaponCountSettingLimits)
        {
            weaponSettingGuarantee.MaximumWeaponCount = CreateValueGenerator(maximumWeaponCountElement, weaponCountSettingLimits);

            //Parse optional attributes.
            IEnumerable <XAttribute> attributes = maximumWeaponCountElement.Attributes();

            foreach (XAttribute attribute in attributes)
            {
                if (attribute.Name == "forceExcessWeaponsToValue")
                {
                    int intValue;
                    if (TryParseIntegerAttribute(maximumWeaponCountElement, attribute, out intValue))
                    {
                        weaponSettingGuarantee.MaximumWeaponCountForcedValue = intValue;
                    }
                }
                else
                {
                    _errorCollection.AddInvalidAttribute(maximumWeaponCountElement, attribute);
                }
            }
        }
Пример #2
0
        WeaponSettingGuarantee CreateWeaponSettingGuarantee(XElement weaponSettingGuaranteeElement)
        {
            //Get setting
            XAttribute settingAttribute = weaponSettingGuaranteeElement.Attribute("setting");

            if (settingAttribute == null)
            {
                _errorCollection.AddAttributeNotFound("setting", weaponSettingGuaranteeElement);
                return(null);
            }

            WeaponSettings weaponSetting = WeaponSettings.Count;

            Enum.TryParse <WeaponSettings>(settingAttribute.Value, out weaponSetting);
            if (weaponSetting == WeaponSettings.Count)
            {
                _errorCollection.AddAttributeValueInvalidValue(weaponSettingGuaranteeElement, settingAttribute);
                return(null);
            }

            WeaponSettingGuarantee weaponSettingGuarantee    = new WeaponSettingGuarantee(weaponSetting);
            SettingLimits          weaponCountSettingLimits  = new SettingLimits(0, 64);
            SettingLimits          settingValueSettingLimits = new SettingLimits(0, 255);

            //Iterate through all elements.
            FoundElements foundElements = new FoundElements();

            IEnumerable <XElement> elements = weaponSettingGuaranteeElement.Elements();

            foreach (XElement element in elements)
            {
                //Handle minimum weapons element.
                if (element.Name.LocalName == ElementTypes.MinimumWeaponCount.ToString())
                {
                    if (!foundElements.Contains(ElementTypes.MinimumWeaponCount))
                    {
                        foundElements.Add(ElementTypes.MinimumWeaponCount, element);

                        weaponSettingGuarantee.MinimumWeaponCount = CreateValueGenerator(element, weaponCountSettingLimits);
                    }
                    else
                    {
                        _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MinimumWeaponCount));
                    }
                }
                //Handle maximum weapons element.
                else if (element.Name.LocalName == ElementTypes.MaximumWeaponCount.ToString())
                {
                    if (!foundElements.Contains(ElementTypes.MaximumWeaponCount))
                    {
                        foundElements.Add(ElementTypes.MaximumWeaponCount, element);

                        ParseMaximumWeaponCountElement(element, weaponSettingGuarantee, weaponCountSettingLimits);
                    }
                    else
                    {
                        _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MaximumWeaponCount));
                    }
                }
                //Handle minimum value element.
                else if (element.Name.LocalName == ElementTypes.MinimumSettingValue.ToString())
                {
                    if (!foundElements.Contains(ElementTypes.MinimumSettingValue))
                    {
                        foundElements.Add(ElementTypes.MinimumSettingValue, element);

                        weaponSettingGuarantee.MinimumSettingValue = CreateValueGenerator(element, settingValueSettingLimits);
                    }
                    else
                    {
                        _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MinimumSettingValue));
                    }
                }
                //Handle maximum weapons element.
                else if (element.Name.LocalName == ElementTypes.MaximumSettingValue.ToString())
                {
                    if (!foundElements.Contains(ElementTypes.MaximumSettingValue))
                    {
                        foundElements.Add(ElementTypes.MaximumSettingValue, element);

                        weaponSettingGuarantee.MaximumSettingValue = CreateValueGenerator(element, settingValueSettingLimits);
                    }
                    else
                    {
                        _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.MaximumSettingValue));
                    }
                }
                //Handle inclusion filter element.
                else if (element.Name.LocalName == ElementTypes.InclusionFilter.ToString())
                {
                    if (!foundElements.Contains(ElementTypes.InclusionFilter))
                    {
                        foundElements.Add(ElementTypes.InclusionFilter, element);

                        ParseWeaponFilterElement(element, ref weaponSettingGuarantee.GetCategoryInclusionFilterRef(), ref weaponSettingGuarantee.GetInclusionMatchTypeRef());
                    }
                    else
                    {
                        _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.InclusionFilter));
                    }
                }
                //Handle inclusion filter element.
                else if (element.Name.LocalName == ElementTypes.ExclusionFilter.ToString())
                {
                    if (!foundElements.Contains(ElementTypes.ExclusionFilter))
                    {
                        foundElements.Add(ElementTypes.ExclusionFilter, element);

                        ParseWeaponFilterElement(element, ref weaponSettingGuarantee.GetCategoryExclusionFilterRef(), ref weaponSettingGuarantee.GetExclusionMatchTypeRef());
                    }
                    else
                    {
                        _errorCollection.AddRepeatedElement(element, foundElements.Get(ElementTypes.ExclusionFilter));
                    }
                }
                //Invalid element.
                else
                {
                    _errorCollection.AddInvalidElement(element);
                }
            }

            return(weaponSettingGuarantee);
        }