Esempio n. 1
0
        /// <summary>
        /// Reads and parses a previously emitted XML document representing the project.
        /// </summary>
        protected void ParseProjectFile(XmlDocument document)
        {
            // Loading data from various XML nodes.
            XmlNode projectNode = document.SelectSingleNode("//project");
            XmlNode gameNode    = projectNode.SelectSingleNode("game");
            string  gameName    = gameNode.Attributes["name"].Value;

            // Make sure that we have a valid platform here.
            string gamePlatform = gameNode.Attributes["platform"].Value;

            if (!Enum.IsDefined(typeof(Platform), gamePlatform))
            {
                throw new ProjectFileNotValidException("The specified platform does not exist: " + gamePlatform);
            }

            Platform platform = (Platform)Enum.Parse(typeof(Platform), gamePlatform);

            if (GameDefinitionRequest != null)
            {
                GameDefinitionRequestEventArgs e = new GameDefinitionRequestEventArgs(gameName, platform);
                GameDefinitionRequest(this, e);
                game = e.GameDefinition;
                if (game == null)
                {
                    throw new ProjectFileNotValidException("Could not identify the referenced game id: " + e.GameID);
                }
            }
            else
            {
                throw new Exception(
                          "Cannot retrieve game definition - the GameDefinitionRequest event is not handled by the Core.");
            }

            XmlNode infoNode = projectNode.SelectSingleNode("info");

            author      = infoNode.SelectSingleNode("author").InnerText;
            description = infoNode.SelectSingleNode("description").InnerText;
            version     = new ProjectVersion(infoNode.SelectSingleNode("version").InnerText);

            XmlNode templatesNode = projectNode.SelectSingleNode("template");

            templateName = templatesNode.InnerText;

            XmlNode mapInfoNode = projectNode.SelectSingleNode("mapinfo");

            mapName          = mapInfoNode.SelectSingleNode("name").InnerText;
            filename         = mapInfoNode.SelectSingleNode("filename").InnerText;
            uiText           = mapInfoNode.SelectSingleNode("uitext").InnerText;
            uiScreenShotFile = mapInfoNode.SelectSingleNode("uiscreenshot").InnerText;

            projectReferencesTable = new FileHierarchy();

            XmlNodeList referencesNodeList = projectNode.SelectNodes("references//tag");

            foreach (XmlNode tagNode in referencesNodeList)
            {
                string path = tagNode.InnerText;
                AddTagReference(path);
            }

            templates              = new TemplateTagList(game.GetProjectTemplate(templateName));
            templates.FileAdded   += templates_FileAdded;
            templates.FileRemoved += templates_FileRemoved;

            XmlNodeList templatesNodeList = projectNode.SelectNodes("essentialTags//tag");

            foreach (XmlNode tagNode in templatesNodeList)
            {
                string  templateID = tagNode.Attributes["template_id"].InnerText;
                TagPath path       = new TagPath(tagNode.InnerText);
                templates.Add(templateID, path);
            }
        }