Exemplo n.º 1
0
        public IProjectReader GetProjectReader()
        {
            var mainFilePath = _dataSource.GetGameFile();
            var mainExt      = Path.GetExtension(mainFilePath.Relative);

            if (ProjectReaders.ContainsKey(mainExt))
            {
                var reader = ProjectReaders[mainExt];
                reader.Init(_dataSource);
                return(reader);
            }

            throw new ArgumentException("The game file is not of a supported type.");
        }
Exemplo n.º 2
0
        public Project Load()
        {
            _project = new Project();

            var gameFilePath = _dataSource.GetGameFile();

            _project.GameFile = gameFilePath;

            var      stream = _dataSource.GetData(gameFilePath);
            XElement reader = XElement.Load(stream);

            XAttribute nameAttr = reader.Attribute("name");

            if (nameAttr != null)
            {
                _project.Name = nameAttr.Value;
            }

            XAttribute authAttr = reader.Attribute("author");

            if (authAttr != null)
            {
                _project.Author = authAttr.Value;
            }

            XElement sizeNode = reader.Element("Size");

            if (sizeNode != null)
            {
                _project.ScreenWidth  = sizeNode.TryAttribute <int>("x");
                _project.ScreenHeight = sizeNode.TryAttribute <int>("y");
            }

            XElement nsfNode = reader.Element("NSF");

            if (nsfNode != null)
            {
                LoadNSFInfo(nsfNode);
            }

            XElement stagesNode = reader.Element("Stages");

            if (stagesNode != null)
            {
                foreach (XElement stageNode in stagesNode.Elements("Stage"))
                {
                    var info = new StageLinkInfo();
                    info.Name      = stageNode.RequireAttribute("name").Value;
                    info.StagePath = FilePath.FromRelative(stageNode.RequireAttribute("path").Value, _project.BaseDir);

                    var winNode = stageNode.Element("Win");
                    if (winNode != null)
                    {
                        var winHandlerNode = winNode.Element("Next");
                        if (winHandlerNode != null)
                        {
                            info.WinHandler = _transferReader.Load(winHandlerNode);
                        }
                    }

                    var loseNode = stageNode.Element("Lose");
                    if (loseNode != null)
                    {
                        var loseHandlerNode = loseNode.Element("Next");
                        if (loseHandlerNode != null)
                        {
                            info.LoseHandler = _transferReader.Load(loseHandlerNode);
                        }
                    }

                    _project.AddStage(info);
                }
            }

            XElement startNode = reader.Element("Next");

            if (startNode != null)
            {
                _project.StartHandler = _transferReader.Load(startNode);
            }

            _project.AddIncludeFiles(reader.Elements("Include")
                                     .Select(e => e.Value)
                                     .Where(v => !string.IsNullOrEmpty(v.Trim())));

            _project.AddIncludeFolders(reader.Elements("IncludeFolder")
                                       .Select(e => e.Value)
                                       .Where(v => !string.IsNullOrEmpty(v.Trim())));

            var includeReader = new IncludeFileXmlReader();

            foreach (var includePath in _project.Includes)
            {
                string includefile = includePath.Absolute;
                includeReader.LoadIncludedFile(_project, includefile);
            }

            stream.Close();

            return(_project);
        }