Esempio n. 1
0
        public static PathingCategory FromNanoXmlNode(NanoXmlNode categoryNode, PathingCategory parent)
        {
            string categoryName = categoryNode.GetAttribute(MARKERCATEGORY_NAME_ATTR)?.Value;

            // Can't define a marker category without a name
            if (string.IsNullOrEmpty(categoryName))
            {
                return(null);
            }

            var subjCategory = parent.Contains(categoryName)
                               // We're extending an existing category
                                   ? parent[categoryName]
                               // We're adding a new category
                                   : parent.GetOrAddCategoryFromNamespace(categoryName);

            subjCategory.DisplayName   = categoryNode.GetAttribute(MARKERCATEGORY_DISPLAYNAME_ATTR)?.Value;
            subjCategory.IsSeparator   = categoryNode.GetAttribute(MARKERCATEGORY_ISSEPARATOR_ATTR)?.Value == "1";
            subjCategory.DefaultToggle = categoryNode.GetAttribute(MARKERCATEGORY_DEFAULTTOGGLE_ATTR)?.Value != "0";

            subjCategory.SetAttributes(AttributeBuilder.FromNanoXmlNode(categoryNode));
            if (parent.Namespace == "Tactical.GuildMission.Bounty")
            {
                subjCategory.SetAttributes(new PathableAttributeCollection(new List <PathableAttribute> {
                    new PathableAttribute("IconFile", "Data\\Bounty.png")
                }));
            }

            return(subjCategory);
        }
 public static async Task <PointOfInterest> UnpackPathableAsync(NanoXmlNode pathableNode, IPackResourceManager pathableResourceManager, PathingCategory rootPathingCategory)
 {
     return(pathableNode.Name.ToLowerInvariant() switch {
         PackConstImpl.XML_ELEMENT_POI => await UnpackMarkerPoi(pathableNode, pathableResourceManager, rootPathingCategory),
         PackConstImpl.XML_ELEMENT_TRAIL => await UnpackTrailPoi(pathableNode, pathableResourceManager, rootPathingCategory),
         PackConstImpl.XML_ELEMENT_ROUTE => await UnpackRoutePoi(pathableNode, pathableResourceManager, rootPathingCategory),
         _ => await UnpackOtherPoi(pathableNode, pathableResourceManager, rootPathingCategory)
     });
Esempio n. 3
0
 public XmlNode(NanoXmlNode nanoXmlNode)
 {
     Name       = nanoXmlNode.Name;
     Attributes =
         new List <IAttribute>(
             nanoXmlNode.Attributes.Select(a => new NodeAttribute {
         Name = a.Name, Value = a.Value
     }));
     SubNodes = new List <INode>(nanoXmlNode.SubNodes.Select(n => new XmlNode(n)));
 }
Esempio n. 4
0
        public static void UnpackPathable(NanoXmlNode pathableNode, PathableResourceManager pathableResourceManager, PathingCategory rootCategory)
        {
            switch (pathableNode.Name.ToLowerInvariant())
            {
            case ELEMENT_POITYPE_POI:
                var poiAttributes = AttributeBuilder.FromNanoXmlNode(pathableNode);

                var newPoiMarker = new Pathables.TacOMarkerPathable(poiAttributes, pathableResourceManager, rootCategory);

                if (newPoiMarker.SuccessfullyLoaded)
                {
                    MarkersAndPathsModule.ModuleInstance._currentReader.RegisterPathable(newPoiMarker);
                }
                else
                {
                    Logger.Warn("Failed to load marker: {markerInfo}", poiAttributes);
                }
                break;

            case ELEMENT_POITYPE_TRAIL:
                var trailAttributes = AttributeBuilder.FromNanoXmlNode(pathableNode);

                var newPathTrail = new Pathables.TacOTrailPathable(trailAttributes, pathableResourceManager, rootCategory);

                if (newPathTrail.SuccessfullyLoaded)
                {
                    MarkersAndPathsModule.ModuleInstance._currentReader.RegisterPathable(newPathTrail);
                }
                else
                {
                    Logger.Warn("Failed to load trail: {trailInfo}", trailAttributes);
                }
                break;

            case ELEMENT_POITYPE_ROUTE:
                var poiNodes = pathableNode.SelectNodes("poi");

                foreach (var poiNode in poiNodes)
                {
                    UnpackPathable(poiNode, pathableResourceManager, rootCategory);
                }

                break;

            default:
                Logger.Warn("Tried to pack {pathableNodeName} as a POI!", pathableNode.Name);
                break;
            }
        }
Esempio n. 5
0
        public static PathingCategory FromNanoXmlNode(NanoXmlNode categoryNode, PathingCategory parent)
        {
            string categoryName = categoryNode.GetAttribute(MARKERCATEGORY_NAME_ATTR)?.Value;

            // Can't define a marker category without a name.
            if (string.IsNullOrEmpty(categoryName))
            {
                // TODO: Log markercategory has no name.
                return(null);
            }

            var subjCategory = parent.Contains(categoryName)
                               // We're extending an existing category.
                                   ? parent[categoryName]
                               // We're adding a new category.
                                   : parent.GetOrAddCategoryFromNamespace(categoryName);

            subjCategory.LoadedFromPack = true;

            // Have to ensure we only override if the attributes exist in case we're overwriting an existing category.
            if (categoryNode.TryGetAttribute(MARKERCATEGORY_DISPLAYNAME_ATTR, out var displayNameAttr))
            {
                subjCategory.DisplayName = displayNameAttr.Value;
            }

            if (categoryNode.TryGetAttribute(MARKERCATEGORY_ISSEPARATOR_ATTR, out var isSeparatorAttr))
            {
                subjCategory.IsSeparator = isSeparatorAttr.Value == "1";
            }

            if (categoryNode.TryGetAttribute(MARKERCATEGORY_DEFAULTTOGGLE_ATTR, out var defaultToggleAttr))
            {
                subjCategory.DefaultToggle = defaultToggleAttr.Value != "0";
            }

            // Remove redundant attributes now kept track of by the pathable itself.
            categoryNode.Attributes.RemoveAll(attr => new[] {
                MARKERCATEGORY_NAME_ATTR,
                //MARKERCATEGORY_DISPLAYNAME_ATTR,
                MARKERCATEGORY_ISSEPARATOR_ATTR,
                MARKERCATEGORY_DEFAULTTOGGLE_ATTR
            }.Contains(attr.Name));

            subjCategory.SetAttributes(PathablePrototypeAttributeBuilder.FromNanoXmlNode(categoryNode));

            return(subjCategory);
        }
Esempio n. 6
0
            private void LoadFromAttributes(LangDescription item, NanoXmlNode itemElement)
            {
                var properties = typeof(LangDescription).GetProperties();

                /* loop through fields */
                foreach (var property in properties)
                {
                    if (property.PropertyType == typeof(string))
                    {
                        var attr = itemElement.GetAttribute(property.Name);
                        if (attr != null)
                        {
                            var val = TypeDescriptor.GetConverter(property.PropertyType).ConvertFromInvariantString(attr.Value);
                            property.SetValue(item, val, null);
                        }
                    }
                }
            }
Esempio n. 7
0
        public static void UnpackCategory(NanoXmlNode categoryNode, PathingCategory pathingCategoryParent)
        {
            if (!string.Equals(categoryNode.Name, ELEMENT_CATEGORY, StringComparison.OrdinalIgnoreCase))
            {
                // TODO: Log attempted to unpack wrong element type as markercategory
                return;
            }

            var loadedCategory = FromNanoXmlNode(categoryNode, pathingCategoryParent);

            if (loadedCategory == null)
            {
                return;
            }

            foreach (var childCategoryNode in categoryNode.SubNodes)
            {
                UnpackCategory(childCategoryNode, loadedCategory);
            }
        }
Esempio n. 8
0
        public static void UnpackCategory(NanoXmlNode categoryNode, PathingCategory categoryParent)
        {
            if (!string.Equals(categoryNode.Name, ELEMENT_CATEGORY, StringComparison.OrdinalIgnoreCase))
            {
                Logger.Warn("Tried to unpack {categoryNodeName} as a MarkerCategory!", categoryNode.Name);
                return;
            }

            var loadedCategory = FromNanoXmlNode(categoryNode, categoryParent);

            if (loadedCategory == null)
            {
                return;
            }

            foreach (NanoXmlNode childCategoryNode in categoryNode.SubNodes)
            {
                UnpackCategory(childCategoryNode, loadedCategory);
            }
        }
Esempio n. 9
0
        public static PathingCategory FromNanoXmlNode(NanoXmlNode categoryNode, PathingCategory parent)
        {
            string categoryName = categoryNode.GetAttribute(MARKERCATEGORY_NAME_ATTR)?.Value;

            // Can't define a marker category without a name
            if (string.IsNullOrEmpty(categoryName))
            {
                return(null);
            }

            var subjCategory = parent.Contains(categoryName)
                               // We're extending an existing category
                                   ? parent[categoryName]
                               // We're adding a new category
                                   : parent.GetOrAddCategoryFromNamespace(categoryName);

            subjCategory.DisplayName = categoryNode.GetAttribute(MARKERCATEGORY_DISPLAYNAME_ATTR)?.Value;

            subjCategory.SetAttributes(AttributeBuilder.FromNanoXmlNode(categoryNode));

            return(subjCategory);
        }
 public static PathableAttributeCollection FromNanoXmlNode(NanoXmlNode node)
 {
     return(new PathableAttributeCollection(node.Attributes.Select(a => new PathableAttribute(a.Name, a.Value))));
 }
Esempio n. 11
0
 public static AttributeCollection FromNanoXmlNode(NanoXmlNode node)
 {
     return(new(node.Attributes));
 }