/// <summary> /// If the Game Maker resource tag gets written to file regardless of if it has resources or not /// </summary> /// <param name="type">The type to check</param> /// <returns>If the given type is a default type</returns> private static bool IsDefaultNode(GMResourceType type) { return(type == GMResourceType.Configs || type == GMResourceType.NewExtensions || type == GMResourceType.Sounds || type == GMResourceType.Sprites || type == GMResourceType.Backgrounds || type == GMResourceType.Paths || type == GMResourceType.TutorialState); }
/// <summary> /// Reads nodes recursively /// </summary> /// <param name="xmlNode">The current xml node</param> /// <param name="gmNode">The current Game Maker node</param> /// <param name="type">The current resource type</param> /// <param name="assets">The asset list to add any assets to</param> private static void ReadNodeGMX(XmlNode xmlNode, GMNode gmNode, GMResourceType type, List <string> assets) { // If not a valid node, continue if (!IsValidXmlNode(xmlNode)) { return; } // Read node data gmNode.NodeType = GetNodeType(xmlNode); gmNode.ResourceType = gmNode.NodeType == GMNodeType.Parent ? GetResourceType(xmlNode.Name) : type; gmNode.ResourceSubType = gmNode.NodeType == GMNodeType.Child && gmNode.ResourceType == GMResourceType.DataFiles ? GMResourceSubType.DataFile : GetResourceSubType(xmlNode.ParentNode.Name); gmNode.FilePath = gmNode.NodeType == GMNodeType.Child ? gmNode.ResourceSubType == GMResourceSubType.DataFile ? xmlNode.ParentNode.ParentNode.ParentNode.Attributes["name"].Value : xmlNode.Value : ""; gmNode.Name = GetNodeName(xmlNode, gmNode); gmNode.Id = gmNode.NodeType == GMNodeType.Child ? GetIdFromName(gmNode.Name) : -1; gmNode.Children = xmlNode.HasChildNodes ? xmlNode.ChildNodes.Count : 0; gmNode.Nodes = gmNode.Children == 0 ? null : new GMNode[gmNode.Children]; // If the node is a child and a major game resource, add to asset list if (gmNode.NodeType == GMNodeType.Child && gmNode.ResourceSubType != GMResourceSubType.None) { assets.Add(gmNode.Name); } // If there are no children, return if (gmNode.Children == 0) { return; } // Iterate through children for (int i = 0; i < gmNode.Children; i++) { gmNode.Nodes[i] = new GMNode(); GMResourceSubType sub = GetResourceSubType(xmlNode.ChildNodes[i].Name); // If the next node is a resource subtype node, skip it and just get its text value, else read as usual if (sub != GMResourceSubType.None) { // If not a constant get standard attributes gmNode.Nodes[i].Tag = GetChildNodeAttribute(xmlNode.ChildNodes[i], gmNode); if (sub == GMResourceSubType.DataFile) { ReadNodeGMX(xmlNode.ChildNodes[i].ChildNodes[0].ChildNodes[0], gmNode.Nodes[i], gmNode.ResourceType, assets); } else { ReadNodeGMX(xmlNode.ChildNodes[i].ChildNodes[0], gmNode.Nodes[i], gmNode.ResourceType, assets); } } else { ReadNodeGMX(xmlNode.ChildNodes[i], gmNode.Nodes[i], gmNode.ResourceType, assets); } } }
/// <summary> /// Gets the name attribute of a parent node /// </summary> /// <param name="type">The resource type of the parent node</param> /// <returns>The name attribute value of the parent node</returns> private static string GetParentName(GMResourceType type) { // Get the name value of the resource type string name = GMXEnumString(type).ToLower(); // Shave off the 's' character at the end of the string if (type == GMResourceType.Sounds || type == GMResourceType.Backgrounds) { name = name.Remove(name.Length - 1); } // Return the resource name of the parent return(name); }
/// <summary> /// Gets the index to the Game Maker resource type /// </summary> /// <returns>An index to the given Game Maker resource type's parent node</returns> private int GetResourceIndex(GMResourceType type) { // Get the room parent node for (int i = 0; i < _project.ProjectTree.Nodes.Length; i++) { if (_project.ProjectTree.Nodes[i].ResourceType == type) { return(i); } } // Return room node return(-1); }
internal override void Deserialize(ModelBase model) { var propertyModel = (GMObjectPropertyModel)model; Id = propertyModel.id; Name = propertyModel.varName; Type = propertyModel.varType; Value = propertyModel.value; Range = propertyModel.rangeEnabled ? Tuple.Create(propertyModel.rangeMin, propertyModel.rangeMax) : null; ListItems = propertyModel.listItems; ResourceFilter = propertyModel.resourceFilter; }
/// <summary> /// Gets the given resource type's project node /// </summary> /// <param name="file">The path to the project file</param> /// <param name="type">The resource type to search for</param> /// <returns>A node of the resource type</returns> public static GMNode ReadTreeNodeGMX(string file, GMResourceType type) { // Get all the project nodes Dictionary <string, string> assets = new Dictionary <string, string>(); GMNode parent = ReadTreeGMX(file); // Iterate through nodes till we find the desired type foreach (GMNode node in parent.Nodes) { if (node.ResourceType == type) { return(node); } } // The resource type could not be found return(null); }
/// <summary> /// If a parent node has a name attribute for their resource type /// </summary> /// <param name="type">The resource type of the parent node</param> /// <returns>Id the parent node has a name attribute</returns> private static bool HasNameAttribute(GMResourceType type) { return(!(type == GMResourceType.NewExtensions || type == GMResourceType.Help)); }
internal GMObjectProperty() { ResourceFilter = GMResourceType.AllResources; }