Пример #1
0
 /// <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);
 }
Пример #2
0
        /// <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);
                }
            }
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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;
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
 /// <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));
 }
Пример #8
0
 internal GMObjectProperty()
 {
     ResourceFilter = GMResourceType.AllResources;
 }