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) });
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))); }
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; } }
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); }
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); } } } }
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); } }
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); } }
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)))); }
public static AttributeCollection FromNanoXmlNode(NanoXmlNode node) { return(new(node.Attributes)); }